summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL8
-rw-r--r--README4
-rw-r--r--VERSION2
-rw-r--r--addon/configgen/config_templ.l52
-rw-r--r--addon/configgen/configgen.cpp38
-rwxr-xr-xconfigure2
-rw-r--r--doc/config.doc146
-rw-r--r--doc/language.doc12
-rw-r--r--packages/rpm/doxygen.spec2
-rw-r--r--src/classdef.cpp11
-rw-r--r--src/code.l101
-rw-r--r--src/config.h4
-rw-r--r--src/config.l113
-rw-r--r--src/definition.cpp2
-rw-r--r--src/dot.cpp3
-rw-r--r--src/doxygen.cpp82
-rw-r--r--src/doxygen.h1
-rw-r--r--src/doxytag.l6
-rw-r--r--src/htmlgen.cpp6
-rw-r--r--src/index.cpp7
-rw-r--r--src/language.cpp5
-rw-r--r--src/latexgen.cpp52
-rw-r--r--src/memberdef.cpp3
-rw-r--r--src/pre.l7
-rw-r--r--src/rtfgen.cpp601
-rw-r--r--src/scanner.l24
-rw-r--r--src/suffixtree.cpp4
-rw-r--r--src/suffixtree.h5
-rw-r--r--src/translator.h49
-rw-r--r--src/translator_cz.h940
-rw-r--r--src/translator_de.h22
-rw-r--r--src/translator_es.h30
-rw-r--r--src/translator_fi.h2
-rw-r--r--src/translator_fr.h2
-rw-r--r--src/translator_hr.h2
-rw-r--r--src/translator_it.h30
-rw-r--r--src/translator_jp.h29
-rw-r--r--src/translator_nl.h2
-rw-r--r--src/translator_ru.h2
-rw-r--r--src/translator_se.h2
-rw-r--r--src/util.cpp31
41 files changed, 1689 insertions, 757 deletions
diff --git a/INSTALL b/INSTALL
index 7b57165..6e6d7dd 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.1.4-20000625
+DOXYGEN Version 1.1.5
CONTENTS
--------
@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
- gunzip doxygen-1.1.4-20000625.src.tar.gz # uncompress the archive
- tar xf doxygen-1.1.4-20000625.src.tar # unpack it
+ gunzip doxygen-1.1.5.src.tar.gz # uncompress the archive
+ tar xf doxygen-1.1.5.src.tar # unpack it
2. Run the configure script:
@@ -255,4 +255,4 @@ The latest version of doxygen can be obtained at
Enjoy,
-Dimitri van Heesch (25 June 2000)
+Dimitri van Heesch (02 July 2000)
diff --git a/README b/README
index 7d7c361..f008894 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.1.4-20000625
+DOXYGEN Version 1.1.5
Please read INSTALL for compilation instructions.
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
-Dimitri van Heesch (25 June 2000)
+Dimitri van Heesch (02 July 2000)
diff --git a/VERSION b/VERSION
index 34515fa..e25d8d9 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.1.4-20000625
+1.1.5
diff --git a/addon/configgen/config_templ.l b/addon/configgen/config_templ.l
index 6e84ea4..e3c6b03 100644
--- a/addon/configgen/config_templ.l
+++ b/addon/configgen/config_templ.l
@@ -82,8 +82,6 @@ static bool * b=0;
static QStrList * l=0;
static int lastState;
static QCString elemStr;
-//static QCString tabSizeString;
-//static QCString colsInAlphaIndexString;
#CONFIG Static
/* -----------------------------------------------------------------
@@ -313,6 +311,56 @@ void configStrToVal()
}
Config::colsInAlphaIndex=cols;
}
+
+ if (maxDotGraphWidthString.isEmpty())
+ {
+ Config::maxDotGraphWidth=1024;
+ }
+ else
+ {
+ bool ok;
+ int width =maxDotGraphWidthString.toInt(&ok);
+ if (!ok)
+ {
+ warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n"
+ "Using the default of 1024 pixels!\n");
+ width=1024;
+ }
+ else if (width<250) // clip to lower bound
+ {
+ width=250;
+ }
+ else if (width>30000) // clip to upper bound
+ {
+ width=30000;
+ }
+ Config::maxDotGraphWidth=width;
+ }
+
+ if (maxDotGraphHeightString.isEmpty())
+ {
+ Config::maxDotGraphHeight=1024;
+ }
+ else
+ {
+ bool ok;
+ int height =maxDotGraphHeightString.toInt(&ok);
+ if (!ok)
+ {
+ warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n"
+ "Using the default of 1024 pixels!\n");
+ height=1024;
+ }
+ else if (height<250) // clip to lower bound
+ {
+ height=250;
+ }
+ else if (height>30000) // clip to upper bound
+ {
+ height=30000;
+ }
+ Config::maxDotGraphHeight=height;
+ }
}
static void substEnvVarsInString(QCString &s)
diff --git a/addon/configgen/configgen.cpp b/addon/configgen/configgen.cpp
index c1f139a..003ee1b 100644
--- a/addon/configgen/configgen.cpp
+++ b/addon/configgen/configgen.cpp
@@ -1338,6 +1338,16 @@ void init()
"Note: wordpad (write) and others do not support links. \n"
);
addDependency("rtfHyperFlag","generateRTF");
+ ConfigString::add("rtfStylesheetFile",
+ "RTF_STYLESHEET_FILE",
+ "",
+ "file to load stylesheet definitions from",
+ "Load stylesheet definitions from file. Syntax is similar to doxygen's \n"
+ "config file, i.e. a series of assigments. You only have to provide \n"
+ "replacements, missing definitions are set to their default value. \n",
+ ConfigString::File
+ );
+ addDependency("rtfStylesheetFile","generateRTF");
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Man","configuration options related to the man page output");
//-----------------------------------------------------------------------------------------------
@@ -1383,9 +1393,19 @@ void init()
"expand macros in the source.",
"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. \n"
+ "compilation will be performed. Macro expansion can be done in a controlled \n"
+ "way by setting EXPAND_ONLY_PREDEF to YES. \n"
);
addDependency("macroExpansionFlag","preprocessingFlag");
+ ConfigBool::add( "onlyPredefinedFlag",
+ "EXPAND_ONLY_PREDEF",
+ "FALSE",
+ "expand only predefined macros",
+ "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_PREDEFINED tags. \n"
+ );
+ addDependency("onlyPredefinedFlag","preprocessingFlag");
ConfigBool::add( "searchIncludeFlag",
"SEARCH_INCLUDES",
"TRUE",
@@ -1415,15 +1435,15 @@ void init()
"omitted =1 is assumed. \n"
);
addDependency("predefined","preprocessingFlag");
- ConfigBool::add( "onlyPredefinedFlag",
- "EXPAND_ONLY_PREDEF",
- "FALSE",
- "expand only predefined macros",
- "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 tag. \n"
+ ConfigList::add( "expandAsDefinedList",
+ "EXPAND_AS_DEFINED",
+ "",
+ "list of defines to expand",
+ "If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY 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. \n"
);
- addDependency("onlyPredefinedFlag","preprocessingFlag");
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "External","Configuration::addtions related to external references ");
//-----------------------------------------------------------------------------------------------
diff --git a/configure b/configure
index 5309027..ecb6398 100755
--- a/configure
+++ b/configure
@@ -353,6 +353,8 @@ if test "$f_shared" = NO; then
cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS = -non_shared
EOF
+ elif test "$f_platform" = "solaris-cc"; then
+ TMAKE_LFLAGS = -Bstatic
else
cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS = -static
diff --git a/doc/config.doc b/doc/config.doc
index 55774fb..99cf664 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -131,6 +131,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_repeat_brief REPEAT_BRIEF
<li> \refitem cfg_rtf_hyperlinks RTF_HYPERLINKS
<li> \refitem cfg_rtf_output RTF_OUTPUT
+<li> \refitem cfg_rtf_stylesheet_file RTF_STYLESHEET_FILE
<li> \refitem cfg_search_includes SEARCH_INCLUDES
<li> \refitem cfg_searchengine SEARCHENGINE
<li> \refitem cfg_show_include_files SHOW_INCLUDE_FILES
@@ -194,7 +195,7 @@ followed by the descriptions of the tags grouped by category.
\addindex DISABLE_INDEX
If you want full control over the layout of the generated HTML pages it
might be necessary to disable the index and replace it with your own.
- The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+ The \c DISABLE_INDEX tag can be used to turn on/off the condensed index at
top of each page. A value of NO (the default) enables the index and the
value YES disables it.
@@ -311,7 +312,7 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_strip_code_comments
<dt>\c STRIP_CODE_COMMENTS <dd>
\addindex STRIP_CODE_COMMENTS
- Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+ Setting the \c STRIP_CODE_COMMENTS tag to \c YES (the default) will instruct
doxygen to hide any special comment blocks from generated source code
fragments. Normal C and C++ comments will always remain visible.
@@ -327,9 +328,9 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_hide_scope_names
<dt>\c HIDE_SCOPE_NAMES <dd>
\addindex HIDE_SCOPE_NAMES
- If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+ If the \c HIDE_SCOPE_NAMES tag is set to \c 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.
+ documentation. If set to \c YES the scope will be hidden.
\anchor cfg_verbatim_headers
<dt>\c VERBATIM_HEADERS <dd>
@@ -370,9 +371,9 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_sort_member_docs
<dt>\c SORT_MEMBER_DOCS <dd>
\addindex SORT_MEMBER_DOCS
- If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+ If the \c SORT_MEMBER_DOCS tag is set to \c 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
+ alphabetically by member name. If set to \c NO the members will appear in
declaration order.
\anchor cfg_tab_size
@@ -413,8 +414,8 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_warn_if_undocumented
<dt>\c WARN_IF_UNDOCUMENTED <dd>
\addindex WARN_IF_UNDOCUMENTED
- 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
+ If \c WARN_IF_UNDOCUMENTED is set to \c YES, then doxygen will generate warnings
+ for undocumented members. If \c EXTRACT_ALL is set to \c YES then this flag will
automatically be disabled.
\anchor cfg_warn_format
@@ -467,7 +468,7 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_exclude_patterns
<dt>\c EXCLUDE_PATTERNS <dd>
\addindex EXCLUDE_PATTERNS
- If the value of the INPUT tag contains directories, you can use the
+ If the value of the \c INPUT tag contains directories, you can use the
\c EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
certain files from those directories.
@@ -575,8 +576,8 @@ followed by the descriptions of the tags grouped by category.
<code>\$projectnumber</code>.
Doxygen will replace them by respectively
the title of the page, the current date and time, only the current date,
- the version number of doxygen, the project name (see PROJECT_NAME), or the
- project number (see PROJECT_NUMBER).
+ the version number of doxygen, the project name (see \c PROJECT_NAME), or the
+ project number (see \c PROJECT_NUMBER).
\anchor cfg_html_footer
<dt>\c HTML_FOOTER <dd>
@@ -596,8 +597,8 @@ followed by the descriptions of the tags grouped by category.
<code>\$projectnumber</code>.
Doxygen will replace them by respectively
the title of the page, the current date and time, only the current date,
- the version number of doxygen, the project name (see PROJECT_NAME), or the
- project number (see PROJECT_NUMBER).
+ the version number of doxygen, the project name (see \c PROJECT_NAME), or the
+ project number (see \c PROJECT_NUMBER).
\anchor cfg_html_stylesheet
@@ -638,10 +639,10 @@ FONT.charliteral { color: #008080 }
\addindex HTML_ALIGN_MEMBERS
If the \c HTML_ALIGN_MEMBERS tag is set to \c 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.
+ \c NO a bullet list will be used.
<b>Note:</b>
- Setting this tag to NO will become obsolete in the future, since I only
+ Setting this tag to \c NO will become obsolete in the future, since I only
intent to support and test the aligned representation.
\anchor cfg_generate_htmlhelp
@@ -695,7 +696,7 @@ FONT.charliteral { color: #008080 }
\anchor cfg_paper_type
<dt>\c PAPER_TYPE <dd>
\addindex PAPER_TYPE
- The PAPER_TYPE tag can be used to set the paper type that is used
+ The \c PAPER_TYPE tag can be used to set the paper type that is used
by the printer. Possible values are:
<ul>
<li><code>a4</code> (210 x 297 mm).
@@ -758,8 +759,8 @@ EXTRA_PACKAGES = times
<code>\$projectnumber</code>.
Doxygen will replace them by respectively
the title of the page, the current date and time, only the current date,
- the version number of doxygen, the project name (see PROJECT_NAME), or the
- project number (see PROJECT_NUMBER).
+ the version number of doxygen, the project name (see \c PROJECT_NAME), or the
+ project number (see \c PROJECT_NUMBER).
\anchor cfg_pdf_hyperlinks
<dt>\c PDF_HYPERLINKS <dd>
@@ -796,7 +797,7 @@ EXTRA_PACKAGES = times
<dt>\c RTF_OUTPUT <dd>
\addindex RTF_OUTPUT
The \c 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
+ If a relative path is entered the value of \c OUTPUT_DIRECTORY will be
put in front of it. If left blank \c rtf will be used as the default path.
\anchor cfg_compact_rtf
@@ -818,6 +819,90 @@ EXTRA_PACKAGES = times
\par note:
wordpad (write) and others do not support links.
+\anchor cfg_rtf_stylesheet_file RTF_STYLESHEET_FILE
+<dt>\c RTF_STYLESHEET_FILE <dd>
+ \addindex RTF_STYLESHEET_FILE
+ Load stylesheet definitions from file. Syntax is similar to doxygen's
+ config file, i.e. a series of assigments. You only have to provide
+ replacements, missing definitions are set to their default value.
+
+\htmlonly
+Here are the default settings:
+<font size=2><pre>Reset = \\pard\\plain
+Heading1 = \\s1\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs36\\kerning36\\cgrid
+Heading2 = \\s2\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs28\\kerning28\\cgrid
+Heading3 = \\s3\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\cgrid
+Heading4 = \\s4\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid
+Title = \\s15\\qc\\sb240\\sa60\\widctlpar\\outlinelevel0\\adjustright \\b\\f1\\fs32\\kerning28\\cgrid
+SubTitle = \\s16\\qc\\sa60\\widctlpar\\outlinelevel1\\adjustright \\f1\\cgrid
+BodyText = \\s17\\sa60\\sb30\\widctlpar\\qj \\fs22\\cgrid
+DenseText = \\s18\\widctlpar\\fs22\\cgrid
+Header = \\s28\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\adjustright \\fs20\\cgrid
+Footer = \\s29\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\qr\\adjustright \\fs20\\cgrid
+GroupHeader = \\s30\\li360\\sa60\\sb120\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid
+CodeExample0 = \\s40\\li0\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+CodeExample1 = \\s41\\li360\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+CodeExample2 = \\s42\\li720\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+CodeExample3 = \\s43\\li1080\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+CodeExample4 = \\s44\\li1440\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+CodeExample5 = \\s45\\li1800\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+CodeExample6 = \\s46\\li2160\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+CodeExample7 = \\s47\\li2520\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+CodeExample8 = \\s48\\li2880\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+CodeExample9 = \\s49\\li3240\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
+ListContinue0 = \\s50\\li0\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+ListContinue1 = \\s51\\li360\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+ListContinue2 = \\s52\\li720\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+ListContinue3 = \\s53\\li1080\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+ListContinue4 = \\s54\\li1440\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+ListContinue5 = \\s55\\li1800\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+ListContinue6 = \\s56\\li2160\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+ListContinue7 = \\s57\\li2520\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+ListContinue8 = \\s58\\li2880\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+ListContinue9 = \\s59\\li3240\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
+DescContinue0 = \\s60\\li0\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+DescContinue1 = \\s61\\li360\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+DescContinue2 = \\s62\\li720\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+DescContinue3 = \\s63\\li1080\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+DescContinue4 = \\s64\\li1440\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+DescContinue5 = \\s65\\li1800\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+DescContinue6 = \\s66\\li2160\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+DescContinue7 = \\s67\\li2520\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+DescContinue8 = \\s68\\li2880\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+DescContinue9 = \\s69\\li3240\\widctlpar\\ql\\adjustright \\fs20\\cgrid
+LatexTOC0 = \\s70\\li0\\sa30\\sb30\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+LatexTOC1 = \\s71\\li360\\sa27\\sb27\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+LatexTOC2 = \\s72\\li720\\sa24\\sb24\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+LatexTOC3 = \\s73\\li1080\\sa21\\sb21\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+LatexTOC4 = \\s74\\li1440\\sa18\\sb18\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+LatexTOC5 = \\s75\\li1800\\sa15\\sb15\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+LatexTOC6 = \\s76\\li2160\\sa12\\sb12\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+LatexTOC7 = \\s77\\li2520\\sa9\\sb9\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+LatexTOC8 = \\s78\\li2880\\sa6\\sb6\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+LatexTOC9 = \\s79\\li3240\\sa3\\sb3\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
+ListBullet0 = \\s80\\fi-360\\li360\\widctlpar\\jclisttab\\tx360{\\*\\pn \\pnlvlbody\\ilvl0\\ls1\\pnrnot0\\pndec }\\ls1\\adjustright \\fs20\\cgrid
+ListBullet1 = \\s81\\fi-360\\li720\\widctlpar\\jclisttab\\tx720{\\*\\pn \\pnlvlbody\\ilvl0\\ls2\\pnrnot0\\pndec }\\ls2\\adjustright \\fs20\\cgrid
+ListBullet2 = \\s82\\fi-360\\li1080\\widctlpar\\jclisttab\\tx1080{\\*\\pn \\pnlvlbody\\ilvl0\\ls3\\pnrnot0\\pndec }\\ls3\\adjustright \\fs20\\cgrid
+ListBullet3 = \\s83\\fi-360\\li1440\\widctlpar\\jclisttab\\tx1440{\\*\\pn \\pnlvlbody\\ilvl0\\ls4\\pnrnot0\\pndec }\\ls4\\adjustright \\fs20\\cgrid
+ListBullet4 = \\s84\\fi-360\\li1800\\widctlpar\\jclisttab\\tx1800{\\*\\pn \\pnlvlbody\\ilvl0\\ls5\\pnrnot0\\pndec }\\ls5\\adjustright \\fs20\\cgrid
+ListBullet5 = \\s85\\fi-360\\li2160\\widctlpar\\jclisttab\\tx2160{\\*\\pn \\pnlvlbody\\ilvl0\\ls6\\pnrnot0\\pndec }\\ls6\\adjustright \\fs20\\cgrid
+ListBullet6 = \\s86\\fi-360\\li2520\\widctlpar\\jclisttab\\tx2520{\\*\\pn \\pnlvlbody\\ilvl0\\ls7\\pnrnot0\\pndec }\\ls7\\adjustright \\fs20\\cgrid
+ListBullet7 = \\s87\\fi-360\\li2880\\widctlpar\\jclisttab\\tx2880{\\*\\pn \\pnlvlbody\\ilvl0\\ls8\\pnrnot0\\pndec }\\ls8\\adjustright \\fs20\\cgrid
+ListBullet8 = \\s88\\fi-360\\li3240\\widctlpar\\jclisttab\\tx3240{\\*\\pn \\pnlvlbody\\ilvl0\\ls9\\pnrnot0\\pndec }\\ls9\\adjustright \\fs20\\cgrid
+ListBullet9 = \\s89\\fi-360\\li3600\\widctlpar\\jclisttab\\tx3600{\\*\\pn \\pnlvlbody\\ilvl0\\ls10\\pnrnot0\\pndec }\\ls10\\adjustright \\fs20\\cgrid
+ListEnum0 = \\s90\\fi-360\\li360\\widctlpar\\fs20\\cgrid
+ListEnum1 = \\s91\\fi-360\\li720\\widctlpar\\fs20\\cgrid
+ListEnum2 = \\s92\\fi-360\\li1080\\widctlpar\\fs20\\cgrid
+ListEnum3 = \\s93\\fi-360\\li1440\\widctlpar\\fs20\\cgrid
+ListEnum4 = \\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid
+ListEnum4 = \\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid
+ListEnum5 = \\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid
+ListEnum6 = \\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid
+ListEnum7 = \\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid
+ListEnum8 = \\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid
+</pre></font>
+\endhtmlonly
+
</dl>
\subsection man_output Man page related options
@@ -860,7 +945,15 @@ EXTRA_PACKAGES = times
\addindex MACRO_EXPANSION
If the \c MACRO_EXPANSION tag is set to \c YES Doxygen will expand all macro
names in the source code. If set to \c NO (the default) only conditional
- compilation will be performed.
+ compilation will be performed. Macro expansion can be done in a controlled
+ way by setting \c EXPAND_ONLY_PREDEF to \c YES.
+
+\anchor cfg_expand_only_predef
+<dt>\c EXPAND_ONLY_PREDEF <dd>
+ \addindex EXPAND_ONLY_PREDEF
+ If the \c EXPAND_ONLY_PREDEF and \c MACRO_EXPANSION tags are both set to YES
+ then the macro expansion is limited to the macros specified with the
+ \c PREDEFINED and \c EXPAND_AS_PREDEFINED tags.
\anchor cfg_search_includes
<dt>\c SEARCH_INCLUDES <dd>
@@ -884,12 +977,13 @@ EXTRA_PACKAGES = times
<code>name</code> or <code>name=definition</code> (no spaces).
If the definition and the = are omitted =1 is assumed.
-\anchor cfg_expand_only_predef
-<dt>\c EXPAND_ONLY_PREDEF <dd>
- \addindex EXPAND_ONLY_PREDEF
- If the \c EXPAND_ONLY_PREDEF and \c MACRO_EXPANSION tags are both set to YES
- then the macro expansion is limited to the macros specified with the
- \c PREDEFINED tag.
+\anchor cfg_expand_as_defined
+<dt>\c EXPAND_AS_DEFINED <dd>
+ \addindex EXPAND_AS_DEFINED
+ If the \c MACRO_EXPANSION and \c EXPAND_PREDEF_ONLY tags are set to \c 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 \c PREDEFINED tag if you want to use a different macro definition.
</dl>
\subsection config_extref External reference options
diff --git a/doc/language.doc b/doc/language.doc
index cdb3d1f..c3e04ca 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -59,7 +59,7 @@ Here is a list of the languages and their current maintainers:
</TD>
<TD>
<a href="mailto:bordeux@NOSPAM.lig.di.epfl.ch">
- bordeux@NOSPAM.lig.di.epfl.ch</a>
+ bordeux@NOSPAM.lig.di.epfl.ch</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
@@ -72,9 +72,9 @@ Here is a list of the languages and their current maintainers:
</TD>
<TD>
<a href="mailto:sahag96@NOSPAM.nts.mh.se">
- sahag96@NOSPAM.nts.mh.se</a><br>
+ sahag96@NOSPAM.nts.mh.se</a><br>
<a href="mailto:xet@NOSPAM.hem.passagen.se">
- xet@NOSPAM.hem.passagen.se</a>
+ xet@NOSPAM.hem.passagen.se</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
@@ -82,9 +82,12 @@ Here is a list of the languages and their current maintainers:
Czech
</TD>
<TD>
+ Petr Prikryl<BR>
Vlastimil Havran
</TD>
<TD>
+ <a href="mailto:prikrylp@NOSPAM.skil.cz">
+ prikrylp@NOSPAM.skil.cz</a>
<a href="mailto:havran@NOSPAM.fel.cvut.cz">
havran@NOSPAM.fel.cvut.cz</a>
</TD>
@@ -206,7 +209,8 @@ Here is a list of the languages and their current maintainers:
Swedish & Samuel H\"agglund & {\tt sahag96@nts.mh.se} \\
& XeT Erixon & {\tt xet@hem.passagen.se} \\
\hline
- Czech & Vlastimil Havran & {\tt havran@fel.cvut.cz} \\
+ Czech & Petr Prikryl & {\tt prikrylp@skil.cz} \\
+ & Vlastimil Havran & {\tt havran@fel.cvut.cz} \\
\hline
Romanian & Ionutz Borcoman & {\tt borco@borco-ei.eng.hokudai.ac.jp} \\
\hline
diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec
index 4909686..eeb5dfc 100644
--- a/packages/rpm/doxygen.spec
+++ b/packages/rpm/doxygen.spec
@@ -1,5 +1,5 @@
Name: doxygen
-Version: 1.1.4-20000625
+Version: 1.1.5
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
diff --git a/src/classdef.cpp b/src/classdef.cpp
index daacfba..558d33b 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -1605,8 +1605,14 @@ void ClassDef::determineImplUsageRelation()
int brCount=1;
while (te<typeLen && brCount!=0)
{
- if (type.at(te)=='<') brCount++;
- if (type.at(te)=='>') brCount--;
+ 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++;
}
}
@@ -1614,6 +1620,7 @@ void ClassDef::determineImplUsageRelation()
if (te>ts) templSpec = type.mid(ts,te-ts);
ClassDef *cd=getResolvedClass(name()+"::"+type.mid(i,l));
if (cd==0) cd=getResolvedClass(type.mid(i,l)); // TODO: also try inbetween scopes!
+ //printf("Search for class %s result=%p\n",type.mid(i,l).data(),cd);
if (cd) // class exists
{
found=TRUE;
diff --git a/src/code.l b/src/code.l
index a057a23..79ddac7 100644
--- a/src/code.l
+++ b/src/code.l
@@ -118,6 +118,7 @@ static const char * g_currentFontClass;
static bool g_searchingForBody;
static bool g_insideBody;
static int g_bodyCurlyCount;
+static ClassDef * g_classVar;
/*! 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
@@ -341,6 +342,34 @@ static void generateClassLink(OutputList &ol,char *clName,int *clNameLen=0)
}
}
+static ClassDef *stripClassName(const char *s)
+{
+ QCString tmp=s;
+ if (tmp.isEmpty()) return 0;
+ static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
+ int p=0,i,l;
+ while ((i=re.match(tmp,p,&l))!=-1)
+ {
+ ClassDef *cd=0;
+ QCString clName = tmp.mid(i,l);
+ //printf("g_classScope=`%s' clName=`%s'\n",g_classScope.data(),clName.data());
+ if (!g_classScope.isEmpty())
+ {
+ cd=getResolvedClass(g_classScope+"::"+clName);
+ }
+ if (cd==0)
+ {
+ cd=getResolvedClass(clName);
+ }
+ if (cd)
+ {
+ return cd;
+ }
+ p=i+l;
+ }
+ return 0;
+}
+
static bool getLink(const char *className,
const char *memberName,OutputList &result,
const char *text=0)
@@ -375,10 +404,11 @@ static bool getLink(const char *className,
}
}
Definition *d=0;
- if (cd) d=cd; else if (cd) d=nd; else if (fd) d=fd; else d=gd;
+ if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
if (d && d->isLinkable())
{
+ g_classVar = stripClassName(md->typeString());
if (g_currentDefinition && g_currentMemberDef &&
md!=g_currentMemberDef && g_insideBody)
{
@@ -393,32 +423,47 @@ static bool getLink(const char *className,
return FALSE;
}
-static ClassDef *stripClassName(const char *s)
+static bool generateClassMemberLink(OutputList &ol,ClassDef *mcd,const char *memName)
{
- QCString tmp=s;
- if (tmp.isEmpty()) return 0;
- static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
- int p=0,i,l;
- while ((i=re.match(tmp,p,&l))!=-1)
+ //printf("generateClassMemberLink(%s,%s)\n",mcd->name().data(),memName);
+ MemberName *mmn=memberNameDict[memName];
+ if (mmn)
{
- ClassDef *cd=0;
- QCString clName = tmp.mid(i,l);
- //printf("g_classScope=`%s' clName=`%s'\n",g_classScope.data(),clName.data());
- if (!g_classScope.isEmpty())
- {
- cd=getResolvedClass(g_classScope+"::"+clName);
- }
- if (cd==0)
+ MemberNameIterator mmni(*mmn);
+ MemberDef *mmd,*xmd=0;
+ ClassDef *xcd=0;
+ const int maxInheritanceDepth = 100000;
+ int mdist=maxInheritanceDepth;
+ for (;(mmd=mmni.current());++mmni)
{
- cd=getResolvedClass(clName);
+ int m=minClassDistance(mcd,mmd->memberClass());
+ if (m<mdist && mmd->memberClass()->isLinkable())
+ {
+ mdist=m;
+ xcd=mmd->memberClass();
+ xmd=mmd;
+ }
}
- if (cd)
+ if (mdist!=maxInheritanceDepth)
{
- return cd;
+ // extract class definition of the return type in order to resolve
+ // a->b()->c() like call chains
+ g_classVar = stripClassName(xmd->typeString());
+
+ // add usage reference
+ if (g_currentDefinition && g_currentMemberDef &&
+ xmd!=g_currentMemberDef && g_insideBody)
+ {
+ xmd->addSourceReference(g_currentMemberDef);
+ }
+
+ // write the actual link
+ writeMultiLineCodeLink(ol,xcd->getReference(),
+ xcd->getOutputFileBase(),xmd->anchor(),memName);
+ return TRUE;
}
- p=i+l;
}
- return 0;
+ return FALSE;
}
static void generateMemberLink(OutputList &ol,const char *varName,
@@ -493,6 +538,8 @@ static void generateMemberLink(OutputList &ol,const char *varName,
ClassDef *mcd=stripClassName(vmd->typeString());
if (mcd && mcd->isLinkable())
{
+ if (generateClassMemberLink(ol,mcd,memName)) return;
+#if 0
//printf("Found class `%s'\n",mcd->name().data());
MemberName *mmn=memberNameDict[memName];
if (mmn)
@@ -524,6 +571,7 @@ static void generateMemberLink(OutputList &ol,const char *varName,
return;
}
}
+#endif
}
}
}
@@ -925,9 +973,21 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
}
<MemberCall>{SCOPENAME}/{B}*"(" {
if (!g_name.isEmpty())
+ {
generateMemberLink(*g_code,g_name,yytext);
+ }
+ else if (g_classVar)
+ {
+ if (!generateClassMemberLink(*g_code,g_classVar,yytext))
+ {
+ g_code->codify(yytext);
+ }
+ g_classVar=0;
+ }
else
+ {
g_code->codify(yytext);
+ }
g_name.resize(0);g_type.resize(0);
g_bracketCount=0;
BEGIN(FuncCall);
@@ -1350,6 +1410,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
g_bodyCurlyCount = 0;
g_bracketCount = 0;
g_sharpCount = 0;
+ g_classVar = 0;
g_classScope = className;
g_exampleBlock = exBlock;
g_exampleName = exName;
diff --git a/src/config.h b/src/config.h
index 9330012..9665dbb 100644
--- a/src/config.h
+++ b/src/config.h
@@ -96,15 +96,17 @@ struct Config
static QCString rtfOutputDir; // the directory to put the RTF files
static bool compactRTFFlag; // generate more compact RTF
static bool rtfHyperFlag; // generate hyper links in RTF
+ static QCString rtfStylesheetFile; // file to load stylesheet definitions from
static bool generateMan; // generate Man pages
static QCString manOutputDir; // the directory to put the man pages
static QCString manExtension; // extension the man page files
static bool preprocessingFlag; // enable preprocessing
static bool macroExpansionFlag; // expand macros in the source.
+ static bool onlyPredefinedFlag; // expand only predefined macros
static bool searchIncludeFlag; // search for included files
static QStrList includePath; // list of include paths
static QStrList predefined; // list of predefined macro names.
- static bool onlyPredefinedFlag; // expand only predefined macros
+ static QStrList expandAsDefinedList; // list of defines to expand
static QStrList tagFileList; // list of tag files
static QCString genTagFile; // the tag file to generate
static bool allExtFlag; // include all external classes flag
diff --git a/src/config.l b/src/config.l
index 780e9ce..57064e7 100644
--- a/src/config.l
+++ b/src/config.l
@@ -131,15 +131,17 @@ bool Config::generateRTF = TRUE;
QCString Config::rtfOutputDir = "rtf";
bool Config::compactRTFFlag = FALSE;
bool Config::rtfHyperFlag = FALSE;
+QCString Config::rtfStylesheetFile;
bool Config::generateMan = TRUE;
QCString Config::manOutputDir = "man";
QCString Config::manExtension = ".3";
bool Config::preprocessingFlag = TRUE;
bool Config::macroExpansionFlag = FALSE;
+bool Config::onlyPredefinedFlag = FALSE;
bool Config::searchIncludeFlag = TRUE;
QStrList Config::includePath;
QStrList Config::predefined;
-bool Config::onlyPredefinedFlag = FALSE;
+QStrList Config::expandAsDefinedList;
QStrList Config::tagFileList;
QCString Config::genTagFile;
bool Config::allExtFlag = FALSE;
@@ -175,8 +177,6 @@ static bool * b=0;
static QStrList * l=0;
static int lastState;
static QCString elemStr;
-//static QCString tabSizeString;
-//static QCString colsInAlphaIndexString;
static QCString tabSizeString;
static QCString colsInAlphaIndexString;
static QCString maxDotGraphWidthString;
@@ -279,15 +279,17 @@ static int yyread(char *buf,int max_size)
<Start>"RTF_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::rtfOutputDir; s->resize(0); }
<Start>"COMPACT_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactRTFFlag; }
<Start>"RTF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::rtfHyperFlag; }
+<Start>"RTF_STYLESHEET_FILE"[ \t]*"=" { BEGIN(GetString); s=&Config::rtfStylesheetFile; s->resize(0); }
<Start>"GENERATE_MAN"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateMan; }
<Start>"MAN_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::manOutputDir; s->resize(0); }
<Start>"MAN_EXTENSION"[ \t]*"=" { BEGIN(GetString); s=&Config::manExtension; s->resize(0); }
<Start>"ENABLE_PREPROCESSING"[ \t]*"=" { BEGIN(GetBool); b=&Config::preprocessingFlag; }
<Start>"MACRO_EXPANSION"[ \t]*"=" { BEGIN(GetBool); b=&Config::macroExpansionFlag; }
+<Start>"EXPAND_ONLY_PREDEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::onlyPredefinedFlag; }
<Start>"SEARCH_INCLUDES"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchIncludeFlag; }
<Start>"INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::includePath; l->clear(); elemStr=""; }
<Start>"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; }
-<Start>"EXPAND_ONLY_PREDEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::onlyPredefinedFlag; }
+<Start>"EXPAND_AS_DEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::expandAsDefinedList; l->clear(); elemStr=""; }
<Start>"TAGFILES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::tagFileList; l->clear(); elemStr=""; }
<Start>"GENERATE_TAGFILE"[ \t]*"=" { BEGIN(GetString); s=&Config::genTagFile; s->resize(0); }
<Start>"ALLEXTERNALS"[ \t]*"=" { BEGIN(GetBool); b=&Config::allExtFlag; }
@@ -546,6 +548,7 @@ void dumpConfig()
printf("rtfOutputDir=`%s'\n",Config::rtfOutputDir.data());
printf("compactRTFFlag=`%d'\n",Config::compactRTFFlag);
printf("rtfHyperFlag=`%d'\n",Config::rtfHyperFlag);
+ printf("rtfStylesheetFile=`%s'\n",Config::rtfStylesheetFile.data());
printf("# configuration options related to the man page output\n");
printf("generateMan=`%d'\n",Config::generateMan);
printf("manOutputDir=`%s'\n",Config::manOutputDir.data());
@@ -553,6 +556,7 @@ void dumpConfig()
printf("# Configuration options related to the preprocessor \n");
printf("preprocessingFlag=`%d'\n",Config::preprocessingFlag);
printf("macroExpansionFlag=`%d'\n",Config::macroExpansionFlag);
+ printf("onlyPredefinedFlag=`%d'\n",Config::onlyPredefinedFlag);
printf("searchIncludeFlag=`%d'\n",Config::searchIncludeFlag);
{
char *is=Config::includePath.first();
@@ -570,7 +574,14 @@ void dumpConfig()
is=Config::predefined.next();
}
}
- printf("onlyPredefinedFlag=`%d'\n",Config::onlyPredefinedFlag);
+ {
+ char *is=Config::expandAsDefinedList.first();
+ while (is)
+ {
+ printf("expandAsDefinedList=`%s'\n",is);
+ is=Config::expandAsDefinedList.next();
+ }
+ }
printf("# Configuration::addtions related to external references \n");
{
char *is=Config::tagFileList.first();
@@ -677,15 +688,17 @@ void Config::init()
Config::rtfOutputDir = "rtf";
Config::compactRTFFlag = FALSE;
Config::rtfHyperFlag = FALSE;
+ Config::rtfStylesheetFile.resize(0);
Config::generateMan = TRUE;
Config::manOutputDir = "man";
Config::manExtension = ".3";
Config::preprocessingFlag = TRUE;
Config::macroExpansionFlag = FALSE;
+ Config::onlyPredefinedFlag = FALSE;
Config::searchIncludeFlag = TRUE;
Config::includePath.clear();
Config::predefined.clear();
- Config::onlyPredefinedFlag = FALSE;
+ Config::expandAsDefinedList.clear();
Config::tagFileList.clear();
Config::genTagFile.resize(0);
Config::allExtFlag = FALSE;
@@ -1556,6 +1569,17 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
+ t << "# Load stylesheet definitions from file. Syntax is similar to doxygen's \n";
+ t << "# config file, i.e. a series of assigments. You only have to provide \n";
+ t << "# replacements, missing definitions are set to their default value. \n";
+ t << "\n";
+ }
+ t << "RTF_STYLESHEET_FILE = ";
+ writeStringValue(t,Config::rtfStylesheetFile);
+ t << "\n";
+ if (!sl)
+ {
+ t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the man page output\n";
@@ -1614,7 +1638,8 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n";
t << "# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \n";
t << "# names in the source code. If set to NO (the default) only conditional \n";
- t << "# compilation will be performed. \n";
+ t << "# compilation will be performed. Macro expansion can be done in a controlled \n";
+ t << "# way by setting EXPAND_ONLY_PREDEF to YES. \n";
t << "\n";
}
t << "MACRO_EXPANSION = ";
@@ -1623,6 +1648,17 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
+ t << "# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \n";
+ t << "# then the macro expansion is limited to the macros specified with the \n";
+ t << "# PREDEFINED and EXPAND_AS_PREDEFINED tags. \n";
+ t << "\n";
+ }
+ t << "EXPAND_ONLY_PREDEF = ";
+ writeBoolValue(t,Config::onlyPredefinedFlag);
+ t << "\n";
+ if (!sl)
+ {
+ t << "\n";
t << "# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \n";
t << "# in the INCLUDE_PATH (see below) will be search if a #include is found. \n";
t << "\n";
@@ -1657,13 +1693,14 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
- t << "# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \n";
- t << "# then the macro expansion is limited to the macros specified with the \n";
- t << "# PREDEFINED tag. \n";
+ t << "# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then \n";
+ t << "# this tag can be used to specify a list of macro names that should be expanded. \n";
+ t << "# The macro definition that is found in the sources will be used. \n";
+ t << "# Use the PREDEFINED tag if you want to use a different macro definition. \n";
t << "\n";
}
- t << "EXPAND_ONLY_PREDEF = ";
- writeBoolValue(t,Config::onlyPredefinedFlag);
+ t << "EXPAND_AS_DEFINED = ";
+ writeStringList(t,Config::expandAsDefinedList);
t << "\n";
if (!sl)
{
@@ -1942,6 +1979,56 @@ void configStrToVal()
}
Config::colsInAlphaIndex=cols;
}
+
+ if (maxDotGraphWidthString.isEmpty())
+ {
+ Config::maxDotGraphWidth=1024;
+ }
+ else
+ {
+ bool ok;
+ int width =maxDotGraphWidthString.toInt(&ok);
+ if (!ok)
+ {
+ warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n"
+ "Using the default of 1024 pixels!\n");
+ width=1024;
+ }
+ else if (width<250) // clip to lower bound
+ {
+ width=250;
+ }
+ else if (width>30000) // clip to upper bound
+ {
+ width=30000;
+ }
+ Config::maxDotGraphWidth=width;
+ }
+
+ if (maxDotGraphHeightString.isEmpty())
+ {
+ Config::maxDotGraphHeight=1024;
+ }
+ else
+ {
+ bool ok;
+ int height =maxDotGraphHeightString.toInt(&ok);
+ if (!ok)
+ {
+ warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n"
+ "Using the default of 1024 pixels!\n");
+ height=1024;
+ }
+ else if (height<250) // clip to lower bound
+ {
+ height=250;
+ }
+ else if (height>30000) // clip to upper bound
+ {
+ height=30000;
+ }
+ Config::maxDotGraphHeight=height;
+ }
}
static void substEnvVarsInString(QCString &s)
@@ -2073,10 +2160,12 @@ void substituteEnvironmentVars()
substEnvVarsInStrList( Config::extraPackageList );
substEnvVarsInString( Config::latexHeaderFile );
substEnvVarsInString( Config::rtfOutputDir );
+ substEnvVarsInString( Config::rtfStylesheetFile );
substEnvVarsInString( Config::manOutputDir );
substEnvVarsInString( Config::manExtension );
substEnvVarsInStrList( Config::includePath );
substEnvVarsInStrList( Config::predefined );
+ substEnvVarsInStrList( Config::expandAsDefinedList );
substEnvVarsInStrList( Config::tagFileList );
substEnvVarsInString( Config::genTagFile );
substEnvVarsInString( Config::perlPath );
diff --git a/src/definition.cpp b/src/definition.cpp
index 629a45a..1d663ab 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -143,7 +143,7 @@ static bool readCodeFragment(const char *fileName,
{
// skip until the opening bracket or lonely : is found
bool found=FALSE;
- char cn;
+ char cn=0;
while (lineNr<=endLine && !f.atEnd() && !found)
{
while ((c=f.getch())!='{' && c!=':' && c!=-1) if (c=='\n') lineNr++;
diff --git a/src/dot.cpp b/src/dot.cpp
index a85e9bd..207aa38 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -996,7 +996,8 @@ static void findMaximalDotGraph(DotNode *root,
readBoundingBoxDot(baseName+"_tmp.dot",&width,&height);
width = width *96/72; // 96 pixels/inch, 72 points/inch
height = height*96/72; // 96 pixels/inch, 72 points/inch
- //printf("Found bounding box (%d,%d)\n",width,height);
+ //printf("Found bounding box (%d,%d) max (%d,%d)\n",width,height,
+ // Config::maxDotGraphWidth,Config::maxDotGraphHeight);
lastFit=(width<Config::maxDotGraphWidth && height<Config::maxDotGraphHeight);
if (lastFit) // image is small enough
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 39e5f8a..31e012b 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -81,10 +81,6 @@ MemberNameDict functionNameDict(10007); // all functions
StringDict substituteDict(1009); // class name substitutes
SectionDict sectionDict(257); // all page sections
StringDict excludeNameDict(1009); // sections
-//FileNameDict inputNameDict(1009); // sections
-//FileNameDict includeNameDict(1009); // include names
-//FileNameDict exampleNameDict(1009); // examples
-//FileNameDict imageNameDict(257); // images
FileNameDict *inputNameDict; // sections
FileNameDict *includeNameDict; // include names
FileNameDict *exampleNameDict; // examples
@@ -96,6 +92,7 @@ FormulaDict formulaNameDict(1009); // the label name of all formulas
StringDict tagDestinationDict(257); // all tag locations
// a member group
QDict<void> compoundKeywordDict(7); // keywords recognised as compounds
+QDict<void> expandAsDefinedDict(257); // all macros that should be expanded
OutputList *outputList = 0; // list of output generating objects
PageInfo *mainPage = 0;
@@ -906,6 +903,15 @@ static MemberDef *addVariableToClass(
root->protection,
fromAnnScope
);
+
+ // class friends may be templatized
+ //QCString name=n;
+ //int i;
+ //if (root->type.left(7)=="friend " && (i=name.find('<'))!=-1)
+ //{
+ // name=name.left(i);
+ //}
+
// add template names, if the class is a non-specialized template
//if (scope.find('<')==-1 && cd->templateArguments())
//{
@@ -1332,7 +1338,7 @@ static void buildMemberList(Entry *root)
ClassDef *cd=0;
// check if this function's parent is a class
- QRegExp re("([a-zA-Z0-9: ]*[ *]*[ ]*");
+ QRegExp re("([a-z_A-Z0-9: ]*[ *]*[ ]*");
//printf("root->parent=`%s' cd=%p root->type.find(re,0)=%d\n",
// root->parent->name.data(),getClass(root->parent->name),
// root->type.find(re,0));
@@ -1896,7 +1902,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
templSpec=baseClassName.mid(i,e-i);
baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e);
baseClass=getResolvedClass(baseClassName);
- //printf("baseClass=%p baseClass=%s templSpec=%s\n",
+ //printf("baseClass=%p -> baseClass=%s templSpec=%s\n",
// baseClass,baseClassName.data(),templSpec.data());
}
}
@@ -2823,10 +2829,10 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
{
Debug::print(Debug::FindMembers,0,
"1. funcName=`%s'\n",funcName.data());
- //if (!funcTempList.isEmpty()) // try with member specialization
- //{
- // mn=memberNameDict[funcName+funcTempList];
- //}
+ if (!funcTempList.isEmpty()) // try with member specialization
+ {
+ mn=memberNameDict[funcName+funcTempList];
+ }
if (mn==0) // try without specialization
{
mn=memberNameDict[funcName];
@@ -2978,15 +2984,39 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
"Warning: no matching class member found for \n %s",
fullFuncDecl.data()
);
+ int candidates=0;
if (mn->count()>0)
{
+ md=mn->first();
+ while (md)
+ {
+ ClassDef *cd=md->memberClass();
+ if (cd!=0 && cd->name()==className) candidates++;
+ md=mn->next();
+ }
+ }
+ if (candidates>0)
+ {
warn_cont("Possible candidates:\n");
md=mn->first();
while (md)
{
ClassDef *cd=md->memberClass();
- if (!cd || cd->name()==className)
- warn_cont(" %s\n",md->declaration());
+ if (cd!=0 && cd->name()==className)
+ {
+ warn_cont(" %s",md->declaration());
+#if 0
+ if (cd->name().at(0)!='@')
+ {
+ warn_cont(" in class %s",cd->name().data());
+ }
+ if (!md->getDefFileName().isEmpty() && md->getDefLine()!=-1)
+ {
+ warn_cont(" defined at line %d of file %s",md->getDefLine(),md->getDefFileName().data());
+ }
+#endif
+ warn_cont("\n");
+ }
md=mn->next();
}
}
@@ -3207,7 +3237,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
static void findMemberDocumentation(Entry *root)
{
int i=-1,l;
- QRegExp re("([a-zA-Z0-9: ]*\\*+[ \\*]*");
+ QRegExp re("([a-z_A-Z0-9: ]*\\*+[ \\*]*");
Debug::print(Debug::FindMembers,0,
"root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->memSpec=%d root->mGrpId=%d\n",
root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->memSpec,root->mGrpId
@@ -4374,6 +4404,12 @@ static void generateGroupDocs()
{
//printf("group %s #members=%d\n",gd->name().data(),gd->countMembers());
if (gd->countMembers()>0) gd->writeDocumentation(*outputList);
+ else
+ {
+ warn(gd->getDefFileName(),gd->getDefLine(),
+ "Warning: group %s does not have any (documented) members.",
+ gd->name().data());
+ }
}
}
@@ -4540,7 +4576,8 @@ static void generateSearchIndex()
if (f.open(IO_WriteOnly))
{
QTextStream t(&f);
- t << Config::docURL << endl << Config::cgiURL << "/" << Config::cgiName << endl;
+ t << Config::docURL << endl << Config::cgiURL
+ << "/" << Config::cgiName << endl;
f.close();
}
else
@@ -5276,9 +5313,21 @@ int main(int argc,char **argv)
&inputFiles,0);
s=Config::inputSources.next();
}
- //msg("Input size %d bytes\n",inputSize);
+
+ // add predefined macro name to a dictionary
+ s=Config::expandAsDefinedList.first();
+ while (s)
+ {
+ if (expandAsDefinedDict[s]==0)
+ {
+ expandAsDefinedDict.insert(s,(void *)666);
+ }
+ s=Config::expandAsDefinedList.next();
+ }
BufStr input(inputSize+1); // Add one byte extra for \0 termination
+
+ // read and preprocess all input files
readFiles(input);
if (input.isEmpty())
@@ -5288,9 +5337,10 @@ int main(int argc,char **argv)
}
else
{
- msg("Read %d bytes\n",input.length());
+ msg("Read %d bytes\n",input.curPos());
}
+
/**************************************************************************
* Handle Tag Files *
**************************************************************************/
diff --git a/src/doxygen.h b/src/doxygen.h
index 87c4592..f48896c 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -126,6 +126,7 @@ extern PageInfo *mainPage;
extern StringDict tagDestinationDict;
extern QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading
extern QIntDict<QCString> memberDocDict; // dictionary of the member groups heading
+extern QDict<void> expandAsDefinedDict;
extern int annotatedClasses;
extern int hierarchyClasses;
diff --git a/src/doxytag.l b/src/doxytag.l
index 76772a7..001b756 100644
--- a/src/doxytag.l
+++ b/src/doxytag.l
@@ -203,7 +203,7 @@ QCString unhtmlify(const char *str)
<Start>^"<h1 align=center>" { // Qt variant
BEGIN( ReadClassName );
}
-<Start>^"<h1>" { // Doxygen variant
+<Start>^("<hr>")?"<h1>" { // Doxygen variant
BEGIN( ReadClassName );
}
<Start>^"Inherits " {
@@ -223,7 +223,7 @@ QCString unhtmlify(const char *str)
BEGIN( SkipHTMLTag );
}
<Start>"&"[a-zA-Z]+";"
-<Start>[a-z_A-Z][a-z_A-Z0-9]* {
+<Start,SkipPreformated>[a-z_A-Z][a-z_A-Z0-9]* {
//printf("tag: %s#%s ref: %s word: `%s'\n",
// docBaseLink.data(),docAnchor.data(),
// docRefName.data(),yytext);
@@ -235,7 +235,7 @@ QCString unhtmlify(const char *str)
<SkipPreformated>"</pre>" {
BEGIN( Start );
}
-<SkipPreformated>[^\<]+
+<SkipPreformated>[^\<\n]+
<CheckConstructor>[a-z_A-Z0-9~:]+ {
QCString s=yytext;
if (s.find("::")!=-1)
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 977e011..52abbff 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -80,7 +80,8 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
"<title>" << title << "</title>\n";
t << "<link ";
if (external)
- t << "doxygen=\"_doc:\" href=\"/";
+ t << "doxygen=\"_doc:" << Config::docURL
+ << "\" href=\"" << Config::docURL << "/";
else
t << "href=\"";
if (Config::htmlStyleSheet.isEmpty())
@@ -147,7 +148,8 @@ void HtmlGenerator::writeFooter(int part,bool external)
t << endl << "<img ";
if (external)
{
- t << "doxygen=\"_doc:\" src=\"/";
+ t << "doxygen=\"_doc:" << Config::docURL
+ << "\" src=\"" << Config::docURL << "/";
}
else
{
diff --git a/src/index.cpp b/src/index.cpp
index 06ab9ac..aabdcdc 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -547,7 +547,7 @@ int countNamespaces()
NamespaceDef *nd;
for (;(nd=nli.current());++nli)
{
- if (nd->isLinkableInProject()) count++;
+ if (nd->isLinkableInProject() && nd->countMembers()>0) count++;
}
return count;
}
@@ -583,7 +583,7 @@ void writeNamespaceIndex(OutputList &ol)
NamespaceDef *nd=namespaceList.first();
while (nd)
{
- if (nd->isLinkableInProject())
+ if (nd->isLinkableInProject() && nd->countMembers()>0)
{
ol.writeStartAnnoItem("namespace",nd->getOutputFileBase(),0,nd->name());
ol.docify(" (");
@@ -1456,7 +1456,6 @@ int countGroups()
for (;(gd=gli.current());++gli)
{
if (gd->countMembers()>0) count++;
- gd=groupList.next();
}
return count;
}
@@ -1513,7 +1512,6 @@ void writeGroupIndex(OutputList &ol)
htmlHelp->incContentsDepth();
}
parseText(ol,theTranslator->trModulesDescription());
- //ol.newParagraph();
ol.endTextBlock();
writeGroupList(ol);
if (hasHtmlHelp)
@@ -1521,7 +1519,6 @@ void writeGroupIndex(OutputList &ol)
htmlHelp->decContentsDepth();
}
endFile(ol);
- //ol.enable(OutputGenerator::Man);
ol.popGeneratorState();
}
diff --git a/src/language.cpp b/src/language.cpp
index 31e0e6e..27b6c7c 100644
--- a/src/language.cpp
+++ b/src/language.cpp
@@ -15,6 +15,7 @@
*
*/
+#include "message.h"
#include "language.h"
#if !defined(ENGLISH_ONLY)
#include "translator_nl.h"
@@ -51,6 +52,10 @@ bool setTranslator(const char *langName)
}
else if (L_EQUAL("czech"))
{
+#ifndef _WIN32
+ err("Warning: The Czech translation uses the windows code page 1250 encoding.\n"
+ "Please convert translator_cz.h to ISO Latin-2 to use it under UNIX.\n");
+#endif
theTranslator=new TranslatorCzech;
}
else if (L_EQUAL("french"))
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 192e6d4..f3d8110 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -216,17 +216,37 @@ void LatexGenerator::startIndexSection(IndexSections is)
<< " linkcolor=blue" << endl
<< " ]{hyperref}" << endl;
}
- if (!theTranslator->latexBabelPackage().isEmpty())
+ // Try to get the command for switching on the language
+ // support
+ QCString sLanguageSupportCommand(
+ theTranslator->latexLanguageSupportCommand());
+
+ if (!sLanguageSupportCommand.isEmpty())
+ {
+ // The command is not empty. The language does
+ // not want to use the babel package. Use this
+ // command instead.
+ t << sLanguageSupportCommand;
+ }
+ else
{
- if (theTranslator->latexBabelPackage()=="russian")
+ if (!theTranslator->latexBabelPackage().isEmpty())
{
+ // The result of the LatexLanguageSupportCommand()
+ // is empty, which means that the language prefers
+ // the babel package, or no package is needed at all.
+ if (theTranslator->latexBabelPackage()=="russian")
+ {
+ // The russian babel package also needs an encoding.
+ // Assume the encoding matched the platform.
#if defined(_WIN32)
- t << "\\usepackage[cp1251]{inputenc}\n";
+ t << "\\usepackage[cp1251]{inputenc}\n";
#else
- t << "\\usepackage[koi8-r]{inputenc}\n";
+ t << "\\usepackage[koi8-r]{inputenc}\n";
#endif
+ }
+ t << "\\usepackage[" << theTranslator->latexBabelPackage() << "]{babel}\n";
}
- t << "\\usepackage[" << theTranslator->latexBabelPackage() << "]{babel}\n";
}
const char *s=Config::extraPackageList.first();
@@ -425,7 +445,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
bool found=FALSE;
while (gd && !found)
{
- if (gd->isLinkableInProject() || gd->countMembers()>0)
+ if (gd->countMembers()>0)
{
t << "}\n\\input{" << gd->getOutputFileBase() << "}\n";
found=TRUE;
@@ -434,7 +454,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
}
while (gd)
{
- if (gd->isLinkableInProject() || gd->countMembers()>0)
+ if (gd->countMembers()>0)
{
if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << gd->getOutputFileBase() << "}\n";
@@ -602,14 +622,14 @@ void LatexGenerator::writeStyleInfo(int part)
break;
case 2:
{
- t << " Dimitri van Heesch (c) 1997-2000}]{}\n";
+ t << " Dimitri van Heesch \\copyright{} 1997-2000}]{}\n";
//QCString dtString=dateToString(FALSE);
t << "\\lfoot[]{\\fancyplain{}{\\bfseries\\scriptsize ";
}
break;
case 4:
{
- t << " Dimitri van Heesch (c) 1997-2000}}\n";
+ t << " Dimitri van Heesch \\copyright{} 1997-2000}}\n";
t << "\\cfoot{}\n";
t << "\\newenvironment{CompactList}\n";
t << "{\\begin{list}{}{\n";
@@ -812,7 +832,7 @@ void LatexGenerator::startPageRef()
void LatexGenerator::endPageRef(const char *clname, const char *anchor)
{
- t << "~\\pageref{";
+ t << "\\,\\pageref{";
if (clname) t << clname;
if (anchor) t << "_" << anchor;
t << "})}";
@@ -998,7 +1018,8 @@ void LatexGenerator::writeSectionRef(const char *,const char *lab,
{
if (strcmp(lab,text)!=0) // lab!=text
{
- t << "{\\bf " << text << " (\\ref " << lab << ")}}";
+ // todo: don't hardcode p. here!
+ t << "{\\bf " << text << "} (p.\\,\\pageref{" << lab << "})";
}
else
{
@@ -1022,7 +1043,7 @@ void LatexGenerator::writeSectionRefAnchor(const char *,const char *lab,
startBold();
docify(title);
endBold();
- t << " (p.~\\pageref{" << lab << "})" << endl;
+ t << " (p.\\,\\pageref{" << lab << "})" << endl;
}
//void LatexGenerator::docify(const char *str)
@@ -1033,9 +1054,10 @@ void LatexGenerator::writeSectionRefAnchor(const char *,const char *lab,
//void LatexGenerator::docifyStatic(QTextStream &t,const char *str)
void LatexGenerator::docify(const char *str)
{
- static bool isJapanese = theTranslator->latexBabelPackage()=="a4j";
- static bool isRussian = theTranslator->latexBabelPackage()=="russian";
- static bool isGerman = theTranslator->latexBabelPackage()=="german";
+ static bool isCzech = theTranslator->idLanguage()=="czech";
+ static bool isJapanese = theTranslator->idLanguage()=="japanese";
+ static bool isRussian = theTranslator->idLanguage()=="russian";
+ static bool isGerman = theTranslator->idLanguage()=="german";
if (str)
{
const unsigned char *p=(const unsigned char *)str;
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index f08a858..2980a73 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -445,8 +445,9 @@ void MemberDef::setMemberDefTemplateArguments(ArgumentList *tal)
void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd,
FileDef *fd,GroupDef *gd)
{
- Definition *d;
+ Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd;
+ if (d==0) return;
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),anchor(),name());
}
diff --git a/src/pre.l b/src/pre.l
index 11efd91..66eebfb 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -758,6 +758,10 @@ Define *newDefine()
def->fileName = g_yyFileName;
def->lineNr = g_yyLineNr;
def->varArgs = g_defVarArgs;
+ if (!def->name.isEmpty() && expandAsDefinedDict[def->name])
+ {
+ def->isPredefined=TRUE;
+ }
return def;
}
@@ -1505,7 +1509,8 @@ BN [ \t\r\n]
{
addDefine();
}
- if (/*!Config::onlyPredefinedFlag &&*/ (def=g_fileDefineDict->find(g_defName))==0)
+ def=g_fileDefineDict->find(g_defName);
+ if (def==0) // new define
{
g_fileDefineDict->insert(g_defName,newDefine());
}
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index 9ac69cf..c249539 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -4,6 +4,8 @@
*
* Copyright (C) 1997-2000 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
@@ -19,7 +21,7 @@
#include "qtbc.h"
#include <qdir.h>
-#include <qstack.h>
+#include <qregexp.h>
#include "rtfgen.h"
#include "config.h"
@@ -112,6 +114,277 @@ OutputGenerator *RTFGenerator::copy()
return result;
}
+static const struct
+{
+ const char *name;
+ const char *value;
+} Rtf_Style_Default[] =
+{
+ { "Reset",
+ "\\pard\\plain "
+ },
+ { "Heading1",
+ "\\s1\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs36\\kerning36\\cgrid "
+ },
+ { "Heading2",
+ "\\s2\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs28\\kerning28\\cgrid "
+ },
+ { "Heading3",
+ "\\s3\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\cgrid "
+ },
+ { "Heading4",
+ "\\s4\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid "
+ },
+ { "Title",
+ "\\s15\\qc\\sb240\\sa60\\widctlpar\\outlinelevel0\\adjustright \\b\\f1\\fs32\\kerning28\\cgrid "
+ },
+ { "SubTitle",
+ "\\s16\\qc\\sa60\\widctlpar\\outlinelevel1\\adjustright \\f1\\cgrid "
+ },
+ { "BodyText",
+ "\\s17\\sa60\\sb30\\widctlpar\\qj \\fs22\\cgrid "
+ },
+ { "DenseText",
+ "\\s18\\widctlpar\\fs22\\cgrid "
+ },
+ { "Header",
+ "\\s28\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "Footer",
+ "\\s29\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\qr\\adjustright \\fs20\\cgrid "
+ },
+ { "GroupHeader",
+ "\\s30\\li360\\sa60\\sb120\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid "
+ },
+ { "CodeExample0",
+ "\\s40\\li0\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "CodeExample1",
+ "\\s41\\li360\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "CodeExample2",
+ "\\s42\\li720\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "CodeExample3",
+ "\\s43\\li1080\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "CodeExample4",
+ "\\s44\\li1440\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "CodeExample5",
+ "\\s45\\li1800\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "CodeExample6",
+ "\\s46\\li2160\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "CodeExample7",
+ "\\s47\\li2520\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "CodeExample8",
+ "\\s48\\li2880\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "CodeExample9",
+ "\\s49\\li3240\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
+ },
+ { "ListContinue0",
+ "\\s50\\li0\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "ListContinue1",
+ "\\s51\\li360\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "ListContinue2",
+ "\\s52\\li720\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "ListContinue3",
+ "\\s53\\li1080\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "ListContinue4",
+ "\\s54\\li1440\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "ListContinue5",
+ "\\s55\\li1800\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "ListContinue6",
+ "\\s56\\li2160\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "ListContinue7",
+ "\\s57\\li2520\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "ListContinue8",
+ "\\s58\\li2880\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "ListContinue9",
+ "\\s59\\li3240\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue0",
+ "\\s60\\li0\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue1",
+ "\\s61\\li360\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue2",
+ "\\s62\\li720\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue3",
+ "\\s63\\li1080\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue4",
+ "\\s64\\li1440\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue5",
+ "\\s65\\li1800\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue6",
+ "\\s66\\li2160\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue7",
+ "\\s67\\li2520\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue8",
+ "\\s68\\li2880\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "DescContinue9",
+ "\\s69\\li3240\\widctlpar\\ql\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC0",
+ "\\s70\\li0\\sa30\\sb30\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC1",
+ "\\s71\\li360\\sa27\\sb27\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC2",
+ "\\s72\\li720\\sa24\\sb24\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC3",
+ "\\s73\\li1080\\sa21\\sb21\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC4",
+ "\\s74\\li1440\\sa18\\sb18\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC5",
+ "\\s75\\li1800\\sa15\\sb15\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC6",
+ "\\s76\\li2160\\sa12\\sb12\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC7",
+ "\\s77\\li2520\\sa9\\sb9\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC8",
+ "\\s78\\li2880\\sa6\\sb6\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "LatexTOC9",
+ "\\s79\\li3240\\sa3\\sb3\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet0",
+ "\\s80\\fi-360\\li360\\widctlpar\\jclisttab\\tx360{\\*\\pn \\pnlvlbody\\ilvl0\\ls1\\pnrnot0\\pndec }\\ls1\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet1",
+ "\\s81\\fi-360\\li720\\widctlpar\\jclisttab\\tx720{\\*\\pn \\pnlvlbody\\ilvl0\\ls2\\pnrnot0\\pndec }\\ls2\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet2",
+ "\\s82\\fi-360\\li1080\\widctlpar\\jclisttab\\tx1080{\\*\\pn \\pnlvlbody\\ilvl0\\ls3\\pnrnot0\\pndec }\\ls3\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet3",
+ "\\s83\\fi-360\\li1440\\widctlpar\\jclisttab\\tx1440{\\*\\pn \\pnlvlbody\\ilvl0\\ls4\\pnrnot0\\pndec }\\ls4\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet4",
+ "\\s84\\fi-360\\li1800\\widctlpar\\jclisttab\\tx1800{\\*\\pn \\pnlvlbody\\ilvl0\\ls5\\pnrnot0\\pndec }\\ls5\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet5",
+ "\\s85\\fi-360\\li2160\\widctlpar\\jclisttab\\tx2160{\\*\\pn \\pnlvlbody\\ilvl0\\ls6\\pnrnot0\\pndec }\\ls6\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet6",
+ "\\s86\\fi-360\\li2520\\widctlpar\\jclisttab\\tx2520{\\*\\pn \\pnlvlbody\\ilvl0\\ls7\\pnrnot0\\pndec }\\ls7\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet7",
+ "\\s87\\fi-360\\li2880\\widctlpar\\jclisttab\\tx2880{\\*\\pn \\pnlvlbody\\ilvl0\\ls8\\pnrnot0\\pndec }\\ls8\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet8",
+ "\\s88\\fi-360\\li3240\\widctlpar\\jclisttab\\tx3240{\\*\\pn \\pnlvlbody\\ilvl0\\ls9\\pnrnot0\\pndec }\\ls9\\adjustright \\fs20\\cgrid "
+ },
+ { "ListBullet9",
+ "\\s89\\fi-360\\li3600\\widctlpar\\jclisttab\\tx3600{\\*\\pn \\pnlvlbody\\ilvl0\\ls10\\pnrnot0\\pndec }\\ls10\\adjustright \\fs20\\cgrid "
+ },
+ { "ListEnum0",
+ "\\s90\\fi-360\\li360\\widctlpar\\fs20\\cgrid "
+ },
+ { "ListEnum1",
+ "\\s91\\fi-360\\li720\\widctlpar\\fs20\\cgrid "
+ },
+ { "ListEnum2",
+ "\\s92\\fi-360\\li1080\\widctlpar\\fs20\\cgrid "
+ },
+ { "ListEnum3",
+ "\\s93\\fi-360\\li1440\\widctlpar\\fs20\\cgrid "
+ },
+ { "ListEnum4",
+ "\\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid "
+ },
+ { "ListEnum4",
+ "\\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid "
+ },
+ { "ListEnum5",
+ "\\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid "
+ },
+ { "ListEnum6",
+ "\\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid "
+ },
+ { "ListEnum7",
+ "\\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid "
+ },
+ { "ListEnum8",
+ "\\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid "
+ },
+ { 0,
+ 0
+ }
+};
+
+static QDict<char> Rtf_Style(257);
+
+static void loadStylesheet(const char *name)
+{
+ 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);
+ 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 style sheet name expected!\n");
+ continue;
+ }
+ QCString key=s.left(sepStart);
+ if (Rtf_Style[key]==0) // not a valid style sheet name
+ {
+ warn(name,lineNr,"Invalid style sheet name %s ignored.\n",key.data());
+ continue;
+ }
+ s+=" "; // add command separator
+ Rtf_Style.remove(key); // remove old key
+ int l = strlen(s.data()+sepStart+sepLength);
+ char *value = new char[l+1];
+ strcpy(value,s.data()+sepStart+sepLength);
+ Rtf_Style.insert(key,value); // insert new key
+ lineNr++;
+ }
+}
+
+
void RTFGenerator::init()
{
QCString dir=Config::rtfOutputDir;
@@ -121,98 +394,31 @@ void RTFGenerator::init()
err("Could not create output directory %s\n",dir.data());
exit(1);
}
+
+ Rtf_Style.setAutoDelete(TRUE);
+ int i=0;
+ while (Rtf_Style_Default[i].name!=0)
+ {
+ int l = strlen(Rtf_Style_Default[i].value);
+ char *value = new char[l+1];
+ strcpy(value,Rtf_Style_Default[i].value);
+ Rtf_Style.insert(Rtf_Style_Default[i].name,value);
+ i++;
+ }
+
+ if (!Config::rtfStylesheetFile.isEmpty())
+ {
+ loadStylesheet(Config::rtfStylesheetFile);
+ }
}
-const char *Rtf_Style_Reset = "\\pard\\plain ";
-const char *Rtf_Style_Heading1 = "\\s1\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs36\\kerning36\\cgrid ";
-const char *Rtf_Style_Heading2 = "\\s2\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs28\\kerning28\\cgrid ";
-const char *Rtf_Style_Heading3 = "\\s3\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\cgrid ";
-const char *Rtf_Style_Heading4 = "\\s4\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ";
-const char *Rtf_Style_Title = "\\s15\\qc\\sb240\\sa60\\widctlpar\\outlinelevel0\\adjustright \\b\\f1\\fs32\\kerning28\\cgrid ";
-const char *Rtf_Style_SubTitle = "\\s16\\qc\\sa60\\widctlpar\\outlinelevel1\\adjustright \\f1\\cgrid ";
-const char *Rtf_Style_BodyText = "\\s17\\sa60\\sb30\\widctlpar\\qj \\fs22\\cgrid ";
-const char *Rtf_Style_DenseText = "\\s18\\widctlpar\\fs22\\cgrid ";
-const char *Rtf_Style_Header = "\\s28\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\adjustright \\fs20\\cgrid ";
-const char *Rtf_Style_Footer = "\\s29\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\qr\\adjustright \\fs20\\cgrid ";
-const char *Rtf_Style_GroupHeader = "\\s30\\li360\\sa60\\sb120\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ";
-const char *Rtf_Style_CodeExample[] =
-{
- "\\s40\\li0\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\s41\\li360\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\s42\\li720\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\s43\\li1080\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\s44\\li1440\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\s45\\li1800\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\s46\\li2160\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\s47\\li2520\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\s48\\li2880\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\s49\\li3240\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid "
-};
-const char *Rtf_Style_ListContinue[] =
-{
- "\\s50\\li0\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s51\\li360\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s52\\li720\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s53\\li1080\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s54\\li1440\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s55\\li1800\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s56\\li2160\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s57\\li2520\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s58\\li2880\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s59\\li3240\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
-};
-const char *Rtf_Style_DescContinue[] =
-{
- "\\s60\\li0\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s61\\li360\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s62\\li720\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s63\\li1080\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s64\\li1440\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s65\\li1800\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s66\\li2160\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s67\\li2520\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s68\\li2880\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\s69\\li3240\\widctlpar\\qj\\adjustright \\fs20\\cgrid "
-};
-const char *Rtf_Style_LatexTOC[] =
-{
- "\\s70\\li0\\sa30\\sb30\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\s71\\li360\\sa27\\sb27\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\s72\\li720\\sa24\\sb24\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\s73\\li1080\\sa21\\sb21\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\s74\\li1440\\sa18\\sb18\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\s75\\li1800\\sa15\\sb15\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\s76\\li2160\\sa12\\sb12\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\s77\\li2520\\sa9\\sb9\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\s78\\li2880\\sa6\\sb6\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\s79\\li3240\\sa3\\sb3\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid "
-};
-const char *Rtf_Style_ListBullet[] =
-{
- "\\s80\\fi-360\\li360\\widctlpar\\jclisttab\\tx360{\\*\\pn \\pnlvlbody\\ilvl0\\ls1\\pnrnot0\\pndec }\\ls1\\adjustright \\fs20\\cgrid ",
- "\\s81\\fi-360\\li720\\widctlpar\\jclisttab\\tx720{\\*\\pn \\pnlvlbody\\ilvl0\\ls2\\pnrnot0\\pndec }\\ls2\\adjustright \\fs20\\cgrid ",
- "\\s82\\fi-360\\li1080\\widctlpar\\jclisttab\\tx1080{\\*\\pn \\pnlvlbody\\ilvl0\\ls3\\pnrnot0\\pndec }\\ls3\\adjustright \\fs20\\cgrid ",
- "\\s83\\fi-360\\li1440\\widctlpar\\jclisttab\\tx1440{\\*\\pn \\pnlvlbody\\ilvl0\\ls4\\pnrnot0\\pndec }\\ls4\\adjustright \\fs20\\cgrid ",
- "\\s84\\fi-360\\li1800\\widctlpar\\jclisttab\\tx1800{\\*\\pn \\pnlvlbody\\ilvl0\\ls5\\pnrnot0\\pndec }\\ls5\\adjustright \\fs20\\cgrid ",
- "\\s85\\fi-360\\li2160\\widctlpar\\jclisttab\\tx2160{\\*\\pn \\pnlvlbody\\ilvl0\\ls6\\pnrnot0\\pndec }\\ls6\\adjustright \\fs20\\cgrid ",
- "\\s86\\fi-360\\li2520\\widctlpar\\jclisttab\\tx2520{\\*\\pn \\pnlvlbody\\ilvl0\\ls7\\pnrnot0\\pndec }\\ls7\\adjustright \\fs20\\cgrid ",
- "\\s87\\fi-360\\li2880\\widctlpar\\jclisttab\\tx2880{\\*\\pn \\pnlvlbody\\ilvl0\\ls8\\pnrnot0\\pndec }\\ls8\\adjustright \\fs20\\cgrid ",
- "\\s88\\fi-360\\li3240\\widctlpar\\jclisttab\\tx3240{\\*\\pn \\pnlvlbody\\ilvl0\\ls9\\pnrnot0\\pndec }\\ls9\\adjustright \\fs20\\cgrid ",
- "\\s89\\fi-360\\li3600\\widctlpar\\jclisttab\\tx3600{\\*\\pn \\pnlvlbody\\ilvl0\\ls10\\pnrnot0\\pndec }\\ls10\\adjustright \\fs20\\cgrid "
-};
-const char *Rtf_Style_ListEnum[] =
-{
- "\\s90\\fi-360\\li360\\widctlpar\\fs20\\cgrid ",
- "\\s91\\fi-360\\li720\\widctlpar\\fs20\\cgrid ",
- "\\s92\\fi-360\\li1080\\widctlpar\\fs20\\cgrid ",
- "\\s93\\fi-360\\li1440\\widctlpar\\fs20\\cgrid ",
- "\\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid ",
- "\\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid ",
- "\\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid ",
- "\\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid ",
- "\\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid ",
- "\\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid "
-};
+
+static QCString makeIndexName(const char *s,int i)
+{
+ QCString result=s;
+ result+=(char)(i+'0');
+ return result;
+}
void RTFGenerator::beginRTFDocument()
{
@@ -251,47 +457,53 @@ void RTFGenerator::beginRTFDocument()
t <<"{\\comment Begining style list}\n";
t <<"{\\stylesheet\n";
t <<"{\\widctlpar\\adjustright \\fs20\\cgrid \\snext0 Normal;}\n";
- t <<"{" << Rtf_Style_Heading1 <<"\\sbasedon0 \\snext0 heading 1;}\n";
- t <<"{" << Rtf_Style_Heading2 <<"\\sbasedon0 \\snext0 heading 2;}\n";
- t <<"{" << Rtf_Style_Heading3 <<"\\sbasedon0 \\snext0 heading 3;}\n";
- t <<"{" << Rtf_Style_Heading4 <<"\\sbasedon0 \\snext0 heading 4;}\n";
+ t <<"{" << Rtf_Style["Heading1"] <<"\\sbasedon0 \\snext0 heading 1;}\n";
+ t <<"{" << Rtf_Style["Heading2"] <<"\\sbasedon0 \\snext0 heading 2;}\n";
+ t <<"{" << Rtf_Style["Heading3"] <<"\\sbasedon0 \\snext0 heading 3;}\n";
+ t <<"{" << Rtf_Style["Heading4"] <<"\\sbasedon0 \\snext0 heading 4;}\n";
t <<"{\\*\\cs10 \\additive Default Paragraph Font;}\n";
- t <<"{" << Rtf_Style_Title << "\\sbasedon0 \\snext15 Title;}\n";
- t <<"{" << Rtf_Style_SubTitle << "\\sbasedon0 \\snext16 Subtitle;}\n";
- t <<"{" << Rtf_Style_BodyText << "\\sbasedon0 \\snext17 BodyText;}\n";
- t <<"{" << Rtf_Style_DenseText << "\\sbasedon0 \\snext18 DenseText;}\n";
- t <<"{" << Rtf_Style_Header << "\\sbasedon0 \\snext28 header;}\n";
- t <<"{" << Rtf_Style_Footer << "\\sbasedon0 \\snext29 footer;}\n";
- t <<"{" << Rtf_Style_GroupHeader << "\\sbasedon0 \\snext30 GroupHeader}\n";
+ t <<"{" << Rtf_Style["Title"] << "\\sbasedon0 \\snext15 Title;}\n";
+ t <<"{" << Rtf_Style["SubTitle"] << "\\sbasedon0 \\snext16 Subtitle;}\n";
+ t <<"{" << Rtf_Style["BodyText"] << "\\sbasedon0 \\snext17 BodyText;}\n";
+ t <<"{" << Rtf_Style["DenseText"] << "\\sbasedon0 \\snext18 DenseText;}\n";
+ t <<"{" << Rtf_Style["Header"] << "\\sbasedon0 \\snext28 header;}\n";
+ t <<"{" << Rtf_Style["Footer"] << "\\sbasedon0 \\snext29 footer;}\n";
+ t <<"{" << Rtf_Style["GroupHeader"] << "\\sbasedon0 \\snext30 GroupHeader}\n";
for (i=0;i<indentLevels;i++)
{
- t <<"{" << Rtf_Style_CodeExample[i] <<"\\sbasedon0 \\snext4"
+ QCString n=makeIndexName("CodeExample",i);
+ t <<"{" << Rtf_Style[n] <<"\\sbasedon0 \\snext4"
<< (QMIN(i+1,indentLevels-1)) << " Code Example " << i << ";}\n";
}
for (i=0;i<indentLevels;i++)
{
- t <<"{" << Rtf_Style_ListContinue[i] << "\\sbasedon0 \\snext5"
+ QCString n=makeIndexName("ListContinue",i);
+ t <<"{" << Rtf_Style[n] << "\\sbasedon0 \\snext5"
<< (QMIN(i+1,indentLevels-1)) << " List Continue " << i << ";}\n";
}
for (i=0;i<indentLevels;i++)
{
- t <<"{" << Rtf_Style_DescContinue[i] << "\\sbasedon0 \\snext6"
+ QCString n=makeIndexName("DescContinue",i);
+ t <<"{" << Rtf_Style[n] << "\\sbasedon0 \\snext6"
<< (QMIN(i+1,indentLevels-1)) << " DescContinue " << i << ";}\n";
}
for (i=0;i<indentLevels;i++)
{
- t <<"{" << Rtf_Style_LatexTOC[i] << "\\sbasedon50 \\snext7"
+ QCString n=makeIndexName("LatexTOC",i);
+ t <<"{" << Rtf_Style[n] << "\\sbasedon50 \\snext7"
<< (QMIN(i+1,indentLevels-1)) << " LatexTOC " << i << ";}\n";
}
for (i=0;i<indentLevels;i++)
{
- t <<"{" << Rtf_Style_ListBullet[i] << "\\sbasedon0 \\snext8"
+ QCString n=makeIndexName("ListBullet",i);
+ t <<"{" << Rtf_Style[n] << "\\sbasedon0 \\snext8"
<< (QMIN(i+1,indentLevels-1)) << " \\sautoupd List Bullet " << i << ";}\n";
}
for (i=0;i<indentLevels;i++)
{
- t <<"{" << Rtf_Style_ListEnum[i] << "\\sbasedon0 \\snext9"
+ QCString n=makeIndexName("ListEnum",i);
+ t <<"{" << Rtf_Style[n] << "\\sbasedon0 \\snext9"
<< (QMIN(i+1,indentLevels-1)) << " \\sautoupd List Enum " << i << ";}\n";
}
t <<"}" << endl;
@@ -301,7 +513,7 @@ void RTFGenerator::beginRTFDocument()
void RTFGenerator::beginRTFChapter()
{
- t <<"\n{\\comment Begin Chapter}\n" << Rtf_Style_Reset;
+ t <<"\n{\\comment Begin Chapter}\n" << Rtf_Style["Reset"];
// if we are compact, no extra page breaks...
if (Config::compactRTFFlag)
@@ -314,12 +526,12 @@ void RTFGenerator::beginRTFChapter()
t <<"\\sect\\sbkpage\n";
//t <<"\\sect\\sectd\\sbkpage\n";
- t << Rtf_Style_Heading1 << "\n";
+ t << Rtf_Style["Heading1"] << "\n";
}
void RTFGenerator::beginRTFSection()
{
- t <<"\n{\\comment Begin Section}\n" << Rtf_Style_Reset;
+ t <<"\n{\\comment Begin Section}\n" << Rtf_Style["Reset"];
// if we are compact, no extra page breaks...
if (Config::compactRTFFlag)
@@ -332,7 +544,7 @@ void RTFGenerator::beginRTFSection()
t <<"\\sect\\sbkpage\n";
//t <<"\\sect\\sectd\\sbkpage\n";
- t << Rtf_Style_Heading2 << "\n";
+ t << Rtf_Style["Heading2"] << "\n";
}
void RTFGenerator::startFile(const char *name,const char *, bool )
@@ -509,14 +721,14 @@ void RTFGenerator::endIndexSection(IndexSections is)
"}{\\comment end of infoblock}\n";
// setup for this section
- t << Rtf_Style_Reset <<"\n";
+ t << Rtf_Style["Reset"] <<"\n";
t <<"\\sectd\\pgnlcrm\n";
- t <<"{\\footer "<<Rtf_Style_Footer << "{\\chpgn}}\n";
+ t <<"{\\footer "<<Rtf_Style["Footer"] << "{\\chpgn}}\n";
// the title entry
t << "{\\comment begin title page}\n";
- t << Rtf_Style_Reset << Rtf_Style_Title << endl; // set to title style
+ t << Rtf_Style["Reset"] << Rtf_Style["Title"] << endl; // set to title style
t << "{\\field\\fldedit {\\*\\fldinst TITLE \\\\*MERGEFORMAT}{\\fldrslt TITLE}}\\par" << endl;
- t << Rtf_Style_Reset << Rtf_Style_SubTitle << endl; // set to subtitle style
+ t << Rtf_Style["Reset"] << Rtf_Style["SubTitle"] << endl; // set to subtitle style
t << "{\\field\\fldedit {\\*\\fldinst AUTHOR \\\\*MERGEFORMAT}{\\fldrslt AUTHOR}}\\par" << endl;
t << "{\\field\\fldedit {\\*\\fldinst CREATEDATE \\\\*MERGEFORMAT}"
"{\\fldrslt CREATEDATE}}\\par"<<endl;
@@ -524,44 +736,44 @@ void RTFGenerator::endIndexSection(IndexSections is)
// table of contents section
t << "{\\comment Table of contents}\n";
- t << Rtf_Style_Reset << endl;
+ t << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit {\\*\\fldinst TOC \\\\f \\\\*MERGEFORMAT}{\\fldrslt Table of contents}}\\par\n";
- t << Rtf_Style_Reset << endl;
+ t << Rtf_Style["Reset"] << endl;
}
break;
case isMainPage:
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\tc \\v " << theTranslator->trMainPage() << "}"<< endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"index.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
break;
case isModuleIndex:
- t << "\\par " << Rtf_Style_Reset << endl;
+ 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 isNamespaceIndex:
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
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 << "\\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;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
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 << "\\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 << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\tc \\v " << theTranslator->trPageIndex() << "}"<< endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"pages.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
break;
@@ -572,9 +784,9 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\tc \\v " << theTranslator->trModuleDocumentation() << "}"<< endl;
while (gd && !found)
{
- if (gd->isLinkableInProject() || gd->countMembers()>0)
+ if (gd->countMembers()>0)
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << gd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
@@ -585,9 +797,9 @@ void RTFGenerator::endIndexSection(IndexSections is)
}
while (gd)
{
- if (gd->isLinkableInProject() || gd->countMembers()>0)
+ if (gd->countMembers()>0)
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
beginRTFSection();
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << gd->getOutputFileBase();
@@ -605,7 +817,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
if (nd->isLinkableInProject() || nd->countMembers()>0)
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << nd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
@@ -617,7 +829,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
if (nd->isLinkableInProject() || nd->countMembers()>0)
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
beginRTFSection();
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << nd->getOutputFileBase();
@@ -637,7 +849,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
if (cd->isLinkableInProject())
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << cd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
@@ -649,7 +861,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
if (cd->isLinkableInProject())
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
beginRTFSection();
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << cd->getOutputFileBase();
@@ -674,7 +886,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
if (isFirst)
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << fd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
@@ -682,7 +894,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
}
else
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
beginRTFSection();
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << fd->getOutputFileBase();
@@ -702,7 +914,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl;
if (pi)
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << convertSlashes(pi->name,TRUE);
t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
@@ -710,7 +922,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
}
while (pi)
{
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
beginRTFSection();
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << convertSlashes(pi->name,TRUE);
@@ -730,7 +942,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
pageName=pi->name.copy();
else
pageName=pi->name.lower();
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << pageName;
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
@@ -743,7 +955,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
pageName=pi->name.copy();
else
pageName=pi->name.lower();
- //t << "\\par " << Rtf_Style_Reset << endl;
+ //t << "\\par " << Rtf_Style["Reset"] << endl;
//beginRTFSection();
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << pageName;
@@ -754,9 +966,9 @@ void RTFGenerator::endIndexSection(IndexSections is)
break;
case isEndIndex:
beginRTFChapter();
- t << Rtf_Style_Heading1;
+ t << Rtf_Style["Heading1"];
t << "Index\\par "<< endl;
- t << Rtf_Style_Reset<< endl;
+ t << Rtf_Style["Reset"] << endl;
t << "{\\tc \\v Index}" << endl;
t << "{\\field\\fldedit {\\*\\fldinst INDEX \\\\c2 \\\\*MERGEFORMAT}{\\fldrslt INDEX}}\n";
@@ -772,8 +984,8 @@ void RTFGenerator::lastIndexPage()
t <<"\\sect \\sectd \\sbknone \\pgndec\n";
// set footer
- t <<"{\\footer "<< Rtf_Style_Footer << "{\\chpgn}}\n";
- //t << Rtf_Style_Heading1 << "\n";
+ t <<"{\\footer "<< Rtf_Style["Footer"] << "{\\chpgn}}\n";
+ //t << Rtf_Style["Heading1"] << "\n";
}
@@ -798,7 +1010,7 @@ void RTFGenerator::startIndexList()
t << "{\\comment (startIndexList)}" << endl;
t << "{" << endl;
incrementIndentLevel();
- t << Rtf_Style_Reset << Rtf_LCList_DepthStyle() << endl;
+ t << Rtf_Style["Reset"] << Rtf_LCList_DepthStyle() << endl;
newParagraph();
m_omitParagraph=TRUE;
}
@@ -819,7 +1031,7 @@ void RTFGenerator::startItemList()
t << "{";
incrementIndentLevel();
listItemInfo[m_listLevel].isEnum = FALSE;
- //t << Rtf_Style_Reset << Rtf_BList_DepthStyle();
+ //t << Rtf_Style["Reset"] << Rtf_BList_DepthStyle();
}
/*! end bullet list */
@@ -830,7 +1042,7 @@ void RTFGenerator::endItemList()
t << "}";
decrementIndentLevel();
m_omitParagraph=TRUE;
- //t << Rtf_Style_Reset << styleStack.top() << endl;
+ //t << Rtf_Style["Reset"] << styleStack.top() << endl;
//printf("RTFGenerator::endItemList() `%s'\n",styleStack.top());
//newParagraph();
}
@@ -843,7 +1055,7 @@ void RTFGenerator::startEnumList() // starts an enumeration list
incrementIndentLevel();
listItemInfo[m_listLevel].isEnum = TRUE;
listItemInfo[m_listLevel].number = 1;
- //t << Rtf_Style_Reset << Rtf_EList_DepthStyle() << endl;
+ //t << Rtf_Style["Reset"] << Rtf_EList_DepthStyle() << endl;
//newParagraph();
//m_omitParagraph=TRUE;
@@ -864,7 +1076,7 @@ void RTFGenerator::writeListItem()
{
t << "{\\comment (writeListItem)}" << endl;
newParagraph();
- t << Rtf_Style_Reset;
+ t << Rtf_Style["Reset"];
if (listItemInfo[m_listLevel].isEnum)
{
t << Rtf_EList_DepthStyle() << endl;
@@ -980,14 +1192,14 @@ void RTFGenerator::writeEndAnnoItem(const char *name)
void RTFGenerator::startSubsection()
{
//beginRTFSubSection();
- t <<"\n{\\comment Begin SubSection}\n" << Rtf_Style_Reset;
- t << Rtf_Style_Heading3 << "\n";
+ t <<"\n{\\comment Begin SubSection}\n" << Rtf_Style["Reset"];
+ t << Rtf_Style["Heading3"] << "\n";
}
void RTFGenerator::endSubsection()
{
newParagraph();
- t << Rtf_Style_Reset << endl;
+ t << Rtf_Style["Reset"] << endl;
}
void RTFGenerator::startSubsubsection()
@@ -995,7 +1207,7 @@ void RTFGenerator::startSubsubsection()
//beginRTFSubSubSection();
t << "\n{\\comment Begin SubSubSection}\n";
t << "{" << endl;
- t << Rtf_Style_Reset << Rtf_Style_Heading4 << "\n";
+ t << Rtf_Style["Reset"] << Rtf_Style["Heading4"] << "\n";
}
void RTFGenerator::endSubsubsection()
@@ -1135,13 +1347,13 @@ void RTFGenerator::startTitleHead(const char *)
t <<"{\\comment startTitleHead}" << endl;
// beginRTFSection();
- t << Rtf_Style_Reset << Rtf_Style_Heading2 << endl;
+ t << Rtf_Style["Reset"] << Rtf_Style["Heading2"] << endl;
}
void RTFGenerator::endTitleHead(const char *fileName,const char *name)
{
t <<"{\\comment endTitleHead}" << endl;
- t << "\\par " << Rtf_Style_Reset << endl;
+ t << "\\par " << Rtf_Style["Reset"] << endl;
if (name)
{
// make table of contents entry
@@ -1177,8 +1389,8 @@ void RTFGenerator::startGroupHeader()
{
t <<"{\\comment startGroupHeader}" << endl;
newParagraph();
- t << Rtf_Style_Reset;
- t << Rtf_Style_Heading3;
+ t << Rtf_Style["Reset"];
+ t << Rtf_Style["Heading3"];
t << endl;
}
@@ -1186,7 +1398,7 @@ void RTFGenerator::endGroupHeader()
{
t <<"{\\comment endGroupHeader}" << endl;
newParagraph();
- t << Rtf_Style_Reset << endl;
+ t << Rtf_Style["Reset"] << endl;
}
void RTFGenerator::startMemberDoc(const char *clname,
@@ -1200,11 +1412,10 @@ void RTFGenerator::startMemberDoc(const char *clname,
addToIndex(memname,clname);
addToIndex(clname,memname);
}
- //t << Rtf_Style_Reset << Rtf_Style_ListBullet1;
- t << Rtf_Style_Reset << Rtf_Style_Heading4;
+ t << Rtf_Style["Reset"] << Rtf_Style["Heading4"];
//styleStack.push(Rtf_Style_Heading4);
t << "{" << endl;
- //printf("RTFGenerator::startMemberDoc() `%s'\n",Rtf_Style_Heading4);
+ //printf("RTFGenerator::startMemberDoc() `%s'\n",Rtf_Style["Heading4"]);
startBold();
t << endl;
}
@@ -1215,7 +1426,7 @@ void RTFGenerator::endMemberDoc()
t << "}" << endl;
//const char *style = styleStack.pop();
//printf("RTFGenerator::endMemberDoc() `%s'\n",style);
- //ASSERT(style==Rtf_Style_Heading4);
+ //ASSERT(style==Rtf_Style["Heading4"]);
endBold();
newParagraph();
}
@@ -1295,7 +1506,7 @@ void RTFGenerator::startIndent()
incrementIndentLevel();
t << "{\\comment (startIndent) }" << endl;
t << "{" << endl;
- t << Rtf_Style_Reset << Rtf_CList_DepthStyle() << endl;
+ t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle() << endl;
//styleStack.push(style);
}
@@ -1311,7 +1522,7 @@ void RTFGenerator::startDescription()
{
t << "{\\comment (startDescription)}" << endl;
t << "{" << endl;
- t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
+ t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
}
void RTFGenerator::endDescription()
@@ -1340,7 +1551,7 @@ void RTFGenerator::startMemberDescription()
t << "{\\comment (startMemberDescription)}" << endl;
t << "{" << endl;
incrementIndentLevel();
- t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
+ t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
startEmphasis();
}
@@ -1364,16 +1575,16 @@ void RTFGenerator::endDescTitle()
{
t << "{\\comment (endDescTitle) }" << endl;
newParagraph();
- //t << Rtf_Style_Reset << styleStack.top();
+ //t << Rtf_Style["Reset"] << styleStack.top();
incrementIndentLevel();
- t << Rtf_Style_Reset << Rtf_DList_DepthStyle();
+ t << Rtf_Style["Reset"] << Rtf_DList_DepthStyle();
}
void RTFGenerator::writeDescItem()
{
t << "{\\comment (writeDescItem) }" << endl;
// incrementIndentLevel();
- //t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
+ //t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
}
void RTFGenerator::endDescList()
@@ -1383,18 +1594,18 @@ void RTFGenerator::endDescList()
t << "}";
decrementIndentLevel();
m_omitParagraph = TRUE;
- //t << Rtf_Style_Reset << styleStack.top() << endl;
+ //t << Rtf_Style["Reset"] << styleStack.top() << endl;
}
void RTFGenerator::writeSection(const char *lab,const char *title,bool sub)
{
t << "{\\comment (writeSection)}" << endl;
t << "{";
- t<< Rtf_Style_Reset;
+ t<< Rtf_Style["Reset"];
if (sub)
{
// set style
- t << Rtf_Style_Heading3;
+ t << Rtf_Style["Heading3"];
// make table of contents entry
t << "{\\tc\\tcl3 \\v ";
docify(title);
@@ -1403,7 +1614,7 @@ void RTFGenerator::writeSection(const char *lab,const char *title,bool sub)
else
{
// set style
- t << Rtf_Style_Heading2;
+ t << Rtf_Style["Heading2"];
// make table of contents entry
t << "{\\tc\\tcl2 \\v ";
docify(title);
@@ -1530,7 +1741,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d,
// display the file
t << "{" << endl;
- t << Rtf_Style_Reset << endl;
+ t << Rtf_Style["Reset"] << endl;
t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
t << fileName << ".gif";
t << " \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
@@ -1545,7 +1756,7 @@ void RTFGenerator::writeFormula(const char *,const char *text)
void RTFGenerator::startMemberItem(int)
{
t <<"{\\comment startMemberItem }" << endl;
- t << Rtf_Style_Reset << Rtf_BList_DepthStyle() << endl; // set style to apropriate depth
+ t << Rtf_Style["Reset"] << Rtf_BList_DepthStyle() << endl; // set style to apropriate depth
}
void RTFGenerator::endMemberItem(bool)
@@ -1575,7 +1786,7 @@ void RTFGenerator::startCodeFragment()
{
t << "{" << endl;
newParagraph();
- t << Rtf_Style_Reset << Rtf_Code_DepthStyle();
+ t << Rtf_Style["Reset"] << Rtf_Code_DepthStyle();
//styleStack.push(Rtf_Style_CodeExample);
}
@@ -1584,7 +1795,7 @@ void RTFGenerator::endCodeFragment()
newParagraph();
//styleStack.pop();
//printf("RTFGenerator::endCodeFrament() top=%s\n",styleStack.top());
- //t << Rtf_Style_Reset << styleStack.top() << endl;
+ //t << Rtf_Style["Reset"] << styleStack.top() << endl;
t << "}" << endl;
m_omitParagraph = TRUE;
}
@@ -1633,7 +1844,7 @@ void RTFGenerator::startDescTable()
t << "{\\comment (startDescTable) }" << endl;
t << "{" << endl;
//incrementIndentLevel();
- //t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
+ //t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
}
void RTFGenerator::endDescTable()
@@ -1641,7 +1852,7 @@ void RTFGenerator::endDescTable()
//decrementIndentLevel();
t << "{\\comment (endDescTable)}" << endl;
t << "}" << endl;
- //t << Rtf_Style_Reset << styleStack.top();
+ //t << Rtf_Style["Reset"] << styleStack.top();
}
void RTFGenerator::startDescTableTitle()
@@ -1694,49 +1905,55 @@ void RTFGenerator::decrementIndentLevel()
// a style for list formatted with "list continue" style
const char * RTFGenerator::Rtf_CList_DepthStyle()
{
- return Rtf_Style_ListContinue[m_listLevel];
+ QCString n=makeIndexName("ListContinue",m_listLevel);
+ return Rtf_Style[n];
}
// a style for list formatted as a "latext style" table of contents
const char * RTFGenerator::Rtf_LCList_DepthStyle()
{
- return Rtf_Style_LatexTOC[m_listLevel];
+ QCString n=makeIndexName("LatexTOC",m_listLevel);
+ return Rtf_Style[n];
}
// a style for list formatted as a "bullet" style
const char * RTFGenerator::Rtf_BList_DepthStyle()
{
- return Rtf_Style_ListBullet[m_listLevel];
+ QCString n=makeIndexName("ListBullet",m_listLevel);
+ return Rtf_Style[n];
}
// a style for list formatted as a "enumeration" style
const char * RTFGenerator::Rtf_EList_DepthStyle()
{
- return Rtf_Style_ListEnum[m_listLevel];
+ QCString n=makeIndexName("ListEnum",m_listLevel);
+ return Rtf_Style[n];
}
const char * RTFGenerator::Rtf_DList_DepthStyle()
{
- return Rtf_Style_DescContinue[m_listLevel];
+ QCString n=makeIndexName("DescContinue",m_listLevel);
+ return Rtf_Style[n];
}
const char * RTFGenerator::Rtf_Code_DepthStyle()
{
- return Rtf_Style_CodeExample[m_listLevel];
+ QCString n=makeIndexName("CodeExample",m_listLevel);
+ return Rtf_Style[n];
}
void RTFGenerator::startTextBlock(bool dense)
{
t << "{\\comment Start TextBlock}" << endl;
t << "{" << endl;
- t << Rtf_Style_Reset;
+ t << Rtf_Style["Reset"];
if (dense) // no spacing between "paragraphs"
{
- t << Rtf_Style_DenseText;
+ t << Rtf_Style["DenseText"];
}
else // some spacing
{
- t << Rtf_Style_BodyText;
+ t << Rtf_Style["BodyText"];
}
}
@@ -1757,7 +1974,7 @@ void RTFGenerator::newParagraph()
void RTFGenerator::startMemberSubtitle()
{
t << "{" << endl;
- t << Rtf_Style_Reset << Rtf_CList_DepthStyle() << endl;
+ t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle() << endl;
}
void RTFGenerator::endMemberSubtitle()
@@ -1953,7 +2170,7 @@ void RTFGenerator::endDotGraph(DotClassGraph &g)
// display the file
t << "{" << endl;
- t << Rtf_Style_Reset << endl;
+ t << Rtf_Style["Reset"] << endl;
t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
t << g.diskName() << ".gif";
t << " \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
@@ -1977,7 +2194,7 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
// display the file
t << "{" << endl;
- t << Rtf_Style_Reset << endl;
+ t << Rtf_Style["Reset"] << endl;
t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
t << g.diskName() << ".gif";
t << " \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
@@ -2037,14 +2254,14 @@ void RTFGenerator::startMemberGroupHeader(bool hasHeader)
t << "{\\comment startMemberGroupHeader}" << endl;
t << "{" << endl;
if (hasHeader) incrementIndentLevel();
- t << Rtf_Style_Reset << Rtf_Style_GroupHeader;
+ t << Rtf_Style["Reset"] << Rtf_Style["GroupHeader"];
}
void RTFGenerator::endMemberGroupHeader()
{
t << "{\\comment endMemberGroupHeader}" << endl;
newParagraph();
- t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
+ t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
}
void RTFGenerator::startMemberGroupDocs()
@@ -2063,7 +2280,7 @@ void RTFGenerator::endMemberGroupDocs()
void RTFGenerator::startMemberGroup()
{
t << "{\\comment startMemberGroup}" << endl;
- t << Rtf_Style_Reset << Rtf_BList_DepthStyle() << endl;
+ t << Rtf_Style["Reset"] << Rtf_BList_DepthStyle() << endl;
}
void RTFGenerator::endMemberGroup(bool hasHeader)
diff --git a/src/scanner.l b/src/scanner.l
index 7b098f8..5c97241 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -1758,12 +1758,11 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
{
//outDoc->writeSectionRefAnchor(sec->fileName,sec->label,text);
outDoc->writeObjectLink(0,sec->fileName,sec->label,text);
- //printf("Writing page ref `%s'\n",sec->label.data());
writePageRef(*outDoc,sec->label,0);
}
else
{
- //printf(" ref sec=%p sec->fileName=%s\n",sec,sec->fileName.data());
+ //printf(" ref sec=%p sec->fileName=%s text=%s\n",sec,sec->fileName.data(),text.data());
outDoc->writeSectionRef(sec->fileName,sec->label,text);
}
}
@@ -3246,7 +3245,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
<MemberSpec>([*&]*{BN}*)*{ID}("["[a-z_A-Z0-9]*"]")* { // the [] part could be improved.
lineCount();
int i=0,l=yyleng,j;
- while (i<l && (!isalpha(yytext[i]))) i++;
+ while (i<l && (!isId(yytext[i]))) i++;
msName = yytext;
msName = msName.right(msName.length()-i);
j=msName.find("[");
@@ -3300,7 +3299,14 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
// current->parent->section & Entry::COMPOUND_MASK)
// varEntry->type+=current->parent->name+"::";
if (isTypedef)
+ {
varEntry->type.prepend("typedef ");
+ //printf("current->name = %s %s\n",current->name.data(),msName.data());
+ if (!current->name.isEmpty() && current->name.at(0)!='@')
+ {
+ typedefDict.insert(msName,new QCString(current->name));
+ }
+ }
varEntry->type+=current->name+msType;
varEntry->fileName = yyFileName;
varEntry->startLine = yyLineNr;
@@ -4671,12 +4677,12 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc>("\\\\"|"@@")"f"[$\[\]] {
current->doc += &yytext[1];
}
-<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc>{CMD}"f$" {
+<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>{CMD}"f$" {
lastFormulaContext = YY_START;
formulaText="$";
BEGIN(ReadFormulaShort);
}
-<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc>{CMD}"f[" {
+<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>{CMD}"f[" {
lastFormulaContext = YY_START;
formulaText="\\[";
BEGIN(ReadFormulaLong);
@@ -4685,7 +4691,9 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
formulaText+="$";
if (lastFormulaContext==ClassDocBrief ||
lastFormulaContext==LineDoc ||
- lastFormulaContext==JavaDoc
+ lastFormulaContext==JavaDoc ||
+ lastFormulaContext==AfterDocBrief ||
+ lastFormulaContext==AfterDocLine
)
current->brief += addFormula();
else
@@ -4696,7 +4704,9 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
formulaText+="\\]";
if (lastFormulaContext==ClassDocBrief ||
lastFormulaContext==LineDoc ||
- lastFormulaContext==JavaDoc
+ lastFormulaContext==JavaDoc ||
+ lastFormulaContext==AfterDocBrief ||
+ lastFormulaContext==AfterDocLine
)
current->brief += addFormula();
else
diff --git a/src/suffixtree.cpp b/src/suffixtree.cpp
index 1befe25..ad0aebd 100644
--- a/src/suffixtree.cpp
+++ b/src/suffixtree.cpp
@@ -38,7 +38,7 @@ bool writeNumber(QFile &f,int num)
(f.putch(num&0xff)==-1);
}
-bool writeEncodedNumber(QFile &f,uint number)
+static bool writeEncodedNumber(QFile &f,uint number)
{
bool error=FALSE;
uint n=number;
@@ -52,7 +52,7 @@ bool writeEncodedNumber(QFile &f,uint number)
return error;
}
-int encodedNumberSize(uint number)
+static int encodedNumberSize(uint number)
{
uint n=number;
int size=1;
diff --git a/src/suffixtree.h b/src/suffixtree.h
index 3e59193..a0b7434 100644
--- a/src/suffixtree.h
+++ b/src/suffixtree.h
@@ -29,10 +29,6 @@ class IndexTree;
enum WordRefMasks { WORDINNAME_MASK=4, INNAME_MASK=2, FULLWORD_MASK=1 };
enum WordRefBits { WORDINNAME_BIT=2, INNAME_BIT=1, FULLWORD_BIT=0 };
-// bool inName;
-// bool fullWord;
-// bool wordInName;
-
struct WordRef
{
int id;
@@ -77,7 +73,6 @@ class SuffixTree
SuffixTree();
~SuffixTree();
void insertWord(const char *word,int index,bool inName);
- //void buildIndex();
void resolveForwardReferences();
void dump();
int size(); // return the size of the (flat) tree in bytes
diff --git a/src/translator.h b/src/translator.h
index 313b05e..6bc534d 100644
--- a/src/translator.h
+++ b/src/translator.h
@@ -25,38 +25,33 @@
class Translator
{
public:
- //--------------------------------------------------------------------
- // NOTICE:
- // the following functions are now obsolete: these are no longer used and
- // will disappear in future versions. You do not have to translate them!
- virtual QCString trInherits()
- { return "Inherits"; }
- virtual QCString trAnd()
- { return "and"; }
- virtual QCString trInheritedBy()
- { return "Inherited By"; }
- virtual QCString trReference()
- { return "Reference"; }
- virtual QCString trReimplementedFrom()
- { return "Reimplemented from"; }
- virtual QCString trReimplementedIn()
- { return "Reimplemented in"; }
- virtual QCString trIncludeFile()
- { return "Include File"; }
- virtual QCString trGeneratedFrom(const char *s,bool single)
- {
- QCString result=(QCString)"The documentation for this"+s+
- " was generated from the following file";
- if (single) result+=":"; else result+="s:";
- return result;
- }
- // end of obsolete functions
- //--------------------------------------------------------------------
+ // --- Language contol 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 "english"; }
+ /*! 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 "";
+ }
/*! returns the name of the package that is included by LaTeX */
virtual QCString latexBabelPackage()
{ return ""; }
+ // --- Language translation methods -------------------
+
/*! used in the compound documentation before a list of related functions. */
virtual QCString trRelatedFunctions()
{ return "Related Functions"; }
diff --git a/src/translator_cz.h b/src/translator_cz.h
index ffbcdc3..63edec7 100644
--- a/src/translator_cz.h
+++ b/src/translator_cz.h
@@ -27,249 +27,478 @@
//
// havran@fel.cvut.cz, 1999/04/11
+
+// Notice that the following texts were written in Czech using
+// MS-Windows code page 1250. If you want to use it in Unix,
+// convert the file to the ISO Latin-2
+// This is a prototype created by Petr Prikryl (prikrylp@skil.cz), 2000/06/20.
+//
class TranslatorCzech : public Translator
{
public:
- QCString latexBabelPackage()
+ virtual QCString idLanguage()
{ return "czech"; }
- QCString trInherits()
- { return "Dedi"; }
- QCString trAnd()
- { return "a"; }
- QCString trInheritedBy()
- { return "Je potomkem"; }
- QCString trRelatedFunctions()
- { return "Pribuzne metody"; }
- QCString trRelatedSubscript()
- { return "(Tyto funkce nejsou metody.)"; }
- QCString trDetailedDescription()
- { return "Podrobna dokumentace"; }
- QCString trMemberTypedefDocumentation()
- { return "Dokumentace pro deklaraci typu (typedef) ve tride";}
- QCString trMemberEnumerationDocumentation()
- { return "Dokumentace vyctovych typu"; }
- QCString trEnumerationValueDocumentation()
- { return "Dokumentace hodnot vyctovych typu"; }
- QCString trMemberFunctionDocumentation()
- { return "Dokumentace metod"; }
- QCString trMemberDataDocumentation()
- { return "Dokumentace datovych slozek tridy"; }
- QCString trGeneratedFrom(const char *s,bool single)
- {
- QCString result=(QCString)"Dokumentace pro tento"+s+
- " byla generovana z nasledujiciho souboru";
- if (single) result+=":"; else result+="s:";
- return result;
- }
- QCString trMore()
- { return "Detaily"; }
- QCString trReference()
- { return "Reference"; }
- QCString trListOfAllMembers()
- { return "Seznam vsech datovych polozek a metod tridy."; }
- QCString trMemberList()
- { return "Seznam datovych polozek a metod tridy"; }
- QCString trThisIsTheListOfAllMembers()
- { return "Toto je uplny seznam datovych polozek a metod tridy pro"; }
- QCString trIncludingInheritedMembers()
- { return "zahrnuje vsechny nasledujici zdedene datove polozky a metody."; }
- QCString trGeneratedAutomatically(const char *s)
- { QCString result="Automaticky vygenerovany pomoci programu doxygen";
- if (s) result+=(QCString)" pro "+s;
- result+=" ze zdrojoveho souboru.";
+
+ virtual QCString latexLanguageSupportCommand()
+ { return "\\usepackage{czech}\n"; }
+
+ /*! returns the name of the package that is included by LaTeX */
+ virtual QCString latexBabelPackage()
+ { return ""; }
+
+ /*! 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 "(Výše 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ých 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()
+ { return "Dokumentace k datovým členům"; }
+
+ /*! this is the text of a link put after brief descriptions. */
+ virtual QCString trMore()
+ { return "Podrobnosti..."; }
+
+ /*! 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 "Ú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;
}
- QCString trEnumName()
- { return "pojmenovani vyctoveho typu"; }
- QCString trEnumValue()
- { return "hodnota vyctoveho typu"; }
- QCString trDefinedIn()
- { return "definovany v"; }
- QCString trIncludeFile()
- { return "Vklada soubor"; }
- QCString trVerbatimText(const char *f)
- { return (QCString)"Toto je presny text z vlozeneho souboru "+f+""; }
- QCString trModules()
+
+ /*! 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"; }
+
+ /*! put as in introduction in the verbatim header file of a class.
+ * parameter f is the name of the include file.
+ */
+ virtual QCString trVerbatimText(const char *f)
+ { return (QCString)"Úplný text vkládaného souboru "+f+"."; }
+
+ // 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"; }
- QCString trClassHierarchy()
- { return "Hierarchie trid"; }
- QCString trCompoundList()
- { return "Seznam objektovych typu"; }
- QCString trFileList()
- { return "Seznam souboru"; }
- QCString trHeaderFiles()
- { return "Hlavickove soubory"; }
- QCString trCompoundMembers()
- { return "Datove slozky a metody objektovych typu"; }
- QCString trFileMembers()
- { return "Globalni deklarace"; }
- QCString trRelatedPages()
- { return "Souvisejici stranky"; }
- QCString trExamples()
- { return "Priklady:"; }
- QCString trSearch()
- { return "Hledej"; }
- QCString trClassHierarchyDescription()
- { return "Tento seznam dedicnych zavislosti je temer setriden"
- " podle abecedy:";
- }
- QCString trFileListDescription(bool extractAll)
- {
- QCString result="A toto je seznam vsech ";
- if (!extractAll) result+="zdokumentovanych ";
- result+="souboru s kratkymi popisy:";
+
+ /*! 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()
+ { return "Seznam složenin"; }
+
+ /*! 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 the list of all verbatim headers */
+ virtual QCString trHeaderFiles()
+ { return "Seznam hlavičkových souborů"; }
+
+ /*! This is put above each page as a link to all members of compounds. */
+ virtual QCString trCompoundMembers()
+ { return "Součásti složenin"; }
+
+ /*! This is put above each page as a link to all members of files. */
+ virtual QCString trFileMembers()
+ { return "Seznam globálních symbolů"; }
+
+ /*! This is put above each page as a link to all related pages. */
+ virtual QCString trRelatedPages()
+ { return "Související 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;
}
- QCString trCompoundListDescription()
- { return "Zde jsou tridy, struktury a "
- "unie s kratkymi popisy:";
+
+ /*! This is an introduction to the annotated compound list. */
+ virtual QCString trCompoundListDescription()
+ { return "Složeninami (compound) se rozumí netriviální prvky, které "
+ "zahrnují třídy, struktury (struct), unie (union) "
+ "a rozhraní (interface). V seznamu jsou uvedeny jejich stručné "
+ "popisy:";
}
- QCString trCompoundMembersDescription(bool extractAll)
+
+ /*! This is an introduction to the page with all class members. */
+ virtual QCString trCompoundMembersDescription(bool extractAll)
{
- QCString result="Zde je seznam vsech ";
- if (!extractAll) result+="zdokumentovanych ";
- result+="clenu tridy (metod a datovych slozek) s odkazy na ";
- if (extractAll) result+="dokumentaci tridy pro kazdo polozku:";
- else result+="tridy, kam patri:";
+ QCString result="Zde naleznete seznam všech ";
+ if (!extractAll) result+="dokumentovaných ";
+ result+="členů tříd s odkazy na ";
+ if (extractAll)
+ result+="dokumentaci tříd, ke kterým příslušejí:";
+ else
+ result+="třídy, ke kterým příslušejí:";
return result;
}
- QCString trFileMembersDescription(bool extractAll)
+
+ /*! This is an introduction to the page with all file members. */
+ virtual QCString trFileMembersDescription(bool extractAll)
{
- QCString result="Zde je seznam vsech ";
- if (!extractAll) result+="zdokumentovanych ";
- result+="globalnich deklaraci s odkazy ";
- if (extractAll) result+="na dokumentaci k souboru pro kazdou deklaraci:";
- else result+="na soubory, kde jsou umisteny:";
+ QCString result="Zde naleznete seznam všech ";
+ if (!extractAll) result+="dokumentovaných ";
+ result+="globálních symbolů, které jsou definovány v souborech projektu. "
+ "Pro každý symbol je uveden odkaz na ";
+ if (extractAll)
+ result+="dokumentaci příslušného souboru";
+ else
+ result+="soubor, ve kterém je symbol definován";
+ result+=". Symbol může označovat makro, typ, instanci třídy, "
+ "proměnnou, konstantu, funkci, výčet, hodnotu výčtu a podobně:";
+
return result;
}
- QCString trHeaderFilesDescription()
- {return "Zde jsou hlavickove soubory ktere tvori programove"
- " rozhrani aplikace(API):";
- }
- QCString trExamplesDescription()
- { return "Zde je seznam vsech prikladu:"; }
- QCString trRelatedPagesDescription()
- { return "Zde je seznam vsech souvisejicich stranek dokumentace:"; }
- QCString trModulesDescription()
- { return "Zde je seznam vsech modulu:"; }
- QCString trNoDescriptionAvailable()
- { return "Zadny popis neni k dispozici."; }
- QCString trDocumentation()
+ /*! This is an introduction to the page with the list of all header files. */
+ virtual QCString trHeaderFilesDescription()
+ { return "Zde naleznete hlavičkové soubory, které tvoří "
+ "aplikační programátorské rozhraní (API):"; }
+
+ /*! 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 "Zde naleznete seznam všech souvisejících stránek dokumentace:"; }
+
+ /*! This is an introduction to the page with the list of class/file groups */
+ virtual QCString trModulesDescription()
+ { return "Zde naleznete seznam všech modulů:"; }
+
+ /*! This sentences is used in the annotated class/file lists if no brief
+ * description is given.
+ */
+ virtual QCString trNoDescriptionAvailable()
+ { return "Popis není k dispozici"; }
+
+ // 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"; }
- QCString trModuleIndex()
- { return "Index modulu"; }
- QCString trHierarchicalIndex()
- { return "Index hierarchie"; }
- QCString trCompoundIndex()
- { return "Index objektovych typu"; }
- QCString trFileIndex()
- { return "Index souboru"; }
- QCString trModuleDocumentation()
- { return "Dokumentace modulu"; }
- QCString trClassDocumentation()
- { return "Dokumentace tridy"; }
- QCString trFileDocumentation()
- { return "Dokumentace souboru"; }
- QCString trExampleDocumentation()
- { return "Dokumentace prikladu"; }
- QCString trPageDocumentation()
- { return "Dokumentace stranek"; }
- QCString trReferenceManual()
- { return "Referencni manual"; }
-
- QCString trDefines()
- { return "Definice"; }
- QCString trFuncProtos()
- { return "Prototypy funkci"; }
- QCString trTypedefs()
- { return "Deklarace datovych typu(typedefs)"; }
- QCString trEnumerations()
- { return "Vyctove typy (enumerations)"; }
- QCString trFunctions()
+
+ /*! 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()
+ { return "Rejstřík složenin"; }
+
+ /*! 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()
+ { 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"; }
- QCString trVariables()
- { return "Promenne"; }
- QCString trEnumerationValues()
- { return "Hodnoty vyctovych typu"; }
- QCString trReimplementedFrom()
- { return "Je znovu implementovan podle"; }
- QCString trReimplementedIn()
- { return "Je znovu implementovan v"; }
- QCString trAuthor()
+
+ /*! 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ýčtů"; }
+
+ /*! This is used in man pages as the author section. */
+ virtual QCString trAuthor()
{ return "Autor"; }
- QCString trDefineDocumentation()
- { return "Dokumentace definic pomoci maker"; }
- QCString trFunctionPrototypeDocumentation()
- { return "Dokumentace prototypu funkci"; }
- QCString trTypedefDocumentation()
- { return "Dokumentace deklaraci datovych typu(typedefs)"; }
- QCString trEnumerationTypeDocumentation()
- { return "Dokumentace vyctovych typu"; }
- QCString trFunctionDocumentation()
- { return "Dokumentace funkci"; }
- QCString trVariableDocumentation()
- { return "Dokumentace promennych"; }
- QCString trCompounds()
- { return "Polozky objektovych typu"; }
- QCString trFiles()
- { return "Soubory:"; }
- QCString trGeneratedAt(const char *date,const char *projName)
+
+ /*! 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 enumeration values
+ */
+ virtual QCString trEnumerationValueDocumentation()
+ { return "Dokumentace výčtových hodnot"; }
+
+ /*! 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()
+ { return "Složeniny"; }
+
+ /*! This is used in the documentation of a group before the list of
+ * links to documented files
+ */
+ virtual QCString trFiles()
+ { return "Soubory"; }
+
+ /*! 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)"Generovany dne "+date;
- if (projName) result+=(QCString)" pro "+projName;
- result+=(QCString)" ";
+ QCString result=(QCString)"Generováno "+date;
+ if (projName) result+=(QCString)" pro projekt "+projName;
+ result+=(QCString)" programem";
return result;
}
- QCString trWrittenBy()
- {
- return "napsany podle";
- }
- QCString trClassDiagram(const char *clName)
+ /*! This is part of the sentence used in the standard footer of each page.
+ */
+ virtual QCString trWrittenBy()
{
- return (QCString)"Diagram trid pro "+clName;
+ return " -- autor ";
}
- QCString trForInternalUseOnly()
- { return "Jen pro interni pouziti."; }
- QCString trReimplementedForInternalReasons()
+
+ /*! this text is put before a class diagram */
+ virtual QCString trClassDiagram(const char *clName)
{
- return "Znovu implementovany z internich duvodu; programove rozhrani"
- " aplikace(API) neni zmeneno.";
+ return (QCString)"Diagram dědičnosti pro třídu "+clName;
}
- QCString trWarning()
- { return "Upozorneni"; }
- QCString trBugsAndLimitations()
- { return "Chyby a omezeni"; }
- QCString trVersion()
+
+ /*! 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 \reimp command is used. */
+ virtual QCString trReimplementedForInternalReasons()
+ { return "Reimplementováno z interních důvodů; aplikační rozhraní zachováno."; }
+
+ /*! this text is generated when the \warning command is used. */
+ virtual QCString trWarning()
+ { return "Pozor"; }
+
+ /*! this text is generated when the \bug command is used. */
+ virtual QCString trBugsAndLimitations()
+ { return "Chyby a omezení"; }
+
+ /*! this text is generated when the \version command is used. */
+ virtual QCString trVersion()
{ return "Verze"; }
- QCString trDate()
+
+ /*! this text is generated when the \date command is used. */
+ virtual QCString trDate()
{ return "Datum"; }
- QCString trAuthors()
- { return "Autor(i)"; }
- QCString trReturns()
- { return "ma navratovou hodnotu"; }
- QCString trSeeAlso()
- { return "Podrobnosti take tady"; }
- QCString trParameters()
+
+ /*! this text is generated when the \author command is used. */
+ virtual QCString trAuthors()
+ { return "Autor/autoři"; }
+
+ /*! this text is generated when the \return command is used. */
+ virtual QCString trReturns()
+ { return "Vrací"; }
+
+ /*! 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"; }
- QCString trExceptions()
- { return "Vyjimky"; }
- QCString trGeneratedBy()
- { return "Generovan podle"; }
+
+ /*! this text is generated when the \exception command is used. */
+ virtual QCString trExceptions()
+ { return "Výjimky"; }
- // new since 0.49-990307
+ /*! this text is used in the title page of a LaTeX document. */
+ virtual QCString trGeneratedBy()
+ { return "Generováno programem"; }
+
+ // new since 0.49-990307
- QCString trNamespaceList()
- { return "Seznam prostoru jmen"; }
- QCString trNamespaceListDescription(bool extractAll)
+ /*! 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 je seznam vsech ";
- if (!extractAll) result+="dokumentovanych ";
- result+="prostoru jmen s kratkymi popisy:";
+ QCString result="Zde naleznete seznam všech ";
+ if (!extractAll) result+="dokumentovaných ";
+ result+="prostorů jmen se stručným popisem:";
return result;
}
- QCString trFriends()
- { return "Spratelene tridy, funkce a metody"; }
+
+ /*! 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
@@ -278,76 +507,75 @@ class TranslatorCzech : public Translator
/*! used in the class documentation as a header before the list of all
* related classes
*/
- QCString trRelatedFunctionDocumentation()
- { return "Dokumentace pro spratelene funkce a ostatni"; }
+ 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 */
- QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool /*isTemplate*/)
+ virtual QCString trCompoundReference(const char *clName,
+ ClassDef::CompoundType compType)
{
QCString result=(QCString)clName+" ";
- result+=" Reference";
switch(compType)
{
- case ClassDef::Class: result+=" tridy"; break;
- case ClassDef::Struct: result+=" struktury"; break;
- case ClassDef::Union: result+=" unie"; break;
- case ClassDef::Interface: result+=" rozhrani"; break;
- case ClassDef::Exception: result+=" exception"; break;
+ case ClassDef::Class: result+=" Třída"; break;
+ case ClassDef::Struct: result+=" Struktura"; break;
+ case ClassDef::Union: result+=" Unie"; break;
+ case ClassDef::Interface: result+=" Rozhraní"; break;
+ case ClassDef::Exception: result+=" Výjimka"; break;
}
+ result+=" Reference";
return result;
}
/*! used as the title of the HTML page of a file */
- QCString trFileReference(const char *fileName)
+ virtual QCString trFileReference(const char *fileName)
{
- QCString result=fileName;
- result+=" Reference souboru";
+ QCString result="Odkaz na soubor";
+ result+=fileName;
return result;
}
/*! used as the title of the HTML page of a namespace */
- QCString trNamespaceReference(const char *namespaceName)
+ virtual QCString trNamespaceReference(const char *namespaceName)
{
QCString result=namespaceName;
- result+=" Reference prostoru jmen";
+ result+=" Namespace Reference???";
return result;
}
/*! \mgroup Class sections
* these are for the member sections of a class, struct or union
*/
- QCString trPublicMembers()
- { return "Verejne metody a datove polozky"; }
- QCString trPublicSlots()
- { return "Verejne sloty"; }
- QCString trSignals()
- { return "Signaly"; }
- QCString trStaticPublicMembers()
- { return "Staticke verejne metody a datove polozky"; }
- QCString trProtectedMembers()
- { return "Chranene metody a datove polozky"; }
- QCString trProtectedSlots()
- { return "Chranene sloty"; }
- QCString trStaticProtectedMembers()
- { return "Staticke chranene metody a datove polozky"; }
- QCString trPrivateMembers()
- { return "Privatni metody a datove polozky"; }
- QCString trPrivateSlots()
- { return "Privatni sloty"; }
- QCString trStaticPrivateMembers()
- { return "Staticke privatni metody a datove polozky"; }
+ 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"; }
/*! \endmgroup */
/*! 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)
+ virtual QCString trWriteList(int numEntries)
{
QCString result;
int i;
@@ -372,62 +600,62 @@ class TranslatorCzech : public Translator
/*! used in class documentation to produce a list of base classes,
* if class diagrams are disabled.
*/
- QCString trInheritsList(int numEntries)
+ virtual QCString trInheritsList(int numEntries)
{
- return "dedi "+trWriteList(numEntries)+".";
+ return "Dědí "+trWriteList(numEntries)+".";
}
/*! used in class documentation to produce a list of super classes,
* if class diagrams are disabled.
*/
- QCString trInheritedByList(int numEntries)
+ virtual QCString trInheritedByList(int numEntries)
{
- return "je zdeden z "+trWriteList(numEntries)+".";
+ return "Zděděna třídami "+trWriteList(numEntries)+".";
}
/*! used in member documentation blocks to produce a list of
* members that are hidden by this one.
*/
- QCString trReimplementedFromList(int numEntries)
+ virtual QCString trReimplementedFromList(int numEntries)
{
- return "Znovu implementuje "+trWriteList(numEntries)+".";
+ return "Reimplementace 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)
+ virtual QCString trReimplementedInList(int numEntries)
{
- return "znovu implementovan v "+trWriteList(numEntries)+".";
+ return "Reimplementováno v "+trWriteList(numEntries)+".";
}
/*! This is put above each page as a link to all members of namespaces. */
- QCString trNamespaceMembers()
- { return "Polozky prostoru jmen"; }
+ virtual QCString trNamespaceMembers()
+ { return "???Namespace Members"; }
/*! This is an introduction to the page with all namespace members */
- QCString trNamespaceMemberDescription(bool extractAll)
+ virtual QCString trNamespaceMemberDescription(bool extractAll)
{
- QCString result="Tady je seznam vsech ";
- if (!extractAll) result+="zdokumentovanych ";
- result+="clenu prostoru jmen s odkazy na ";
+ QCString result="Zde naleznete seznam všech ";
+ if (!extractAll) result+="dokumentovaných ";
+ result+="???namespace members s odkazy na ";
if (extractAll)
- result+="dukumentaci prostoru jmen pro kazdou polozku:";
+ result+="dokumentaci prostoru jmen pro každý člen:";
else
- result+="prostor jmen, kteremu patri:";
+ result+="prostory jmen, ke kterým příslušejí:";
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
*/
- QCString trNamespaceIndex()
- { return "Index prostoru jmen"; }
+ 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.
*/
- QCString trNamespaceDocumentation()
- { return "Dokumentace prostoru jmen"; }
+ virtual QCString trNamespaceDocumentation()
+ { return "Dokumentace prostorů jmen"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
@@ -436,7 +664,7 @@ class TranslatorCzech : public Translator
/*! This is used in the documentation before the list of all
* namespaces in a file.
*/
- QCString trNamespaces()
+ virtual QCString trNamespaces()
{ return "Prostory jmen"; }
//////////////////////////////////////////////////////////////////////////
@@ -446,48 +674,49 @@ class TranslatorCzech : public Translator
/*! 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,
+ 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 tridu"; break;
- case ClassDef::Struct: result+="tuto strukturu"; break;
- case ClassDef::Union: result+="tuto unii"; break;
- case ClassDef::Interface: result+="toto rozhrani"; break;
- case ClassDef::Exception: result+="exception"; break;
+ 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::Exception: result+="tuto výjimku"; break;
}
- result+=" byla vygenerovana z nasledujiciho souboru";
- if (single) result+=":"; else result+="s:";
+ 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.
*/
- QCString trAlphabeticalList()
- { return "Abecedni seznam"; }
+ virtual QCString trAlphabeticalList()
+ { return "Abecední seznam složenin"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
- QCString trReturnValues()
- { return "Vraci hodnoty"; }
+ virtual QCString trReturnValues()
+ { return "Vracené hodnoty"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
- QCString trMainPage()
- { return "Hlavni stranka"; }
+ 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.
*/
- QCString trPageAbbreviation()
- { return "str."; }
+ virtual QCString trPageAbbreviation()
+ { return "s."; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
@@ -495,16 +724,157 @@ class TranslatorCzech : public Translator
virtual QCString trSources()
{
- return "Zdrojove soubory";
+ return "Zdroje";
}
virtual QCString trDefinedAtLineInSourceFile()
{
- return "Definice v souboru @1 na radce @0";
+ 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í souborů 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()
+ {
+ 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 "Udělat";
+ }
+ /*! Used as the header of the todo list */
+ virtual QCString trTodoList()
+ {
+ return "Seznam plánovaných úprav";
+ }
+
};
#endif // TRANSLATOR_CZ_H
diff --git a/src/translator_de.h b/src/translator_de.h
index faaf665..4f8ddf2 100644
--- a/src/translator_de.h
+++ b/src/translator_de.h
@@ -25,26 +25,8 @@
class TranslatorGerman : public Translator
{
public:
- //--------------------------------------------------------------------
- // NOTICE:
- // the following functions are now obsolete: these are no longer used and
- // will disappear in future versions. You do not have to translate them!
- QCString trInherits()
- { return "Abgeleitet von "; }
- QCString trAnd()
- { return "und"; }
- QCString trInheritedBy()
- { return "Basisklasse f&uuml;r"; }
- QCString trReference()
- { return "Verweis"; }
- QCString trReimplementedFrom()
- { return "Implementiert von"; }
- QCString trReimplementedIn()
- { return "erneute Implementation in"; }
- QCString trIncludeFile()
- { return "Include-Datei"; }
- // end of obsolete functions
- //--------------------------------------------------------------------
+ QCString idLanguage()
+ { return "german"; }
QCString latexBabelPackage()
// returns the name of the package that is included by LaTeX
diff --git a/src/translator_es.h b/src/translator_es.h
index a60a5ab..92466f5 100644
--- a/src/translator_es.h
+++ b/src/translator_es.h
@@ -30,34 +30,8 @@
class TranslatorSpanish : public Translator
{
public:
- //--------------------------------------------------------------------
- // NOTICE:
- // the following functions are now obsolete: these are no longer used and
- // will disappear in future versions. You do not have to translate them!
- virtual QCString trInherits()
- { return "Inherits"; }
- virtual QCString trAnd()
- { return "y"; }
- virtual QCString trInheritedBy()
- { return "Inherited By"; }
- virtual QCString trReference()
- { return "Referencia"; }
- virtual QCString trReimplementedFrom()
- { return "Reimplementado de"; }
- virtual QCString trReimplementedIn()
- { return "Reimplementado en"; }
- virtual QCString trIncludeFile()
- { return "Include File"; }
- virtual QCString trGeneratedFrom(const char *s,bool single)
- {
- QCString result=(QCString)"The documentation for this"+s+
- " was generated from the following file";
- if (single) result+=":"; else result+="s:";
- return result;
- }
- // end of obsolete functions
- //--------------------------------------------------------------------
-
+ virtual QCString idLanguage()
+ { return "spanish"; }
/*! returns the name of the package that is included by LaTeX */
virtual QCString latexBabelPackage()
{ return ""; }
diff --git a/src/translator_fi.h b/src/translator_fi.h
index d85d0c0..504008f 100644
--- a/src/translator_fi.h
+++ b/src/translator_fi.h
@@ -79,6 +79,8 @@ positiiviset kommentit otetaan ilolla vastaan.
class TranslatorFinnish : public Translator
{
public:
+ QCString idLanguage()
+ { return "finnish"; }
QCString latexBabelPackage()
// returns the name of the package that is included by LaTeX
{ return "finnish"; }
diff --git a/src/translator_fr.h b/src/translator_fr.h
index c7c5636..c7d9486 100644
--- a/src/translator_fr.h
+++ b/src/translator_fr.h
@@ -25,6 +25,8 @@
class TranslatorFrench : public Translator
{
public:
+ QCString idLanguage()
+ { return "french"; }
/*! returns the name of the package that is included by LaTeX */
QCString latexBabelPackage()
{ return "french"; }
diff --git a/src/translator_hr.h b/src/translator_hr.h
index 66ce398..40e5733 100644
--- a/src/translator_hr.h
+++ b/src/translator_hr.h
@@ -23,6 +23,8 @@
class TranslatorCroatian : public Translator
{
public:
+ QCString idLanguage()
+ { return "croatian"; }
QCString latexBabelPackage()
{ return "croatian"; }
QCString trRelatedFunctions()
diff --git a/src/translator_it.h b/src/translator_it.h
index f032b52..23e7ce1 100644
--- a/src/translator_it.h
+++ b/src/translator_it.h
@@ -33,34 +33,8 @@
class TranslatorItalian : public Translator
{
public:
- //--------------------------------------------------------------------
- // NOTICE:
- // the following functions are now obsolete: these are no longer used and
- // will disappear in future versions. You do not have to translate them!
- QCString trInherits()
- { return "Inherits"; }
- QCString trAnd()
- { return "and"; }
- QCString trInheritedBy()
- { return "Inherited By"; }
- QCString trReference()
- { return "Reference"; }
- QCString trReimplementedFrom()
- { return "Reimplemented from"; }
- QCString trReimplementedIn()
- { return "Reimplemented in"; }
- QCString trIncludeFile()
- { return "Include File"; }
- QCString trGeneratedFrom(const char *s,bool single)
- {
- QCString result=(QCString)"The documentation for this"+s+
- " was generated from the following file";
- if (single) result+=":"; else result+="s:";
- return result;
- }
- // end of obsolete functions
- //--------------------------------------------------------------------
-
+ QCString idLanguage()
+ { return "italian"; }
/*! returns the name of the package that is included by LaTeX */
QCString latexBabelPackage()
{ return "italian"; }
diff --git a/src/translator_jp.h b/src/translator_jp.h
index 38c8670..650dc5d 100644
--- a/src/translator_jp.h
+++ b/src/translator_jp.h
@@ -23,33 +23,8 @@
class TranslatorJapanese : public Translator
{
public:
- //--------------------------------------------------------------------
- // NOTICE:
- // the following functions are now obsolete: these are no longer used and
- // will disappear in future versions. You do not have to translate them!
- QCString trInherits()
- { return "·Ńľµ"; }
- QCString trAnd()
- { return "¤Č"; }
- QCString trInheritedBy()
- { return "Ľˇ¤Ë·Ńľµ¤µ¤ě¤Ć¤¤¤Ţ¤ąˇŁ"; }
- QCString trReference()
- { return "ĄęĄŐĄˇĄěĄóĄą"; }
- QCString trReimplementedFrom()
- { return "Ľˇ¤ňşĆÄęµÁ"; }
- QCString trReimplementedIn()
- { return "Ľˇ¤ÇşĆÄęµÁ"; }
- QCString trIncludeFile()
- { return "Ą¤ĄóĄŻĄëˇĽĄÉĄŐĄˇĄ¤Ąë"; }
- QCString trGeneratedFrom(const char *s,bool)
- {
- QCString result=(QCString)"¤ł¤Î"+s+
- "¤ËÂФą¤ëĄÉĄ­ĄĺĄáĄóĄČ¤Ď°Ę˛Ľ¤ÎĄŐĄˇĄ¤Ąë¤«¤éŔ¸Ŕ®¤µ¤ě¤Ţ¤·¤żˇŁ";
- return result;
- }
- // end of obsolete functions
- //--------------------------------------------------------------------
-
+ QCString idLanguage()
+ { return "japanese"; }
/*! returns the name of the package that is included by LaTeX */
QCString latexBabelPackage()
{ return "a4j"; }
diff --git a/src/translator_nl.h b/src/translator_nl.h
index e2de0fc..99812f2 100644
--- a/src/translator_nl.h
+++ b/src/translator_nl.h
@@ -23,6 +23,8 @@
class TranslatorDutch : public Translator
{
public:
+ QCString idLanguage()
+ { return "dutch"; }
QCString latexBabelPackage()
{ return "dutch"; }
QCString trRelatedFunctions()
diff --git a/src/translator_ru.h b/src/translator_ru.h
index 7f509be..84fc1b9 100644
--- a/src/translator_ru.h
+++ b/src/translator_ru.h
@@ -22,6 +22,8 @@
class TranslatorRussian : public Translator
{
public:
+ QCString idLanguage()
+ { return "russian"; }
QCString latexBabelPackage()
{ return "russian"; }
QCString trRelatedFunctions()
diff --git a/src/translator_se.h b/src/translator_se.h
index afeea50..92f2461 100644
--- a/src/translator_se.h
+++ b/src/translator_se.h
@@ -67,6 +67,8 @@ Problem!
class TranslatorSwedish : public Translator
{
public:
+ QCString idLanguage()
+ { return "swedish"; }
QCString latexBabelPackage()
{ return "swedish"; }
diff --git a/src/util.cpp b/src/util.cpp
index 9643a7d..f9ab566 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -212,6 +212,10 @@ ClassDef *getResolvedClass(const char *name)
QCString *subst = typedefDict[name];
if (subst) // there is a typedef with this name
{
+ if (*subst==name) // avoid resolving typedef struct foo foo;
+ {
+ return classDict[name];
+ }
int count=0; // recursion detection guard
QCString *newSubst;
while ((newSubst=typedefDict[*subst]) && count<10)
@@ -241,11 +245,20 @@ QCString removeRedundantWhiteSpace(const QCString &s)
if (s.isEmpty()) return s;
QCString result;
uint i;
- for (i=0;i<s.length();i++)
+ uint l=s.length();
+ for (i=0;i<l;i++)
{
char c=s.at(i);
- if (c!=' ' ||
- (i!=0 && i!=s.length()-1 && isId(s.at(i-1)) && isId(s.at(i+1)))
+ if (i<l-2 && c=='<' && s.at(i+1)!='<')
+ {
+ result+="< ";
+ }
+ else if (i>0 && c=='>' && s.at(i-1)!='>')
+ {
+ result+=" >";
+ }
+ else if (c!=' ' ||
+ (i!=0 && i!=l-1 && isId(s.at(i-1)) && isId(s.at(i+1)))
)
{
if ((c=='*' || c=='&' || c=='@') &&
@@ -547,7 +560,7 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
//bool texEnabled = ol.isEnabled(OutputGenerator::Latex);
ol.disableAllBut(OutputGenerator::Html);
QCString extLink,absPath;
- if (ext) { extLink="_doc"; absPath="/"; }
+ if (ext) { extLink="_doc"; absPath=Config::docURL+"/"; }
//if (manEnabled) ol.disable(OutputGenerator::Man);
//if (texEnabled) ol.disable(OutputGenerator::Latex);
if (compact) ol.startCenter(); else ol.startItemList();
@@ -651,7 +664,7 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
if (Config::searchEngineFlag)
{
if (!compact) ol.writeListItem();
- ol.startQuickIndexItem("_cgi","");
+ ol.startQuickIndexItem("_cgi",Config::cgiURL+"/"+Config::cgiName);
parseText(ol,theTranslator->trSearch());
ol.endQuickIndexItem();
}
@@ -968,6 +981,8 @@ static void trimNamespaceScope(QCString &t1,QCString &t2)
void stripIrrelevantConstVolatile(QCString &s)
{
int i,j;
+ if (s=="const") { s.resize(0); return; }
+ if (s=="volatile") { s.resize(0); return; }
i = s.find("const ");
if (i!=-1)
{
@@ -2323,8 +2338,10 @@ QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &te
QCString stripScope(const char *name)
{
QCString result = name;
- int i=result.findRev("::");
- if (i!=-1)
+ int ti=result.find('<'); // find start of template
+ if (ti==-1) ti=result.length();
+ int i = ti>2 ? result.findRev("::",ti-2) : -1; // find scope just before template
+ if (i!=-1) // found scope
{
result=result.right(result.length()-i-2);
}