Commit adb81f79 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.1.5

parent 9b285300
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)
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)
1.1.4-20000625
1.1.5
......@@ -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)
......
......@@ -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 ");
//-----------------------------------------------------------------------------------------------
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
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
......
......@@ -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;
......
......@@ -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;
......
......@@ -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
......
......@@ -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;
......@@ -1554,6 +1567,17 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::rtfHyperFlag);
t << "\n";
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";
}
......@@ -1614,13 +1638,25 @@ 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 = ";
writeBoolValue(t,Config::macroExpansionFlag);
t << "\n";
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";
......@@ -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 );
......
......@@ -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++;
......
......@@ -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
......
......@@ -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 *
**************************************************************************/
......
......@@ -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;
......
......@@ -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)
......
......@@ -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
{
......
......@@ -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();
}
......
......@@ -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"))
......
......@@ -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;
......
......@@ -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());
}
......
......@@ -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());
}
......
......@@ -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)
......
......@@ -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
......
......@@ -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;
......
......@@ -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
......
......@@ -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"; }
......
......@@ -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í "+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
......
......@@ -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
......
......@@ -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 ""; }
......
......@@ -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"; }
......
......@@ -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"; }
......
......@@ -23,6 +23,8 @@
class TranslatorCroatian : public Translator
{
public:
QCString idLanguage()
{ return "croatian"; }
QCString latexBabelPackage()
{ return "croatian"; }
QCString trRelatedFunctions()
......
......@@ -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"; }
......
......@@ -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"; }
......
......@@ -23,6 +23,8 @@
class TranslatorDutch : public Translator
{
public:
QCString idLanguage()
{ return "dutch"; }
QCString latexBabelPackage()
{ return "dutch"; }
QCString trRelatedFunctions()
......
......@@ -22,6 +22,8 @@
class TranslatorRussian : public Translator
{
public:
QCString idLanguage()
{ return "russian"; }
QCString latexBabelPackage()
{ return "russian"; }
QCString trRelatedFunctions()
......
......@@ -67,6 +67,8 @@ Problem!
class TranslatorSwedish : public Translator
{
public:
QCString idLanguage()
{ return "swedish"; }
QCString latexBabelPackage()
{ return "swedish"; }
......
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment