Commit a62d9f8f authored by dimitri's avatar dimitri

Release-1.6.1-20091004

parent 0c8b6ca6
DOXYGEN Version 1.6.1
DOXYGEN Version 1.6.1-20091004
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (25 August 2009)
Dimitri van Heesch (04 October 2009)
DOXYGEN Version 1.6.1
DOXYGEN Version 1.6.1_20091004
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (25 August 2009)
Dimitri van Heesch (dimitri@stack.nl) (04 October 2009)
......@@ -185,7 +185,7 @@ void MainWindow::about()
t << QString::fromAscii("<qt><center>A tool to configure and run doxygen version ")+
QString::fromAscii(versionString)+
QString::fromAscii(" on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2008</center><p>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2009</center><p>"
"</qt>");
QMessageBox::about(this,tr("Doxygen GUI"),msg);
}
......@@ -230,7 +230,14 @@ void MainWindow::saveConfig(const QString &fileName)
{
if (fileName.isEmpty()) return;
QFile f(fileName);
if (!f.open(QIODevice::WriteOnly)) return;
if (!f.open(QIODevice::WriteOnly))
{
QMessageBox::warning(this,
tr("Error saving"),
tr("Error: cannot open the file ")+fileName+tr(" for writing!\n")+
tr("Reason given: ")+f.error());
return;
}
QTextStream t(&f);
m_expert->writeConfig(t,false);
updateConfigFileName(fileName);
......
......@@ -20,7 +20,7 @@ doxygen_version_minor=6
doxygen_version_revision=1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=NO
doxygen_version_mmn=20091004
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -61,8 +61,8 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_alphabetical_index ALPHABETICAL_INDEX
\refitem cfg_always_detailed_sec ALWAYS_DETAILED_SEC
\refitem cfg_binary_toc BINARY_TOC
\refitem cfg_builtin_stl_support BUILTIN_STL_SUPPORT
\refitem cfg_brief_member_desc BRIEF_MEMBER_DESC
\refitem cfg_builtin_stl_support BUILTIN_STL_SUPPORT
\refitem cfg_call_graph CALL_GRAPH
\refitem cfg_caller_graph CALLER_GRAPH
\refitem cfg_case_sense_names CASE_SENSE_NAMES
......@@ -80,6 +80,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_distribute_group_doc DISTRIBUTE_GROUP_DOC
\refitem cfg_docset_bundle_id DOCSET_BUNDLE_ID
\refitem cfg_docset_feedname DOCSET_FEEDNAME
\refitem cfg_dot_cleanup DOT_CLEANUP
\refitem cfg_dot_fontname DOT_FONTNAME
\refitem cfg_dot_fontpath DOT_FONTPATH
\refitem cfg_dot_fontsize DOT_FONTSIZE
......@@ -91,8 +92,8 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_dotfile_dirs DOTFILE_DIRS
\refitem cfg_doxyfile_encoding DOXYFILE_ENCODING
\refitem cfg_enable_preprocessing ENABLE_PREPROCESSING
\refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE
\refitem cfg_enabled_sections ENABLED_SECTIONS
\refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE
\refitem cfg_example_path EXAMPLE_PATH
\refitem cfg_example_patterns EXAMPLE_PATTERNS
\refitem cfg_example_recursive EXAMPLE_RECURSIVE
......@@ -146,6 +147,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_hide_undoc_relations HIDE_UNDOC_RELATIONS
\refitem cfg_html_align_members HTML_ALIGN_MEMBERS
\refitem cfg_html_dynamic_sections HTML_DYNAMIC_SECTIONS
\refitem cfg_html_file_extension HTML_FILE_EXTENSION
\refitem cfg_html_footer HTML_FOOTER
\refitem cfg_html_header HTML_HEADER
\refitem cfg_html_output HTML_OUTPUT
......@@ -155,6 +157,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_image_path IMAGE_PATH
\refitem cfg_include_graph INCLUDE_GRAPH
\refitem cfg_include_path INCLUDE_PATH
\refitem cfg_included_by_graph INCLUDED_BY_GRAPH
\refitem cfg_inherit_docs INHERIT_DOCS
\refitem cfg_inline_info INLINE_INFO
\refitem cfg_inline_inherited_memb INLINE_INHERITED_MEMB
......@@ -189,23 +192,23 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_pdf_hyperlinks PDF_HYPERLINKS
\refitem cfg_perl_path PERL_PATH
\refitem cfg_perlmod_latex PERLMOD_LATEX
\refitem cfg_perlmod_pretty PERLMOD_PRETTY
\refitem cfg_perlmod_makevar_prefix PERLMOD_MAKEVAR_PREFIX
\refitem cfg_perlmod_pretty PERLMOD_PRETTY
\refitem cfg_predefined PREDEFINED
\refitem cfg_project_name PROJECT_NAME
\refitem cfg_project_number PROJECT_NUMBER
\refitem cfg_qhp_namespace QHP_NAMESPACE
\refitem cfg_qhp_virtual_folder QHP_VIRTUAL_FOLDER
\refitem cfg_qhp_cust_filter_name QHP_CUST_FILTER_NAME
\refitem cfg_qhg_location QHG_LOCATION
\refitem cfg_qhp_cust_filter_attrs QHP_CUST_FILTER_ATTRS
\refitem cfg_qhp_cust_filter_name QHP_CUST_FILTER_NAME
\refitem cfg_qhp_namespace QHP_NAMESPACE
\refitem cfg_qhp_sect_filter_attrs QHP_SECT_FILTER_ATTRS
\refitem cfg_qhg_location QHG_LOCATION
\refitem cfg_qhp_virtual_folder QHP_VIRTUAL_FOLDER
\refitem cfg_qt_autobrief QT_AUTOBRIEF
\refitem cfg_quiet QUIET
\refitem cfg_recursive RECURSIVE
\refitem cfg_referenced_by_relation REFERENCED_BY_RELATION
\refitem cfg_references_relation REFERENCES_RELATION
\refitem cfg_references_link_source REFERENCES_LINK_SOURCE
\refitem cfg_references_relation REFERENCES_RELATION
\refitem cfg_repeat_brief REPEAT_BRIEF
\refitem cfg_rtf_extensions_file RTF_EXTENSIONS_FILE
\refitem cfg_rtf_hyperlinks RTF_HYPERLINKS
......@@ -219,13 +222,14 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_show_files SHOW_FILES
\refitem cfg_show_include_files SHOW_INCLUDE_FILES
\refitem cfg_show_namespaces SHOW_NAMESPACES
\refitem cfg_show_used_files SHOW_USED_FILES
\refitem cfg_sip_support SIP_SUPPORT
\refitem cfg_skip_function_macros SKIP_FUNCTION_MACROS
\refitem cfg_sort_brief_docs SORT_BRIEF_DOCS
\refitem cfg_sort_by_scope_name SORT_BY_SCOPE_NAME
\refitem cfg_sort_members_constructors_first SORT_MEMBERS_CTORS_1ST
\refitem cfg_sort_group_names SORT_GROUP_NAMES
\refitem cfg_sort_member_docs SORT_MEMBER_DOCS
\refitem cfg_sort_members_constructors_first SORT_MEMBERS_CTORS_1ST
\refitem cfg_source_browser SOURCE_BROWSER
\refitem cfg_strip_code_comments STRIP_CODE_COMMENTS
\refitem cfg_strip_from_inc_path STRIP_FROM_INC_PATH
......@@ -240,8 +244,8 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_typedef_hides_struct TYPEDEF_HIDES_STRUCT
\refitem cfg_uml_look UML_LOOK
\refitem cfg_use_htags USE_HTAGS
\refitem cfg_use_inline_trees USE_INLINE_TREES
\refitem cfg_use_pdflatex USE_PDFLATEX
\refitem cfg_use_windows_encoding USE_WINDOWS_ENCODING
\refitem cfg_verbatim_headers VERBATIM_HEADERS
\refitem cfg_warn_format WARN_FORMAT
\refitem cfg_warn_if_doc_error WARN_IF_DOC_ERROR
......@@ -312,17 +316,6 @@ followed by the descriptions of the tags grouped by category.
Lithuanian, Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Serbian,
Slovak, Slovene, Spanish, Swedish, and Ukrainian.
\anchor cfg_use_windows_encoding
<dt>\c USE_WINDOWS_ENCODING <dd>
\addindex USE_WINDOWS_ENCODING
This tag can be used to specify the encoding used in the generated output.
The encoding is not always determined by the language that is chosen,
but also whether or not the output is meant for Windows or non-Windows users.
In case there is a difference, setting the \c USE_WINDOWS_ENCODING tag to \c YES
forces the Windows encoding, (this is the default for the Windows binary),
whereas setting the tag to \c NO uses a Unix-style encoding (the default for
all platforms other than Windows).
\anchor cfg_brief_member_desc
<dt>\c BRIEF_MEMBER_DESC <dd>
\addindex BRIEF_MEMBER_DESC
......@@ -1565,6 +1558,9 @@ and Class Hierarchy pages using a tree view instead of an ordered list.
\addindex LATEX_CMD_NAME
The \c LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked.
If left blank `latex' will be used as the default command name.
Note that when enabling USE_PDFLATEX this option is only used for
generating bitmaps for formulas in the HTML output, but not in the
Makefile that is written to the output directory.
\anchor cfg_makeindex_cmd_name
<dt>\c MAKEINDEX_CMD_NAME <dd>
......
......@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile).
Currently (version 1.6.0), 38 languages
Currently (version 1.6.1), 38 languages
are supported (sorted alphabetically):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto,
......@@ -56,7 +56,7 @@ when the translator was updated.
<td>Afrikaans</td>
<td>Johan Prinsloo</td>
<td>johan at zippysnoek dot com</td>
<td>1.4.6</td>
<td>1.6.0</td>
</tr>
<tr bgcolor="#ffffff">
<td>Arabic</td>
......@@ -218,7 +218,7 @@ when the translator was updated.
<td>Polish</td>
<td>Piotr Kaminski<br/>Grzegorz Kowal<br/>Krzysztof Kral</td>
<td>Piotr.Kaminski at ctm dot gdynia dot pl<br/>g_kowal at poczta dot onet dot pl<br/>krzysztof.kral at gmail dot com</td>
<td>1.6.0</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Portuguese</td>
......@@ -307,7 +307,7 @@ when the translator was updated.
\hline
\hline
Afrikaans & Johan Prinsloo & {\tt\tiny johan@zippysnoek.com} & 1.4.6 \\
Afrikaans & Johan Prinsloo & {\tt\tiny johan@zippysnoek.com} & 1.6.0 \\
\hline
Arabic & Moaz Reyad & {\tt\tiny moazreyad@yahoo.com} & 1.4.6 \\
\hline
......@@ -373,7 +373,7 @@ when the translator was updated.
\hline
Persian & Ali Nadalizadeh & {\tt\tiny nadalizadeh@gmail.com} & 1.6.0 \\
\hline
Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & 1.6.0 \\
Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & up-to-date \\
~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\
~ & Krzysztof Kral & {\tt\tiny krzysztof.kral@gmail.com} & ~ \\
\hline
......
......@@ -49,7 +49,9 @@
2005/08/15 - Doxygen's root directory determined primarily from DOXYGEN
environment variable. When not found, then relatively to the script.
2007/03/20 - The "translate me!" searched in comments and reported if found.
2009/05/09 - Changed HTML output to make it confirm to XHTML DTD
2008/06/09 - Warning when the MAX_DOT_GRAPH_HEIGHT is still part of trLegendDocs().
2009/05/09 - Changed HTML output to fit it with XHTML DTD
2009/09/02 - Added percentage info to the report (implemented / to be implemented).
"""
from __future__ import generators
......@@ -166,6 +168,7 @@ class Transl:
self.prototypeDic = {} # uniPrototype -> prototype
self.translateMeText = 'translate me!'
self.translateMeFlag = False # comments with "translate me!" found
self.txtMAX_DOT_GRAPH_HEIGHT_flag = False # found in string in trLegendDocs()
self.obsoleteMethods = None # list of prototypes to be removed
self.missingMethods = None # list of prototypes to be implemented
self.implementedMethods = None # list of implemented required methods
......@@ -769,6 +772,8 @@ class Transl:
# identifiers.
prototype = '' # readable prototype (with everything)
uniPrototype = '' # unified prototype (without arg. identifiers)
warning = '' # warning message -- if something special detected
methodId = None # processed method id
# Collect the method prototypes. Stop on the closing
# curly brace followed by the semicolon (end of class).
......@@ -823,6 +828,7 @@ class Transl:
if tokenId == 'id':
prototype += ' ' + tokenStr
uniPrototype += ' ' + tokenStr
methodId = tokenStr # for reporting
status = 5
else:
self.__unexpectedToken(status, tokenId, tokenLineNo)
......@@ -885,8 +891,16 @@ class Transl:
assert(not self.prototypeDic.has_key(uniPrototype))
self.prototypeDic[uniPrototype] = prototype
status = 2 # body consumed
methodId = None # outside of any method
elif tokenId == 'lcurly':
curlyCnt += 1
# Warn in special case.
elif methodId == 'trLegendDocs' and tokenId == 'string' \
and tokenStr.find('MAX_DOT_GRAPH_HEIGHT') >= 0:
self.txtMAX_DOT_GRAPH_HEIGHT_flag = True
elif status == 11: # probably the end of class
if tokenId == 'semic':
status = 777
......@@ -1114,10 +1128,17 @@ class Transl:
self.adaptMinClass = adaptMinClass
self.readableStatus = adaptMinVersion # simplified
# If everything seems OK, but the explicit mark self.translateMeText
# in comments was found, something must be translated.
if not self.note and self.status == '' and self.translateMeFlag:
self.note = 'The "%s" found in a comment.' % self.translateMeText
# If everything seems OK, some explicit warning flags still could
# be set.
if not self.note and self.status == '' and \
(self.translateMeFlag or self.txtMAX_DOT_GRAPH_HEIGHT_flag):
self.note = ''
if self.translateMeFlag:
self.note += 'The "%s" found in a comment.' % self.translateMeText
if self.note != '':
self.note += '\n\t\t'
if self.txtMAX_DOT_GRAPH_HEIGHT_flag:
self.note += 'The MAX_DOT_GRAPH_HEIGHT found in trLegendDocs()'
# If everything seems OK, but there are obsolete methods, set
# the note to clean-up source. This note will be used only when
......@@ -1138,18 +1159,21 @@ class Transl:
# Report the number of not implemented methods.
fout.write('\n\n\n')
fout.write(self.classId + ' (' + self.baseClassId + ')')
percentImplemented = 100 # init
allNum = len(self.manager.requiredMethodsDic)
if self.missingMethods:
num = len(self.missingMethods)
percentImplemented = 100 * (allNum - num) / allNum
fout.write(' %d' % num)
fout.write(' method')
if num > 1:
fout.write('s')
fout.write(' to implement')
fout.write(' to implement (%d %%)' % (100 * num / allNum))
fout.write('\n' + '-' * len(self.classId))
# Write the info about the implemented required methods.
fout.write('\n\n Implements %d' % len(self.implementedMethods))
fout.write(' of the required methods.')
fout.write(' of the required methods (%d %%).' % percentImplemented)
# Report the missing method, but only when it is not English-based
# translator.
......@@ -1541,6 +1565,7 @@ class TrManager:
adaptMinVersion = '9.9.99'
mailtoLst = []
numRequired = len(self.requiredMethodsDic)
for x in self.adaptIdLst:
obj = self.__translDic[x]
f.write(' %-30s' % obj.classId)
......@@ -1548,7 +1573,9 @@ class TrManager:
numimpl = len(obj.missingMethods)
pluralS = ''
if numimpl > 1: pluralS = 's'
f.write('\t%2d method%s to implement' % (numimpl, pluralS))
percent = 100 * numimpl / numRequired
f.write('\t%2d method%s to implement (%d %%)' % (
numimpl, pluralS, percent))
if obj.note:
f.write('\n\tNote: ' + obj.note + '\n')
f.write('\n')
......
(1.6.0)
(1.6.1)
Doxygen supports the following 38 languages (sorted alphabetically):
......@@ -10,7 +10,7 @@ Persian, Polish, Portuguese, Romanian, Russian, Serbian,
SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
and Vietnamese.
Of them, 4 translators are up-to-date, 34 translators are based on
Of them, 5 translators are up-to-date, 33 translators are based on
some adapter class, and 2 are English based.
----------------------------------------------------------------------
......@@ -23,6 +23,7 @@ still may be some details listed even for them:
TranslatorDutch
TranslatorEnglish
TranslatorKorean
TranslatorPolish -- Remove the obsolete methods (never used).
----------------------------------------------------------------------
The following translator classes need some maintenance (the most
......@@ -30,40 +31,39 @@ obsolete at the end). The other info shows the estimation of Doxygen
version when the class was last updated and number of methods that
must be implemented to become up-to-date:
TranslatorVietnamese 1.6.0 5 methods to implement
TranslatorTurkish 1.6.0 5 methods to implement
TranslatorSwedish 1.6.0 5 methods to implement
TranslatorSpanish 1.6.0 5 methods to implement
TranslatorSerbian 1.6.0 5 methods to implement
TranslatorSerbianCyrilic 1.6.0 5 methods to implement
TranslatorRussian 1.6.0 5 methods to implement
TranslatorRomanian 1.6.0 5 methods to implement
TranslatorPolish 1.6.0 5 methods to implement
TranslatorPersian 1.6.0 5 methods to implement
TranslatorMacedonian 1.6.0 5 methods to implement
TranslatorJapanese 1.6.0 5 methods to implement
TranslatorItalian 1.6.0 5 methods to implement
TranslatorGerman 1.6.0 5 methods to implement
TranslatorFinnish 1.6.0 5 methods to implement
TranslatorEsperanto 1.6.0 5 methods to implement
TranslatorCroatian 1.6.0 5 methods to implement
TranslatorChinese 1.6.0 5 methods to implement
TranslatorChinesetraditional 1.6.0 5 methods to implement
TranslatorCatalan 1.6.0 5 methods to implement
TranslatorBrazilian 1.6.0 5 methods to implement
TranslatorGreek 1.5.4 27 methods to implement
TranslatorFrench 1.5.4 27 methods to implement
TranslatorDanish 1.5.4 27 methods to implement
TranslatorSlovene 1.4.6 29 methods to implement
TranslatorNorwegian 1.4.6 28 methods to implement
TranslatorLithuanian 1.4.6 29 methods to implement
TranslatorIndonesian 1.4.6 28 methods to implement
TranslatorHungarian 1.4.6 29 methods to implement
TranslatorArabic 1.4.6 28 methods to implement
TranslatorAfrikaans 1.4.6 29 methods to implement
TranslatorUkrainian 1.4.1 29 methods to implement
TranslatorPortuguese 1.3.3 40 methods to implement
TranslatorSlovak 1.2.18 49 methods to implement
TranslatorVietnamese 1.6.0 5 methods to implement (2 %)
TranslatorTurkish 1.6.0 5 methods to implement (2 %)
TranslatorSwedish 1.6.0 5 methods to implement (2 %)
TranslatorSpanish 1.6.0 5 methods to implement (2 %)
TranslatorSerbian 1.6.0 5 methods to implement (2 %)
TranslatorSerbianCyrilic 1.6.0 5 methods to implement (2 %)
TranslatorRussian 1.6.0 5 methods to implement (2 %)
TranslatorRomanian 1.6.0 5 methods to implement (2 %)
TranslatorPersian 1.6.0 5 methods to implement (2 %)
TranslatorMacedonian 1.6.0 5 methods to implement (2 %)
TranslatorJapanese 1.6.0 5 methods to implement (2 %)
TranslatorItalian 1.6.0 5 methods to implement (2 %)
TranslatorGerman 1.6.0 5 methods to implement (2 %)
TranslatorFinnish 1.6.0 5 methods to implement (2 %)
TranslatorEsperanto 1.6.0 5 methods to implement (2 %)
TranslatorCroatian 1.6.0 5 methods to implement (2 %)
TranslatorChinese 1.6.0 5 methods to implement (2 %)
TranslatorChinesetraditional 1.6.0 5 methods to implement (2 %)
TranslatorCatalan 1.6.0 5 methods to implement (2 %)
TranslatorBrazilian 1.6.0 5 methods to implement (2 %)
TranslatorAfrikaans 1.6.0 5 methods to implement (2 %)
TranslatorGreek 1.5.4 27 methods to implement (12 %)
TranslatorFrench 1.5.4 22 methods to implement (9 %)
TranslatorDanish 1.5.4 27 methods to implement (12 %)
TranslatorSlovene 1.4.6 29 methods to implement (13 %)
TranslatorNorwegian 1.4.6 28 methods to implement (12 %)
TranslatorLithuanian 1.4.6 29 methods to implement (13 %)
TranslatorIndonesian 1.4.6 28 methods to implement (12 %)
TranslatorHungarian 1.4.6 29 methods to implement (13 %)
TranslatorArabic 1.4.6 28 methods to implement (12 %)
TranslatorUkrainian 1.4.1 29 methods to implement (13 %)
TranslatorPortuguese 1.3.3 40 methods to implement (18 %)
TranslatorSlovak 1.2.18 49 methods to implement (22 %)
----------------------------------------------------------------------
The following translator classes derive directly from the
......@@ -91,48 +91,24 @@ Details for translators (classes sorted alphabetically):
TranslatorAfrikaans (TranslatorAdapter_1_4_6) 29 methods to implement
TranslatorAfrikaans (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-------------------
Implements 192 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
virtual QCString trSearching()
virtual QCString trNoMatches()
virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single)
virtual QCString trLoading()
virtual QCString trSubprograms()
virtual QCString trModulesListDescription(bool extractAll)
virtual QCString trModulesList()
virtual QCString trTypeConstraints()
virtual QCString trGlobalNamespace()
virtual QCString trMemberFunctionDocumentationFortran()
virtual QCString trCompoundListDescriptionFortran()
virtual QCString trTypeDocumentation()
virtual QCString trModuleReference(const char * namespaceName)
virtual QCString trModulesMemberDescription(bool extractAll)
virtual QCString trModulesMembers()
virtual QCString trModulesIndex()
virtual QCString trDirRelation(const char * name)
virtual QCString trCompoundListFortran()
virtual QCString trDataTypes()
virtual QCString trCompoundIndexFortran()
virtual QCString trSubprogram(bool first_capital, bool singular)
virtual QCString trCallerGraph()
virtual QCString trEnumerationValueDocumentation()
virtual QCString trCompoundReferenceFortran(const char * clName, ClassDef::CompoundType compType, bool isTemplate)
virtual QCString trType(bool first_capital, bool singular)
virtual QCString trModule(bool first_capital, bool singular)
virtual QCString trCompoundMembersFortran()
virtual QCString trSubprogramDocumentation()
TranslatorArabic (TranslatorAdapter_1_4_6) 28 methods to implement
TranslatorArabic (TranslatorAdapter_1_4_6) 28 methods to implement (12 %)
----------------
Implements 193 of the required methods.
Implements 193 of the required methods (87 %).
Missing methods (should be implemented):
......@@ -178,10 +154,10 @@ TranslatorArabic (TranslatorAdapter_1_4_6) 28 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorBrazilian (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorBrazilian (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-------------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -192,10 +168,10 @@ TranslatorBrazilian (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorCatalan (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorCatalan (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -206,10 +182,10 @@ TranslatorCatalan (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorChinese (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorChinese (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -220,10 +196,10 @@ TranslatorChinese (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorChinesetraditional (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorChinesetraditional (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
----------------------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -234,10 +210,10 @@ TranslatorChinesetraditional (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorCroatian (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorCroatian (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
------------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -248,10 +224,10 @@ TranslatorCroatian (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorDanish (TranslatorAdapter_1_5_4) 27 methods to implement
TranslatorDanish (TranslatorAdapter_1_5_4) 27 methods to implement (12 %)
----------------
Implements 194 of the required methods.
Implements 194 of the required methods (87 %).
Missing methods (should be implemented):
......@@ -284,10 +260,10 @@ TranslatorDanish (TranslatorAdapter_1_5_4) 27 methods to implement
virtual QCString trSubprogramDocumentation()
TranslatorEsperanto (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorEsperanto (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-------------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -298,10 +274,10 @@ TranslatorEsperanto (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorFinnish (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorFinnish (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -312,23 +288,19 @@ TranslatorFinnish (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorFrench (TranslatorAdapter_1_5_4) 27 methods to implement
TranslatorFrench (TranslatorAdapter_1_5_4) 22 methods to implement (9 %)
----------------
Implements 194 of the required methods.
Implements 199 of the required methods (90 %).
Missing methods (should be implemented):
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
virtual QCString trSearching()
virtual QCString trNoMatches()
virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single)
virtual QCString trLoading()
virtual QCString trSubprograms()
virtual QCString trModulesListDescription(bool extractAll)
virtual QCString trModulesList()
virtual QCString trTypeConstraints()
virtual QCString trGlobalNamespace()
virtual QCString trMemberFunctionDocumentationFortran()
virtual QCString trCompoundListDescriptionFortran()
virtual QCString trTypeDocumentation()
......@@ -336,7 +308,6 @@ TranslatorFrench (TranslatorAdapter_1_5_4) 27 methods to implement
virtual QCString trModulesMemberDescription(bool extractAll)
virtual QCString trModulesMembers()
virtual QCString trModulesIndex()
virtual QCString trDirRelation(const char * name)
virtual QCString trCompoundListFortran()
virtual QCString trDataTypes()
virtual QCString trCompoundIndexFortran()
......@@ -348,10 +319,10 @@ TranslatorFrench (TranslatorAdapter_1_5_4) 27 methods to implement
virtual QCString trSubprogramDocumentation()
TranslatorGerman (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorGerman (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -362,10 +333,10 @@ TranslatorGerman (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorGreek (TranslatorAdapter_1_5_4) 27 methods to implement
TranslatorGreek (TranslatorAdapter_1_5_4) 27 methods to implement (12 %)
---------------
Implements 194 of the required methods.
Implements 194 of the required methods (87 %).
Missing methods (should be implemented):
......@@ -410,10 +381,10 @@ TranslatorGreek (TranslatorAdapter_1_5_4) 27 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorHungarian (TranslatorAdapter_1_4_6) 29 methods to implement
TranslatorHungarian (TranslatorAdapter_1_4_6) 29 methods to implement (13 %)
-------------------
Implements 192 of the required methods.
Implements 192 of the required methods (86 %).
Missing methods (should be implemented):
......@@ -448,10 +419,10 @@ TranslatorHungarian (TranslatorAdapter_1_4_6) 29 methods to implement
virtual QCString trSubprogramDocumentation()
TranslatorIndonesian (TranslatorAdapter_1_4_6) 28 methods to implement
TranslatorIndonesian (TranslatorAdapter_1_4_6) 28 methods to implement (12 %)
--------------------
Implements 193 of the required methods.
Implements 193 of the required methods (87 %).
Missing methods (should be implemented):
......@@ -497,10 +468,10 @@ TranslatorIndonesian (TranslatorAdapter_1_4_6) 28 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorItalian (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorItalian (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -511,10 +482,10 @@ TranslatorItalian (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorJapanese (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorJapanese (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
------------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -537,10 +508,10 @@ TranslatorJapanese (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorJapaneseEn (TranslatorEnglish) 216 methods to implement
TranslatorJapaneseEn (TranslatorEnglish) 216 methods to implement (97 %)
--------------------
Implements 5 of the required methods.
Implements 5 of the required methods (2 %).
This English-based translator implements the following methods:
......@@ -551,10 +522,10 @@ TranslatorJapaneseEn (TranslatorEnglish) 216 methods to implement
virtual QCString latexLanguageSupportCommand()
TranslatorKoreanEn (TranslatorEnglish) 216 methods to implement
TranslatorKoreanEn (TranslatorEnglish) 216 methods to implement (97 %)
------------------
Implements 5 of the required methods.
Implements 5 of the required methods (2 %).
This English-based translator implements the following methods:
......@@ -565,10 +536,10 @@ TranslatorKoreanEn (TranslatorEnglish) 216 methods to implement
virtual QCString latexLanguageSupportCommand()
TranslatorLithuanian (TranslatorAdapter_1_4_6) 29 methods to implement
TranslatorLithuanian (TranslatorAdapter_1_4_6) 29 methods to implement (13 %)
--------------------
Implements 192 of the required methods.
Implements 192 of the required methods (86 %).
Missing methods (should be implemented):
......@@ -603,10 +574,10 @@ TranslatorLithuanian (TranslatorAdapter_1_4_6) 29 methods to implement
virtual QCString trSubprogramDocumentation()
TranslatorMacedonian (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorMacedonian (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
--------------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -617,10 +588,10 @@ TranslatorMacedonian (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorNorwegian (TranslatorAdapter_1_4_6) 28 methods to implement
TranslatorNorwegian (TranslatorAdapter_1_4_6) 28 methods to implement (12 %)
-------------------
Implements 193 of the required methods.
Implements 193 of the required methods (87 %).
Missing methods (should be implemented):
......@@ -666,10 +637,10 @@ TranslatorNorwegian (TranslatorAdapter_1_4_6) 28 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorPersian (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorPersian (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -680,18 +651,10 @@ TranslatorPersian (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorPolish (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorPolish (Translator)
----------------
Implements 216 of the required methods.
Missing methods (should be implemented):
virtual QCString trSearching()
virtual QCString trNoMatches()
virtual QCString trLoading()
virtual QCString trGlobalNamespace()
virtual QCString trDirRelation(const char * name)
Implements 221 of the required methods (100 %).
Obsolete methods (should be removed, never used):
......@@ -706,10 +669,10 @@ TranslatorPolish (TranslatorAdapter_1_6_0) 5 methods to implement
QCString trNoDescriptionAvailable()
TranslatorPortuguese (TranslatorAdapter_1_3_3) 40 methods to implement
TranslatorPortuguese (TranslatorAdapter_1_3_3) 40 methods to implement (18 %)
--------------------
Implements 181 of the required methods.
Implements 181 of the required methods (81 %).
Missing methods (should be implemented):
......@@ -767,10 +730,10 @@ TranslatorPortuguese (TranslatorAdapter_1_3_3) 40 methods to implement
QCString trNoDescriptionAvailable()
TranslatorRomanian (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorRomanian (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
------------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -781,10 +744,10 @@ TranslatorRomanian (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorRussian (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorRussian (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -795,10 +758,10 @@ TranslatorRussian (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorSerbian (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorSerbian (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -809,10 +772,10 @@ TranslatorSerbian (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorSerbianCyrilic (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorSerbianCyrilic (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
------------------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -823,10 +786,10 @@ TranslatorSerbianCyrilic (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorSlovak (TranslatorAdapter_1_2_18) 49 methods to implement
TranslatorSlovak (TranslatorAdapter_1_2_18) 49 methods to implement (22 %)
----------------
Implements 172 of the required methods.
Implements 172 of the required methods (77 %).
Missing methods (should be implemented):
......@@ -893,10 +856,10 @@ TranslatorSlovak (TranslatorAdapter_1_2_18) 49 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorSlovene (TranslatorAdapter_1_4_6) 29 methods to implement
TranslatorSlovene (TranslatorAdapter_1_4_6) 29 methods to implement (13 %)
-----------------
Implements 192 of the required methods.
Implements 192 of the required methods (86 %).
Missing methods (should be implemented):
......@@ -931,10 +894,10 @@ TranslatorSlovene (TranslatorAdapter_1_4_6) 29 methods to implement
virtual QCString trSubprogramDocumentation()
TranslatorSpanish (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorSpanish (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -945,10 +908,10 @@ TranslatorSpanish (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorSwedish (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorSwedish (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -959,10 +922,10 @@ TranslatorSwedish (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorTurkish (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorTurkish (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
-----------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......@@ -973,10 +936,10 @@ TranslatorTurkish (TranslatorAdapter_1_6_0) 5 methods to implement
virtual QCString trDirRelation(const char * name)
TranslatorUkrainian (TranslatorAdapter_1_4_1) 29 methods to implement
TranslatorUkrainian (TranslatorAdapter_1_4_1) 29 methods to implement (13 %)
-------------------
Implements 192 of the required methods.
Implements 192 of the required methods (86 %).
Missing methods (should be implemented):
......@@ -1023,10 +986,10 @@ TranslatorUkrainian (TranslatorAdapter_1_4_1) 29 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorVietnamese (TranslatorAdapter_1_6_0) 5 methods to implement
TranslatorVietnamese (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
--------------------
Implements 216 of the required methods.
Implements 216 of the required methods (97 %).
Missing methods (should be implemented):
......
......@@ -69,6 +69,10 @@ class BufStr
}
m_buf = (char *)realloc(m_buf,m_size);
}
int size() const
{
return m_size;
}
char *data() const
{
return m_buf;
......
......@@ -3089,10 +3089,12 @@ void ClassDef::addListReferences()
{
LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
addRefItem(xrefItems.pointer(),
qualifiedName(),
fortranOpt?theTranslator->trType(TRUE,TRUE):
theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(),
displayName()
displayName(),
0
);
}
if (m_impl->memberGroupSDict)
......
......@@ -1395,26 +1395,6 @@ void Config::check()
config_err("Warning: Specifying QCH_FILE requires QHG_LOCATION to be set.\n");
}
if (Config_getBool("HAVE_DOT"))
{
QCString curFontPath = Config_getString("DOT_FONTPATH");
if (curFontPath.isEmpty())
{
portable_getenv("DOTFONTPATH");
QCString newFontPath = ".";
if (!curFontPath.isEmpty())
{
newFontPath+=portable_pathListSeparator();
newFontPath+=curFontPath;
}
portable_setenv("DOTFONTPATH",newFontPath);
}
else
{
portable_setenv("DOTFONTPATH",curFontPath);
}
}
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA") && Config_getBool("INLINE_INFO"))
{
// don't show inline info for Java output, since Java has no inline
......
......@@ -139,7 +139,7 @@ the path. The tag can be used to show relative paths in the file list.
If left blank the directory from which doxygen is run is used as the
path to strip.
' depends='FULL_PATH_NAMES'>
<value name='/Users/dimitri/doxygen/mail/1.5.7/doxywizard/'/>
<value name=''/>
</option>
<option type='list' id='STRIP_FROM_INC_PATH' format='string' docs='
The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
......@@ -536,7 +536,7 @@ documented source files. You may enter file names like &quot;myfile.cpp&quot; or
directories like &quot;/usr/src/myproject&quot;. Separate the files or directories
with spaces.
'>
<value name='/Users/dimitri/doxygen/mail/1.5.7/doxywizard'/>
<value name=''/>
</option>
<option type='string' id='INPUT_ENCODING' format='string' docs='
This tag can be used to specify the character encoding of the source files
......@@ -933,6 +933,9 @@ put in front of it. If left blank `latex&apos; will be used as the default path.
<option type='string' id='LATEX_CMD_NAME' format='file' docs='
The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
invoked. If left blank `latex&apos; will be used as the default command name.
Note that when enabling USE_PDFLATEX this option is only used for
generating bitmaps for formulas in the HTML output, but not in the
Makefile that is written to the output directory.
' defval='latex' depends='GENERATE_LATEX'/>
<option type='string' id='MAKEINDEX_CMD_NAME' format='file' docs='
The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
......
......@@ -192,7 +192,7 @@ void addConfigOptions(Config *cfg)
"If left blank the directory from which doxygen is run is used as the\n"
"path to strip."
);
cl->addValue("/Users/dimitri/doxygen/mail/1.5.7/doxywizard/");
cl->addValue("");
cl->addDependency("FULL_PATH_NAMES");
//----
cl = cfg->addList(
......@@ -767,7 +767,7 @@ void addConfigOptions(Config *cfg)
"directories like \"/usr/src/myproject\". Separate the files or directories\n"
"with spaces."
);
cl->addValue("/Users/dimitri/doxygen/mail/1.5.7/doxywizard");
cl->addValue("");
cl->setWidgetType(ConfigList::FileAndDir);
//----
cs = cfg->addString(
......@@ -1372,7 +1372,10 @@ void addConfigOptions(Config *cfg)
cs = cfg->addString(
"LATEX_CMD_NAME",
"The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n"
"invoked. If left blank `latex' will be used as the default command name."
"invoked. If left blank `latex' will be used as the default command name.\n"
"Note that when enabling USE_PDFLATEX this option is only used for\n"
"generating bitmaps for formulas in the HTML output, but not in the\n"
"Makefile that is written to the output directory."
);
cs->setDefaultValue("latex");
cs->setWidgetType(ConfigString::File);
......
......@@ -198,9 +198,10 @@ static bool matchExcludedSymbols(const char *name)
void Definition::addToMap(const char *name,Definition *d)
{
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString symbolName = name;
int index=computeQualifiedIndex(symbolName);
if (index!=-1) symbolName=symbolName.mid(index+2);
if (!vhdlOpt && index!=-1) symbolName=symbolName.mid(index+2);
if (!symbolName.isEmpty())
{
//printf("******* adding symbol `%s' (%p)\n",symbolName.data(),d);
......@@ -1240,7 +1241,7 @@ void Definition::writePathFragment(OutputList &ol) const
else
{
ol.writeString("&nbsp;");
ol.writeString("&raquo");
ol.writeString("&raquo;");
ol.writeString("&nbsp;");
}
}
......
......@@ -720,9 +720,11 @@ void DirRelation::writeDocumentation(OutputList &ol)
ol.writeString("<table class=\"dirtab\">");
ol.writeString("<tr class=\"dirtab\">");
// TODO: translate me! "File in %s"
ol.writeString("<th class=\"dirtab\">File in ");
m_src->writePathFragment(ol);
ol.writeString("</th>");
// TODO: translate me! "Includes file in %s"
ol.writeString("<th class=\"dirtab\">Includes file in ");
m_dst->dir()->writePathFragment(ol);
ol.writeString("</th>");
......@@ -844,7 +846,7 @@ void computeDirDependencies()
#endif
}
#if 0
void writeDirDependencyGraph(const char *dirName)
{
QString path;
......@@ -889,6 +891,7 @@ void writeDirDependencyGraph(const char *dirName)
}
htmlPage.close();
}
#endif
void generateDirDocs(OutputList &ol)
{
......
......@@ -261,6 +261,35 @@ static void resetReNumbering()
s_newNumber.resize(s_max_newNumber);
}
static QCString g_dotFontPath;
static void setDotFontPath(const char *path)
{
ASSERT(g_dotFontPath.isEmpty());
g_dotFontPath = portable_getenv("DOTFONTPATH");
QCString newFontPath = Config_getString("DOT_FONTPATH");
if (!newFontPath.isEmpty() && path)
{
newFontPath.prepend(path+portable_pathListSeparator());
}
else if (newFontPath.isEmpty() && path)
{
newFontPath=path;
}
else
{
portable_unsetenv("DOTFONTPATH");
return;
}
portable_setenv("DOTFONTPATH",newFontPath);
}
static void unsetDotFontPath()
{
portable_setenv("DOTFONTPATH",g_dotFontPath);
g_dotFontPath="";
}
static bool readBoundingBoxEPS(const char *fileName,int *width,int *height)
{
QCString bb("%%PageBoundingBox:");
......@@ -375,6 +404,12 @@ void DotRunner::addJob(const char *format,const char *output)
m_jobs.append(new QCString(args));
}
void DotRunner::addPostProcessing(const char *cmd,const char *args)
{
m_postCmd = cmd;
m_postArgs = args;
}
bool DotRunner::run()
{
int exitCode=0;
......@@ -406,6 +441,11 @@ bool DotRunner::run()
}
}
}
if (!m_postCmd.isEmpty() && portable_system(m_postCmd,m_postArgs)!=0)
{
err("Error: Problems running '%s' as a post-processing step for dot output\n",m_postCmd.data());
return FALSE;
}
return TRUE;
error:
err("Problems running dot: exit code=%d, command='%s', arguments='%s'\n",
......@@ -1056,10 +1096,11 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const
{
err("Error: Output dir %s does not exist!\n",path); exit(1);
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
setDotFontPath(d.absPath());
//QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
QDir thisDir;
//QDir::setCurrent(d.absPath());
//QDir thisDir;
// put each connected subgraph of the hierarchy in a row of the HTML output
out << "<table border=\"0\" cellspacing=\"10\" cellpadding=\"0\">" << endl;
......@@ -1073,8 +1114,11 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
baseName.sprintf("inherit_graph_%d",count++);
baseName = convertNameToFile(baseName);
QCString imgName=baseName+"."+ imgExt;
QCString mapName=baseName+".map";
QCString imgName = baseName+"."+ imgExt;
QCString mapName = baseName+".map";
QCString absImgName = QCString(d.absPath().data())+"/"+imgName;
QCString absMapName = QCString(d.absPath().data())+"/"+mapName;
QCString absBaseName = QCString(d.absPath().data())+"/"+baseName;
QListIterator<DotNode> dnli2(*m_rootNodes);
DotNode *node;
......@@ -1104,11 +1148,11 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const
QCString sigStr(33);
MD5Buffer((const unsigned char *)theGraph.ascii(),theGraph.length(),md5_sig);
MD5SigToString(md5_sig,sigStr.data(),33);
if (checkAndUpdateMd5Signature(baseName,sigStr) ||
!QFileInfo(mapName).exists())
if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
!QFileInfo(absMapName).exists())
{
// image was new or has changed
QCString dotName=baseName+".dot";
QCString dotName=absBaseName+".dot";
QFile f(dotName);
if (!f.open(IO_WriteOnly)) return;
QTextStream t(&f);
......@@ -1118,30 +1162,30 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const
resetReNumbering();
DotRunner dotRun(dotName);
dotRun.addJob(imgExt,imgName);
dotRun.addJob(MAP_CMD,mapName);
dotRun.addJob(imgExt,absImgName);
dotRun.addJob(MAP_CMD,absMapName);
if (!dotRun.run())
{
out << "</table>" << endl;
unsetDotFontPath();
return;
}
checkDotResult(imgName);
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(dotName);
checkDotResult(absImgName);
if (Config_getBool("DOT_CLEANUP")) d.remove(dotName);
}
Doxygen::indexList.addImageFile(imgName);
Doxygen::indexList.addImageFile(absImgName);
// write image and map in a table row
QCString mapLabel = escapeCharsInString(n->m_label,FALSE);
out << "<tr><td><img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
<< mapLabel << "_map\"/>" << endl;
out << "<map name=\"" << mapLabel << "_map\" id=\"" << mapLabel << "\">" << endl;
convertMapFile(out,mapName,"");
convertMapFile(out,absMapName,"");
out << "</map></td></tr>" << endl;
//thisDir.remove(mapName);
}
out << "</table>" << endl;
QDir::setCurrent(oldDir);
unsetDotFontPath();
}
void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
......@@ -1776,7 +1820,6 @@ QCString computeMd5Signature(DotNode *root,
static bool updateDotGraph(DotNode *root,
DotNode::GraphType gt,
//QDir &thisDir,
const QCString &baseName,
GraphOutputFormat format,
bool lrRank,
......@@ -1837,10 +1880,7 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
{
err("Error: Output dir %s does not exist!\n",path); exit(1);
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
QDir thisDir;
setDotFontPath(d.absPath());
QCString baseName;
QCString mapName;
......@@ -1860,14 +1900,15 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
break;
}
baseName = convertNameToFile(diskName());
QCString absBaseName = QCString(d.absPath().data())+"/"+baseName;
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (updateDotGraph(m_startNode,
m_graphType,
baseName,
absBaseName,
format,
m_lrRank, //!isTBRank,
m_lrRank,
m_graphType==DotNode::Inheritance,
TRUE
)
......@@ -1876,44 +1917,38 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
if (format==BITMAP) // run dot to create a bitmap image
{
QCString dotArgs(maxCmdLine);
QCString imgName = baseName+"."+imgExt;
QCString absImgName = absBaseName+"."+imgExt;
DotRunner dotRun(baseName+".dot");
dotRun.addJob(imgExt,imgName);
if (generateImageMap) dotRun.addJob(MAP_CMD,baseName+".map");
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob(imgExt,absImgName);
if (generateImageMap) dotRun.addJob(MAP_CMD,absBaseName+".map");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
checkDotResult(imgName);
checkDotResult(absImgName);
}
else if (format==EPS) // run dot to create a .eps image
{
DotRunner dotRun(baseName+".dot");
dotRun.addJob("ps",baseName+".eps");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
return baseName;
}
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob("ps",absBaseName+".eps");
if (Config_getBool("USE_PDFLATEX"))
{
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
baseName.data(),baseName.data());
if (portable_system("epstopdf",epstopdfArgs)!=0)
absBaseName.data(),absBaseName.data());
dotRun.addPostProcessing("epstopdf",epstopdfArgs);
}
if (!dotRun.run())
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
}
}
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
if (Config_getBool("DOT_CLEANUP")) d.remove(baseName+".dot");
}
Doxygen::indexList.addImageFile(baseName+"."+imgExt);
......@@ -1940,22 +1975,21 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
QString tmpstr;
QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath);
convertMapFile(tmpout,absBaseName+".map",relPath);
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapLabel << "\" id=\"" << mapLabel << "\">" << endl;
out << tmpstr;
out << "</map>" << endl;
}
//thisDir.remove(baseName+".map");
}
else if (format==EPS) // produce tex to include the .eps image
{
int width=420,height=600;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
if (!readBoundingBoxEPS(absBaseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
//printf("Got EPS size %d,%d\n",width,height);
......@@ -1981,8 +2015,8 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
"\\end{center}\n"
"\\end{figure}\n";
}
unsetDotFontPath();
QDir::setCurrent(oldDir);
return baseName;
}
......@@ -2185,10 +2219,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
{
err("Error: Output dir %s does not exist!\n",path); exit(1);
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
QDir thisDir;
setDotFontPath(d.absPath());
QCString baseName=m_diskName;
if (m_inverse) baseName+="_dep";
......@@ -2198,9 +2229,12 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
if (m_inverse) mapName+="dep";
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString absBaseName = QCString(d.absPath())+"/"+baseName;
QCString absMapName = QCString(d.absPath())+"/"+mapName;
if (updateDotGraph(m_startNode,
DotNode::Dependency,
baseName,
absBaseName,
format,
FALSE, // lrRank
FALSE, // renderParents
......@@ -2212,41 +2246,36 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
{
// run dot to create a bitmap image
QCString dotArgs(maxCmdLine);
QCString imgName=baseName+"."+imgExt;
DotRunner dotRun(baseName+".dot");
dotRun.addJob(imgExt,imgName);
if (generateImageMap) dotRun.addJob(MAP_CMD,baseName+".map");
QCString absImgName=absBaseName+"."+imgExt;
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob(imgExt,absImgName);
if (generateImageMap) dotRun.addJob(MAP_CMD,absBaseName+".map");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
checkDotResult(imgName);
checkDotResult(absImgName);
}
else if (format==EPS)
{
// run dot to create a .eps image
DotRunner dotRun(baseName+".dot");
dotRun.addJob("ps",baseName+".eps");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
return baseName;
}
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob("ps",absBaseName+".eps");
if (Config_getBool("USE_PDFLATEX"))
{
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
baseName.data(),baseName.data());
if (portable_system("epstopdf",epstopdfArgs)!=0)
absBaseName.data(),absBaseName.data());
dotRun.addPostProcessing("epstopdf",epstopdfArgs);
}
if (!dotRun.run())
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
}
}
}
Doxygen::indexList.addImageFile(baseName+"."+imgExt);
if (format==BITMAP && generateImageMap)
......@@ -2258,22 +2287,21 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
QString tmpstr;
QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath);
convertMapFile(tmpout,absBaseName+".map",relPath);
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapName << "_map\" id=\"" << mapName << "\">" << endl;
out << tmpstr;
out << "</map>" << endl;
}
//thisDir.remove(baseName+".map");
}
else if (format==EPS)
{
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
if (!readBoundingBoxEPS(absBaseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
int maxWidth = 420; /* approx. page width in points */
......@@ -2288,9 +2316,9 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
"\\end{figure}\n";
}
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
if (Config_getBool("DOT_CLEANUP")) d.remove(baseName+".dot");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
......@@ -2482,18 +2510,17 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
{
err("Error: Output dir %s does not exist!\n",path); exit(1);
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
QDir thisDir;
setDotFontPath(d.absPath());
QCString baseName = m_diskName + (m_inverse ? "_icgraph" : "_cgraph");
QCString mapName=baseName;
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString absBaseName = QCString(d.absPath())+"/"+baseName;
if (updateDotGraph(m_startNode,
DotNode::CallGraph,
baseName,
absBaseName,
format,
TRUE, // lrRank
FALSE, // renderParents
......@@ -2505,41 +2532,36 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
{
// run dot to create a bitmap image
QCString dotArgs(maxCmdLine);
QCString imgName=baseName+"."+imgExt;
DotRunner dotRun(baseName+".dot");
dotRun.addJob(imgExt,imgName);
if (generateImageMap) dotRun.addJob(MAP_CMD,baseName+".map");
QCString absImgName=absBaseName+"."+imgExt;
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob(imgExt,absImgName);
if (generateImageMap) dotRun.addJob(MAP_CMD,absBaseName+".map");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
checkDotResult(imgName);
checkDotResult(absImgName);
}
else if (format==EPS)
{
// run dot to create a .eps image
DotRunner dotRun(baseName+".dot");
dotRun.addJob("ps",baseName+".eps");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
return baseName;
}
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob("ps",absBaseName+".eps");
if (Config_getBool("USE_PDFLATEX"))
{
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
baseName.data(),baseName.data());
if (portable_system("epstopdf",epstopdfArgs)!=0)
absBaseName.data(),absBaseName.data());
dotRun.addPostProcessing("epstopdf",epstopdfArgs);
}
if (!dotRun.run())
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
}
}
}
Doxygen::indexList.addImageFile(baseName+"."+imgExt);
if (format==BITMAP && generateImageMap)
......@@ -2552,22 +2574,21 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
QString tmpstr;
QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath);
convertMapFile(tmpout,absBaseName+".map",relPath);
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapName << "_map\" id=\"" << mapName << "\">" << endl;
out << tmpstr;
out << "</map>" << endl;
}
//thisDir.remove(baseName+".map");
}
else if (format==EPS)
{
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
if (!readBoundingBoxEPS(absBaseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
int maxWidth = 420; /* approx. page width in points */
......@@ -2582,9 +2603,9 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
"\\end{figure}\n";
}
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
if (Config_getBool("DOT_CLEANUP")) d.remove(baseName+".dot");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
......@@ -2622,18 +2643,17 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
{
err("Error: Output dir %s does not exist!\n",path); exit(1);
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
QDir thisDir;
setDotFontPath(d.absPath());
QCString baseName=m_dir->getOutputFileBase()+"_dep";
QCString mapName=escapeCharsInString(baseName,FALSE);
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
// todo: create check, update md5 checksum
QCString absBaseName = QCString(d.absPath())+"/"+baseName;
// TODO: create check, update md5 checksum
{
QFile f(baseName+".dot");
QFile f(absBaseName+".dot");
if (!f.open(IO_WriteOnly))
{
err("Cannot create file %s.dot for writing!\n",baseName.data());
......@@ -2647,41 +2667,36 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
{
// run dot to create a bitmap image
QCString dotArgs(maxCmdLine);
QCString imgName=baseName+"."+imgExt;
DotRunner dotRun(baseName+".dot");
dotRun.addJob(imgExt,imgName);
if (generateImageMap) dotRun.addJob(MAP_CMD,baseName+".map");
QCString absImgName=absBaseName+"."+imgExt;
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob(imgExt,absImgName);
if (generateImageMap) dotRun.addJob(MAP_CMD,absBaseName+".map");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
checkDotResult(imgName);
checkDotResult(absImgName);
}
else if (format==EPS)
{
// run dot to create a .eps image
DotRunner dotRun(baseName+".dot");
dotRun.addJob("ps",baseName+".eps");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
return baseName;
}
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob("ps",absBaseName+".eps");
if (Config_getBool("USE_PDFLATEX"))
{
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
baseName.data(),baseName.data());
if (portable_system("epstopdf",epstopdfArgs)!=0)
absBaseName.data(),absBaseName.data());
dotRun.addPostProcessing("epstopdf",epstopdfArgs);
}
if (!dotRun.run())
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
}
}
}
Doxygen::indexList.addImageFile(baseName+"."+imgExt);
if (format==BITMAP && generateImageMap)
......@@ -2695,7 +2710,7 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
QString tmpstr;
QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath,TRUE);
convertMapFile(tmpout,absBaseName+".map",relPath,TRUE);
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapName << "_map\" id=\"" << mapName << "\">" << endl;
......@@ -2711,10 +2726,10 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
else if (format==EPS)
{
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
if (!readBoundingBoxEPS(absBaseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
int maxWidth = 420; /* approx. page width in points */
......@@ -2729,9 +2744,9 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
"\\end{figure}\n";
}
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
if (Config_getBool("DOT_CLEANUP")) d.remove(baseName+".dot");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
......@@ -2779,85 +2794,64 @@ void generateGraphLegend(const char *path)
{
err("Error: Output dir %s does not exist!\n",path); exit(1);
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
setDotFontPath(d.absPath());
// run dot to generate the a bitmap image from the graph
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString imgName = "graph_legend."+imgExt;
QCString absImgName = QCString(d.absPath())+"/"+ imgName;
DotRunner dotRun("graph_legend.dot");
dotRun.addJob(imgExt,imgName);
DotRunner dotRun(d.absPath()+"/graph_legend.dot");
dotRun.addJob(imgExt,absImgName);
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
unsetDotFontPath();
return;
}
checkDotResult(imgName);
checkDotResult(absImgName);
Doxygen::indexList.addImageFile(imgName);
QDir::setCurrent(oldDir);
unsetDotFontPath();
}
void writeDotGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,GraphOutputFormat format)
{
QCString absOutFile = outDir;
absOutFile+=portable_pathSeparator();
absOutFile+=outFile;
// chdir to the output dir, so dot can find the font file.
QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the html output directory (i.e. path)
QDir::setCurrent(outDir);
//printf("Going to dir %s\n",QDir::currentDirPath().data());
QCString env = portable_getenv("DOTFONTPATH");
if (env==".") // this path was set by doxygen, so dot can find the FreeSans.ttf font,
// for user defined graphs we use the default search path built into dot,
// unless the user has set the DOTFONTPATH as well.
QDir d(outDir);
if (!d.exists())
{
// temporarily remove the DOTFONTPATH environment variable
// so dot will use the built-in search path.
portable_unsetenv("DOTFONTPATH");
err("Error: Output dir %s does not exist!\n",outDir); exit(1);
}
setDotFontPath(0);
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString imgName = (QCString)outFile+"."+imgExt;
QCString absImgName = QCString(d.absPath())+"/"+imgName;
QCString absOutFile = QCString(d.absPath())+"/"+outFile;
DotRunner dotRun(inFile);
if (format==BITMAP)
dotRun.addJob(imgExt,imgName);
dotRun.addJob(imgExt,absImgName);
else // format==EPS
dotRun.addJob("ps",QCString(outFile)+".eps");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
goto error;
}
// Added by Nils Strom
dotRun.addJob("ps",absOutFile+".eps");
if ( (format==EPS) && (Config_getBool("USE_PDFLATEX")) )
{
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
outFile,outFile);
if (portable_system("epstopdf",epstopdfArgs)!=0)
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
}
absOutFile.data(),absOutFile.data());
dotRun.addPostProcessing("epstopdf",epstopdfArgs);
}
if (format==BITMAP) checkDotResult(imgName);
Doxygen::indexList.addImageFile(imgName);
if (env==".")
if (!dotRun.run())
{
// restore the DOTFONTPATH variable again
portable_setenv("DOTFONTPATH",env);
unsetDotFontPath();
return;
}
error:
QDir::setCurrent(oldDir);
if (format==BITMAP) checkDotResult(absImgName);
Doxygen::indexList.addImageFile(imgName);
unsetDotFontPath();
}
......@@ -2874,28 +2868,30 @@ QString getDotImageMapFromFile(const QString& inFile, const QString& outDir,
{
QString outFile = inFile + ".map";
// chdir to the output dir, so dot can find the font file.
QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the html output directory (i.e. path)
QDir::setCurrent(outDir);
//printf("Going to dir %s\n",QDir::currentDirPath().data());
QDir d(outDir);
if (!d.exists())
{
err("Error: Output dir %s does not exist!\n",outDir.data()); exit(1);
}
setDotFontPath(d.absPath());
QCString absOutFile = QCString(d.absPath())+"/"+outFile.data();
DotRunner dotRun(inFile);
dotRun.addJob(MAP_CMD,outFile);
dotRun.addJob(MAP_CMD,absOutFile);
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
unsetDotFontPath();
return "";
}
QString result;
QTextOStream tmpout(&result);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout, outFile, relPath ,TRUE, context);
QDir().remove(outFile);
// printf("result=%s\n",result.data());
convertMapFile(tmpout, absOutFile, relPath ,TRUE, context);
d.remove(outFile);
QDir::setCurrent(oldDir);
unsetDotFontPath();
return result;
}
// end MDG mods
......@@ -3119,16 +3115,14 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo
// store the original directory
if (!d.exists())
{
err("Error: Output dir %s does not exist!\n",path);
exit(1);
err("Error: Output dir %s does not exist!\n",path); exit(1);
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the output directory (i.e. path)
QDir::setCurrent(d.absPath());
QDir thisDir;
setDotFontPath(d.absPath());
QCString baseName = m_diskName;
QCString absBaseName = QCString(d.absPath())+"/"+baseName;
QFile dotfile(baseName+".dot");
QFile dotfile(absBaseName+".dot");
if (dotfile.open(IO_WriteOnly))
{
QTextStream tdot(&dotfile);
......@@ -3166,12 +3160,15 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo
QCString imgName = baseName+"."+imgExt;
QCString mapName=baseName+".map";
DotRunner dotRun(baseName+".dot");
dotRun.addJob(imgExt,imgName);
if (writeImageMap) dotRun.addJob(MAP_CMD,mapName);
QCString absImgName = QCString(d.absPath())+"/"+imgName;
QCString absMapName = QCString(d.absPath())+"/"+mapName;
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob(imgExt,absImgName);
if (writeImageMap) dotRun.addJob(MAP_CMD,absMapName);
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
......@@ -3182,38 +3179,33 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo
<< "\" border=\"0\" alt=\"\" usemap=\"#"
<< mapLabel << "_map\"/>" << endl;
t << "<map name=\"" << mapLabel << "_map\" id=\"" << mapLabel << "\">" << endl;
convertMapFile(t,mapName,relPath);
convertMapFile(t,absMapName,relPath);
t << "</map></td></tr></table></center>" << endl;
thisDir.remove(mapName);
}
}
else if (format==EPS)
{
DotRunner dotRun(baseName+".dot");
dotRun.addJob("ps",baseName+".eps");
if (!dotRun.run())
{
QDir::setCurrent(oldDir);
return baseName;
}
DotRunner dotRun(absBaseName+".dot");
dotRun.addJob("ps",absBaseName+".eps");
if (Config_getBool("USE_PDFLATEX"))
{
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
baseName.data(),baseName.data());
if (portable_system("epstopdf",epstopdfArgs)!=0)
absBaseName.data(),absBaseName.data());
dotRun.addPostProcessing("epstopdf",epstopdfArgs);
}
if (!dotRun.run())
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
}
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
if (!readBoundingBoxEPS(absBaseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
int maxWidth = 420; /* approx. page width in points */
......@@ -3228,11 +3220,10 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo
}
if (Config_getBool("DOT_CLEANUP"))
{
thisDir.remove(baseName+".dot");
d.remove(baseName+".dot");
}
QDir::setCurrent(oldDir);
unsetDotFontPath();
return baseName;
}
......
......@@ -321,10 +321,14 @@ class DotRunner
*/
void addJob(const char *format,const char *output);
void addPostProcessing(const char *cmd,const char *args);
/** Runs dot for all jobs added. */
bool run();
private:
QList<QCString> m_jobs;
QCString m_postArgs;
QCString m_postCmd;
QCString m_file;
};
......
......@@ -78,6 +78,7 @@
#include "marshal.h"
#include "portable.h"
#include "vhdlscanner.h"
#include "vhdldocgen.h"
#include "layout.h"
......@@ -4078,12 +4079,12 @@ static bool findClassRelation(
QCString biName=bi->name;
bool explicitGlobalScope=FALSE;
//printf("findClassRelation: biName=`%s'\n",biName.data());
if (biName.left(2)=="::") // explicit global scope
{
biName=biName.right(biName.length()-2);
explicitGlobalScope=TRUE;
}
//printf("biName=`%s'\n",biName.data());
EntryNav *parentNode=rootNav->parent();
bool lastParent=FALSE;
......@@ -4108,7 +4109,7 @@ static bool findClassRelation(
// &stripped);
MemberDef *baseClassTypeDef=0;
QCString templSpec;
ClassDef *baseClass=getResolvedClass(explicitGlobalScope ? 0 : cd,
ClassDef *baseClass=getResolvedClass(explicitGlobalScope ? Doxygen::globalScope : context,
cd->getFileDef(),
baseClassName,
&baseClassTypeDef,
......@@ -4154,7 +4155,7 @@ static bool findClassRelation(
{
templSpec=removeRedundantWhiteSpace(baseClassName.mid(i,e-i));
baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e);
baseClass=getResolvedClass(cd,
baseClass=getResolvedClass(explicitGlobalScope ? Doxygen::globalScope : context,
cd->getFileDef(),
baseClassName,
&baseClassTypeDef,
......@@ -4190,7 +4191,7 @@ static bool findClassRelation(
QCString tmpTemplSpec;
// replace any namespace aliases
replaceNamespaceAliases(baseClassName,si);
baseClass=getResolvedClass(cd,
baseClass=getResolvedClass(explicitGlobalScope ? Doxygen::globalScope : context,
cd->getFileDef(),
baseClassName,
&baseClassTypeDef,
......@@ -4648,8 +4649,9 @@ static void addListReferences()
{
LockingPtr< QList<ListItemInfo> > xrefItems = pd->xrefListItems();
addRefItem(xrefItems.pointer(),
name,
theTranslator->trPage(TRUE,TRUE),
name,pd->title());
name,pd->title(),0);
}
}
DirSDict::Iterator ddi(*Doxygen::directories);
......@@ -4663,8 +4665,9 @@ static void addListReferences()
//}
LockingPtr< QList<ListItemInfo> > xrefItems = dd->xrefListItems();
addRefItem(xrefItems.pointer(),
name,
theTranslator->trDir(TRUE,TRUE),
name,dd->displayName());
name,dd->displayName(),0);
}
}
......@@ -7782,9 +7785,13 @@ static void buildPageList(EntryNav *rootNav)
QCString title=root->args.stripWhiteSpace();
if (title.isEmpty()) title=theTranslator->trMainPage();
addRefItem(root->sli,"page",
Config_getBool("GENERATE_TREEVIEW")?"main":"index",
title
QCString name = Config_getBool("GENERATE_TREEVIEW")?"main":"index";
addRefItem(root->sli,
name,
"page",
name,
title,
0
);
rootNav->releaseEntry();
......@@ -8422,113 +8429,6 @@ static bool patternMatch(QFileInfo *fi,QStrList *patList)
return found;
}
static int transcodeCharacterBuffer(BufStr &srcBuf,int size,
const char *inputEncoding,const char *outputEncoding)
{
if (inputEncoding==0 || outputEncoding==0) return size;
if (qstricmp(inputEncoding,outputEncoding)==0) return size;
void *cd = portable_iconv_open(outputEncoding,inputEncoding);
if (cd==(void *)(-1))
{
err("Error: unsupported character conversion: '%s'->'%s': %s\n"
"Check the INPUT_ENCODING setting in the config file!\n",
inputEncoding,outputEncoding,strerror(errno));
exit(1);
}
int tmpBufSize=size*4+1;
BufStr tmpBuf(tmpBufSize);
size_t iLeft=size;
size_t oLeft=tmpBufSize;
const char *srcPtr = srcBuf.data();
char *dstPtr = tmpBuf.data();
uint newSize=0;
if (!portable_iconv(cd, &srcPtr, &iLeft, &dstPtr, &oLeft))
{
newSize = tmpBufSize-oLeft;
srcBuf.shrink(newSize);
strncpy(srcBuf.data(),tmpBuf.data(),newSize);
//printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
}
else
{
err("Error: failed to translate characters from %s to %s: check INPUT_ENCODING\n",
inputEncoding,outputEncoding);
exit(1);
}
portable_iconv_close(cd);
return newSize;
}
//----------------------------------------------------------------------------
// reads a file into an array and filters out any 0x00 and 0x06 bytes,
// because these are special for the parser.
void copyAndFilterFile(const char *fileName,BufStr &dest)
{
// try to open file
int size=0;
//uint oldPos = dest.curPos();
//printf(".......oldPos=%d\n",oldPos);
QFileInfo fi(fileName);
if (!fi.exists()) return;
QCString filterName = getFileFilter(fileName);
if (filterName.isEmpty())
{
QFile f(fileName);
if (!f.open(IO_ReadOnly))
{
err("Error: could not open file %s\n",fileName);
return;
}
size=fi.size();
// read the file
dest.skip(size);
if (f.readBlock(dest.data()/*+oldPos*/,size)!=size)
{
err("Error while reading file %s\n",fileName);
return;
}
}
else
{
QCString cmd=filterName+" \""+fileName+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
FILE *f=portable_popen(cmd,"r");
if (!f)
{
err("Error: could not execute filter %s\n",filterName.data());
return;
}
const int bufSize=1024;
char buf[bufSize];
int numRead;
while ((numRead=fread(buf,1,bufSize,f))>0)
{
//printf(">>>>>>>>Reading %d bytes\n",numRead);
dest.addArray(buf,numRead),size+=numRead;
}
portable_pclose(f);
}
// filter unwanted bytes from the resulting data
uchar conv[256];
int i;
for (i=0;i<256;i++) conv[i]=i;
conv[0x06]=0x20; // replace the offending characters with spaces
conv[0x00]=0x20;
// remove any special markers from the input
uchar *p=(uchar *)dest.data()/*+oldPos*/;
for (i=0;i<size;i++,p++) *p=conv[*p];
// and translate CR's
int newSize=filterCRLF(dest.data()/*+oldPos*/,size);
//printf("filter char at %p size=%d newSize=%d\n",dest.data()+oldPos,size,newSize);
if (newSize!=size) // we removed chars
{
dest.shrink(/*oldPos+*/newSize); // resize the array
//printf(".......resizing from %d to %d result=[%s]\n",oldPos+size,oldPos+newSize,dest.data());
}
}
//----------------------------------------------------------------------------
static void copyStyleSheet()
{
......@@ -8562,6 +8462,8 @@ static void copyStyleSheet()
}
}
//! parse the list of input files
static void parseFiles(Entry *root,EntryNav *rootNav)
{
void *cd = 0;
......@@ -8587,26 +8489,21 @@ static void parseFiles(Entry *root,EntryNav *rootNav)
QFileInfo fi(fileName);
BufStr preBuf(fi.size()+4096);
//BufStr *bufPtr = &preBuf;
if (Config_getBool("ENABLE_PREPROCESSING") &&
parser->needsPreprocessing(extension))
{
BufStr inBuf(fi.size()+4096);
msg("Preprocessing %s...\n",s->data());
preprocessFile(fileName,preBuf);
readInputFile(fileName,inBuf);
preprocessFile(fileName,inBuf,preBuf);
}
else
else // no preprocessing
{
msg("Reading %s...\n",s->data());
copyAndFilterFile(fileName,preBuf);
readInputFile(fileName,preBuf);
}
preBuf.addChar('\n'); /* to prevent problems under Windows ? */
// do character transcoding if needed.
transcodeCharacterBuffer(preBuf,preBuf.curPos(),
Config_getString("INPUT_ENCODING"),"UTF-8");
BufStr convBuf(preBuf.curPos()+1024);
// convert multi-line C++ comments to C style comments
......@@ -9911,6 +9808,29 @@ void parseInput()
if (generateMan)
manOutput = createOutputDirectory(outputDirectory,"MAN_OUTPUT","/man");
if (Config_getBool("HAVE_DOT"))
{
QCString curFontPath = Config_getString("DOT_FONTPATH");
if (curFontPath.isEmpty())
{
portable_getenv("DOTFONTPATH");
QCString newFontPath = ".";
if (!curFontPath.isEmpty())
{
newFontPath+=portable_pathListSeparator();
newFontPath+=curFontPath;
}
portable_setenv("DOTFONTPATH",newFontPath);
}
else
{
portable_setenv("DOTFONTPATH",curFontPath);
}
}
/**************************************************************************
* Handle layout file *
**************************************************************************/
......@@ -10102,14 +10022,14 @@ void parseInput()
msg("Computing class relations...\n");
computeTemplateClassRelations();
flushUnresolvedRelations();
//if (Config_getBool("OPTIMIZE_OUTPUT_VHDL"))
//{
// VhdlDocGen::computeVhdlComponentRelations(g_classEntries,g_storage);
//}
//else
//{
if (Config_getBool("OPTIMIZE_OUTPUT_VHDL"))
{
VhdlDocGen::computeVhdlComponentRelations();
}
else
{
computeClassRelations();
//}
}
g_classEntries.clear();
msg("Add enum values to enums...\n");
......
......@@ -1094,8 +1094,10 @@ void FileDef::addListReferences()
{
LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
addRefItem(xrefItems.pointer(),
getOutputFileBase(),
theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name()
getOutputFileBase(),name(),
0
);
}
if (memberGroupSDict)
......
......@@ -84,7 +84,7 @@ void FormulaList::generateBitmaps(const char *path)
for (fli.toFirst();(formula=fli.current());++fli)
{
QCString resultName;
resultName.sprintf("form_%d.png",formula->getId());
resultName.sprintf("form_%d.gif",formula->getId());
// only formulas for which no image exists are generated
QFileInfo fi(resultName);
if (!fi.exists())
......@@ -119,7 +119,7 @@ void FormulaList::generateBitmaps(const char *path)
for (;(pagePtr=pli.current());++pli,++pageIndex)
{
int pageNum=*pagePtr;
msg("Generating image form_%d.png for formula\n",pageNum);
msg("Generating image form_%d.gif for formula\n",pageNum);
char dviArgs[4096];
QCString formBase;
formBase.sprintf("_form%d",pageNum);
......@@ -268,7 +268,7 @@ void FormulaList::generateBitmaps(const char *path)
}
// save the result as a png
QCString resultName;
resultName.sprintf("form_%d.png",pageNum);
resultName.sprintf("form_%d.gif",pageNum);
// the option parameter 1 is used here as a temporary hack
// to select the right color palette!
dstImage.save(resultName,1);
......
......@@ -1230,8 +1230,10 @@ void GroupDef::addListReferences()
{
LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
addRefItem(xrefItems.pointer(),
getOutputFileBase(),
theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name()
getOutputFileBase(),name(),
0
);
}
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
......
......@@ -1758,7 +1758,7 @@ void HtmlGenerator::startMemberGroupDocs()
void HtmlGenerator::endMemberGroupDocs()
{
t << "<br/><br/></div></td></tr>" << endl;
t << "</div></td></tr>" << endl;
}
void HtmlGenerator::startMemberGroup()
......
......@@ -1580,38 +1580,18 @@ void LatexGenerator::docify(const char *str)
void LatexGenerator::codify(const char *str)
{
static bool isJapanese = theTranslator->idLanguage()=="japanese" ||
theTranslator->idLanguage()=="japanese-en";
if (str)
{
const char *p=str;
char c;
char cs[2];
cs[1]='\0';
char cs[5];
int spacesToNextTabStop;
static int tabSize = Config_getInt("TAB_SIZE");
while (*p)
{
static bool MultiByte = FALSE;
//static bool MultiByte = FALSE;
c=*p++;
if( isJapanese )
{
if ( MultiByte )
{
t << (char)c;
MultiByte = FALSE;
continue;
}
if ((uchar)c>=0x80) // char in range [0x80..0xff]
{
t << (char)c;
MultiByte = TRUE;
continue;
}
}
switch(c)
{
case 0x0c: break; // remove ^L
......@@ -1621,14 +1601,34 @@ void LatexGenerator::codify(const char *str)
col+=spacesToNextTabStop;
break;
case '\n': t << '\n'; col=0; break;
default: if (m_prettyCode)
default: cs[0]=c;
cs[1]=0;
int bytes=1;
if (c<0) // multibyte utf-8 character
{
bytes++; // 1xxx.xxxx: >=2 byte character
cs[1]=*p;
cs[2]=0;
if (((uchar)c&0xE0)==0xE0)
{
bytes++; // 111x.xxxx: >=3 byte character
cs[2]=*(p+1);
cs[3]=0;
}
if (((uchar)c&0xF0)==0xF0)
{
bytes++; // 1111.xxxx: 4 byte character
cs[2]=*(p+2);
cs[4]=0;
}
}
if (m_prettyCode)
{
cs[0]=c;
filterLatexString(t,cs,insideTabbing,TRUE);
}
else
{
t << c;
t << cs;
}
if (col>=80)
{
......@@ -1639,6 +1639,7 @@ void LatexGenerator::codify(const char *str)
{
col++;
}
p+=(bytes-1); // skip to next character
break;
}
}
......
......@@ -47,3 +47,6 @@ sub GenerateDep {
#$ GenerateDep("config.cpp","config.l");
$(LEX) -PconfigYY -t config.l >config.cpp
configoptions.cpp: config.xml
python configgen.py config.xml >configoptions.cpp
......@@ -1538,6 +1538,12 @@ void MemberDef::writeDeclaration(OutputList &ol,
//ol.startEmphasis();
ol.popGeneratorState();
}
// for RTF we need to add an extra empty paragraph
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::RTF);
ol.startParagraph();
ol.endParagraph();
ol.popGeneratorState();
ol.endMemberDescription();
}
warnIfUndocumented();
......@@ -2714,7 +2720,8 @@ void MemberDef::addListReference(Definition *)
QCString memName = name();
Definition *pd=getOuterScope();
QCString memArgs;
if (!isRelated() &&
if (!isRelated()
/* && commented out as a result of bug 597016
(
(!hideScopeNames && // there is a scope
pd && pd!=Doxygen::globalScope) // and we can show it
......@@ -2722,6 +2729,7 @@ void MemberDef::addListReference(Definition *)
(pd=getClassDef()) // it's a class so we
// show the scope anyway
)
*/
)
{
if (isObjCMethod())
......@@ -2730,19 +2738,21 @@ void MemberDef::addListReference(Definition *)
}
else if (optimizeOutputJava)
{
memName.prepend(pd->name()+".");
if (!hideScopeNames) memName.prepend(pd->name()+".");
memArgs = argsString();
}
else
{
memName.prepend(pd->name()+"::");
if (!hideScopeNames) memName.prepend(pd->name()+"::");
memArgs = argsString();
}
}
LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
if (xrefItems!=0)
{
addRefItem(xrefItems.pointer(),memLabel,
addRefItem(xrefItems.pointer(),
qualifiedName(),
memLabel,
getOutputFileBase()+"#"+anchor(),memName,memArgs);
}
}
......
......@@ -273,8 +273,12 @@ void MemberGroup::addListReferences(Definition *def)
memberList->addListReferences(def);
if (m_xrefListItems && def)
{
addRefItem(m_xrefListItems,theTranslator->trGroup(TRUE,TRUE),
def->getOutputFileBase()+"#"+anchor(),grpHeader,0);
QCString name = def->getOutputFileBase()+"#"+anchor();
addRefItem(m_xrefListItems,
name,
theTranslator->trGroup(TRUE,TRUE),
name,
grpHeader,0);
}
}
......
......@@ -655,8 +655,10 @@ void NamespaceDef::addListReferences()
{
LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
addRefItem(xrefItems.pointer(),
qualifiedName(),
fortranOpt?theTranslator->trModule(TRUE,TRUE):theTranslator->trNamespace(TRUE,TRUE),
getOutputFileBase(),displayName()
getOutputFileBase(),displayName(),
0
);
}
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
......
......@@ -70,10 +70,7 @@ void PageDef::writeDocumentation(OutputList &ol)
{
//outputList->disable(OutputGenerator::Man);
QCString pageName;
if (Config_getBool("CASE_SENSE_NAMES"))
pageName=name();
else
pageName=name().lower();
pageName=escapeCharsInString(name(),FALSE);
startFile(ol,pageName,pageName,title(),HLI_Pages,TRUE);
......
......@@ -20,7 +20,6 @@
#include "qtbc.h"
#include <stdio.h>
//#include <qfile.h>
#include "define.h"
class BufStr;
......@@ -29,7 +28,7 @@ DefineDict* getFileDefineDict();
void initPreprocessor();
void cleanUpPreprocessor();
void addSearchDir(const char *dir);
void preprocessFile(const char *fileName,BufStr &output);
void preprocessFile(const char *fileName,BufStr &input,BufStr &output);
void preFreeScanner();
#endif
......@@ -46,16 +46,21 @@
#include "debug.h"
#include "bufstr.h"
#include "portable.h"
#include "bufstr.h"
#define YY_NEVER_INTERACTIVE 1
struct FileState
{
FileState(int size) : fileBuf(size), oldFileBuf(0), oldFileBufPos(0) {}
int lineNr;
FILE *filePtr;
FILE *oldYYin;
bool isPlainFile;
//FILE *filePtr;
BufStr fileBuf;
//FILE *oldYYin;
BufStr *oldFileBuf;
int oldFileBufPos;
//bool isPlainFile;
YY_BUFFER_STATE bufState;
QCString fileName;
};
......@@ -83,6 +88,8 @@ static int g_level;
static int g_lastCContext;
static int g_lastCPPContext;
static QArray<int> g_levelGuard;
static BufStr *g_inputBuf;
static int g_inputBufPos;
static BufStr *g_outputBuf;
static int g_roundCount;
static bool g_quoteArg;
......@@ -192,7 +199,7 @@ static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyInclude
// global guard
if (g_curlyCount==0) // not #include inside { ... }
{
if (g_allIncludes.find(absName)==0)
if (g_allIncludes.find(absName)!=0)
{
alreadyIncluded = TRUE;
//printf(" already included 1\n");
......@@ -222,9 +229,21 @@ static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyInclude
}
//printf("#include %s\n",absName.data());
fs = new FileState;
fs = new FileState(fi.size()+4096);
alreadyIncluded = FALSE;
if (!readInputFile(absName,fs->fileBuf))
{ // error
//printf(" error reading\n");
delete fs;
fs=0;
}
else
{
fs->oldFileBuf = g_inputBuf;
fs->oldFileBufPos = g_inputBufPos;
}
#if 0
QCString filterName = getFileFilter(absName);
if (!filterName.isEmpty())
{
......@@ -256,6 +275,8 @@ static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyInclude
{
fs->oldYYin = preYYin;
}
#endif
}
return fs;
}
......@@ -1213,8 +1234,11 @@ static void readIncludeFile(const QCString &inc)
outputArray(lineStr.data(),lineStr.length());
//fprintf(stderr,"Switching to include file %s\n",incFileName.data());
preYYin=fs->filePtr;
yy_switch_to_buffer(yy_create_buffer(preYYin, YY_BUF_SIZE));
//preYYin=fs->filePtr;
//yy_switch_to_buffer(yy_create_buffer(preYYin, YY_BUF_SIZE));
g_inputBuf=&fs->fileBuf;
g_inputBufPos=0;
yy_switch_to_buffer(yy_create_buffer(0, YY_BUF_SIZE));
}
else
{
......@@ -1309,6 +1333,7 @@ static char resolveTrigraph(char c)
static int yyread(char *buf,int max_size)
{
#if 0
int len = fread( buf, 1, max_size, preYYin );
if (len==0 && ferror( yyin ))
{
......@@ -1316,6 +1341,13 @@ static int yyread(char *buf,int max_size)
return len;
}
return filterCRLF(buf,len);
#endif
int bytesInBuf = g_inputBuf->curPos()-g_inputBufPos;
int bytesToCopy = QMIN(max_size,bytesInBuf);
memcpy(buf,g_inputBuf->data()+g_inputBufPos,bytesToCopy);
g_inputBufPos+=bytesToCopy;
return bytesToCopy;
}
/* ----------------------------------------------------------------- */
......@@ -1590,7 +1622,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_incName=c;
BEGIN(Include);
}
<Command>"define"{B}+ {
<Command>("cmake")?"define"{B}+ {
//printf("!!!DefName\n");
BEGIN(DefName);
}
......@@ -2231,6 +2263,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
{
FileState *fs=g_includeStack.pop();
//fileDefineCache->merge(g_yyFileName,fs->fileName);
#if 0
if (fs->isPlainFile)
{
if (fs->filePtr && fclose(fs->filePtr)!=0)
......@@ -2247,11 +2280,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
fs->filePtr=0;
}
#endif
YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
yy_switch_to_buffer( fs->bufState );
yy_delete_buffer( oldBuf );
g_yyLineNr=fs->lineNr;
preYYin = fs->oldYYin;
//preYYin = fs->oldYYin;
g_inputBuf = fs->oldFileBuf;
g_inputBufPos = fs->oldFileBufPos;
setFileName(fs->fileName.copy());
//fprintf(stderr,"######## FileName %s\n",g_yyFileName.data());
......@@ -2264,6 +2300,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
delete fs; fs=0;
}
}
<*>"/*"/"*/" |
<*>"/*"[*]? {
outputArray(yytext,yyleng);
g_lastCContext=YY_START;
......@@ -2385,14 +2422,18 @@ void cleanUpPreprocessor()
}
void preprocessFile(const char *fileName,BufStr &output)
void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
{
uint orgOffset=output.curPos();
//printf("##########################\n%s\n####################\n",
// input.data());
g_macroExpansion = Config_getBool("MACRO_EXPANSION");
g_expandOnlyPredef = Config_getBool("EXPAND_ONLY_PREDEF");
g_curlyCount=0;
g_nospaces=FALSE;
g_inputBuf=&input;
g_inputBufPos=0;
g_outputBuf=&output;
g_includeStack.setAutoDelete(TRUE);
g_includeStack.clear();
......@@ -2511,6 +2552,7 @@ void preprocessFile(const char *fileName,BufStr &output)
firstTime=FALSE;
}
#if 0
QCString inputFilter = getFileFilter(fileName);
if (inputFilter.isEmpty())
{
......@@ -2532,6 +2574,7 @@ void preprocessFile(const char *fileName,BufStr &output)
return;
}
}
#endif
g_yyLineNr = 1;
g_level = 0;
g_ifcount = 0;
......@@ -2544,10 +2587,13 @@ void preprocessFile(const char *fileName,BufStr &output)
preYYlex();
g_lexInit=TRUE;
#if 0
if (inputFilter.isEmpty())
fclose(preYYin);
else
portable_pclose(preYYin);
#endif
if (Debug::isFlagSet(Debug::Preprocessor))
{
......
......@@ -1124,7 +1124,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<FindMembers>{BN}{1,80} {
lineCount();
}
<FindMembers>"@"{ID}{BN}*"(" {
<FindMembers>"@"({ID}".")*{ID}{BN}*"(" {
if (insideJava) // Java annotation
{
lineCount();
......@@ -2010,7 +2010,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
lastCPPContext = YY_START;
BEGIN( SkipCPP ) ;
}
<FindMembers,FindFields>{B}*"#"{B}*"define" { if (insidePHP)
<FindMembers,FindFields>{B}*"#"{B}*("cmake")?"define" {
if (insidePHP)
REJECT;
current->bodyLine = yyLineNr;
BEGIN( Define );
......@@ -2674,6 +2675,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->type=current->type.simplifyWhiteSpace();
current->args=removeRedundantWhiteSpace(current->args);
current->name=current->name.stripWhiteSpace();
if (current->section==Entry::CLASS_SEC) // remove spec for "struct Bla bla;"
{
current->spec = 0;
}
current->section = Entry::VARIABLE_SEC ;
current->fileName = yyFileName;
current->startLine = yyLineNr;
......
......@@ -20,7 +20,7 @@
// Updates:
// --------
// 2009/08/24 -
// 2009/09/02 - Updates for "new since 1.6.0 (mainly for the new search engine)".
// 2008/06/09 - Corrections in trLegendDocs().
// 2007/11/13 - Update for "new since 1.5.4 (mainly for Fortran)".
// 2007/03/20 - removing decode(), conversion of literals to UTF-8.
......@@ -1821,7 +1821,7 @@ class TranslatorCzech : public Translator
/*! directory relation for \a name */
virtual QCString trDirRelation(const char *name)
{
return "Relace "+QCString(name);
return "Relace " + QCString(name);
}
/*! Loading message shown when loading search results */
......@@ -1847,7 +1847,6 @@ class TranslatorCzech : public Translator
{
return "Nic se nenašlo";
}
};
#endif // TRANSLATOR_CZ_H
......@@ -158,7 +158,7 @@ class TranslatorFrench : public TranslatorAdapter_1_5_4
/*! header that is put before the list of typedefs. */
virtual QCString trMemberTypedefDocumentation()
{
return "Documentation des définitions de type membres"; }
return "Documentation des définitions de type membre"; }
/*! header that is put before the list of enumerations. */
virtual QCString trMemberEnumerationDocumentation()
......@@ -386,7 +386,7 @@ class TranslatorFrench : public TranslatorAdapter_1_5_4
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="des fonctions, variables, macros, enumérations, et définitions de type ";
result+="des fonctions, variables, macros, énumérations, et définitions de type ";
}
else
{
......@@ -573,7 +573,7 @@ class TranslatorFrench : public TranslatorAdapter_1_5_4
*/
virtual QCString trTypedefDocumentation()
{
return "Documentation des définition de type"; }
return "Documentation des définitions de type"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
......@@ -812,7 +812,7 @@ class TranslatorFrench : public TranslatorAdapter_1_5_4
if (i<numEntries-2) // not the fore last entry
result+=", ";
else // the fore last entry
result+=", et ";
result+=" et ";
}
}
return result;
......@@ -998,7 +998,7 @@ class TranslatorFrench : public TranslatorAdapter_1_5_4
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
{
return "Documentation des constructeurs et destructeur";
return "Documentation des constructeurs et destructeurs";
}
/*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode()
......@@ -1192,7 +1192,7 @@ class TranslatorFrench : public TranslatorAdapter_1_5_4
"};\n"
"\\endcode\n"
"Si la valeur 240 est attribuée au tag \\c MAX_DOT_GRAPH_HEIGHT "
"du fichier de configuration, cela génèrera le graphe suivant :"
"du fichier de configuration, cela générera le graphe suivant :"
"<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Les rectangles du graphe ci-dessus ont la signification suivante :\n"
......@@ -1736,6 +1736,41 @@ class TranslatorFrench : public TranslatorAdapter_1_5_4
*/
virtual QCString trEnumerationValueDocumentation()
{ return "Documentation des énumérations"; }
//////////////////////////////////////////////////////////////////////////
// new since 1.6.0 (mainly for the new search engine)
//////////////////////////////////////////////////////////////////////////
/*! directory relation for \a name */
virtual QCString trDirRelation(const char *name)
{
return QCString(name)+" Relation";
}
/*! Loading message shown when loading search results */
virtual QCString trLoading()
{
return "Chargement...";
}
/*! Label used for search results in the global namespace */
virtual QCString trGlobalNamespace()
{
return "Espace de nommage global";
}
/*! Message shown while searching */
virtual QCString trSearching()
{
return "Recherche...";
}
/*! Text shown when no search results are found */
virtual QCString trNoMatches()
{
return "Aucune correspondance";
}
};
#endif
......
......@@ -20,21 +20,8 @@
#ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H
class TranslatorPolish : public TranslatorAdapter_1_6_0
class TranslatorPolish : public Translator
{
private:
/*! to avoid macro redefinition from translator_pl.h */
inline QCString decode(const QCString& sInput)
{
//if (Config_getBool("USE_WINDOWS_ENCODING"))
//{
// return ISO88592ToWin1250(sInput);
//}
//else
//{
return sInput;
//}
}
public:
// --- Language control methods -------------------
......@@ -62,80 +49,73 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! return the language charset. This will be used for the HTML output */
virtual QCString idLanguageCharset()
{
//if (Config_getBool("USE_WINDOWS_ENCODING"))
//{
// return "windows-1250";
//}
//else
//{
return "iso-8859-2";
//}
return "utf-8";
}
// --- Language translation methods -------------------
/*! used in the compound documentation before a list of related functions. */
QCString trRelatedFunctions()
{ return decode("Funkcje powi±zane"); }
{ return "Funkcje powiązane"; }
/*! subscript for the related functions. */
QCString trRelatedSubscript()
{ return decode("(Zauwa¿, ¿e to nie s± metody klas.)"); }
{ return "(Zauważ, że to nie są metody klas.)"; }
/*! header that is put before the detailed description of files, classes and namespaces. */
QCString trDetailedDescription()
{ return decode("Opis szczegó³owy"); }
{ return "Opis szczegółowy"; }
/*! header that is put before the list of typedefs. */
QCString trMemberTypedefDocumentation()
{ return decode("Dokumentacja sk³adowych definicji typu"); }
{ return "Dokumentacja składowych definicji typu"; }
/*! header that is put before the list of enumerations. */
QCString trMemberEnumerationDocumentation()
{ return decode("Dokumentacja sk³adowych wyliczanych"); }
{ return "Dokumentacja składowych wyliczanych"; }
/*! header that is put before the list of member functions. */
QCString trMemberFunctionDocumentation()
{ return decode("Dokumentacja funkcji sk³adowych"); }
{ return "Dokumentacja funkcji składowych"; }
/*! header that is put before the list of member attributes. */
QCString trMemberDataDocumentation()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return decode("Dokumentacja pól");
return "Dokumentacja pól";
}
else
{
return decode("Dokumentacja atrybutów sk³adowych");
return "Dokumentacja atrybutów składowych";
}
}
/*! this is the text of a link put after brief descriptions. */
QCString trMore()
{ return decode("Wiêcej..."); }
{ return "Więcej..."; }
/*! put in the class documentation */
QCString trListOfAllMembers()
{ return decode("Lista wszystkich sk³adowych."); }
{ return "Lista wszystkich składowych."; }
/*! used as the title of the "list of all members" page of a class */
QCString trMemberList()
{ return decode("Lista sk³adowych"); }
{ return "Lista składowych"; }
/*! this is the first part of a sentence that is followed by a class name */
QCString trThisIsTheListOfAllMembers()
{ return "To jest kompletna lista sk³adowych dla "; }
{ return "To jest kompletna lista składowych dla "; }
/*! this is the remainder of the sentence after the class name */
QCString trIncludingInheritedMembers()
{ return decode(", uwzglêdniaj±ca wszystkie dziedziczone sk³adowe."); }
{ return ", uwzględniająca wszystkie dziedziczone składowe."; }
/*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name.
*/
QCString trGeneratedAutomatically(const char *s)
{ QCString result=decode("Wygenerowano automatycznie z kodu ¼ród³owego programem Doxygen");
{ QCString result="Wygenerowano automatycznie z kodu źródłowego programem Doxygen";
if (s) result+=(QCString)" dla "+s;
result+=".";
return result;
......@@ -147,7 +127,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! put after an enum value in the list of all members */
QCString trEnumValue()
{ return decode("warto¶æ wyliczenia"); }
{ return "wartość wyliczenia"; }
/*! put after an undocumented member in the list of all members */
QCString trDefinedIn()
......@@ -159,7 +139,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* compounds or files (see the \\group command).
*/
QCString trModules()
{ return decode("Modu³y"); }
{ return "Moduły"; }
/*! This is put above each page as a link to the class hierarchy */
QCString trClassHierarchy()
......@@ -180,11 +160,11 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! This is put above each page as a link to the list of documented files */
QCString trFileList()
{ return decode("Lista plików"); }
{ return "Lista plików"; }
/*! This is put above each page as a link to the list of all verbatim headers */
QCString trHeaderFiles()
{ return decode("Pliki nag³ówkowe"); }
{ return "Pliki nagłówkowe"; }
/*! This is put above each page as a link to all members of compounds. */
QCString trCompoundMembers()
......@@ -195,7 +175,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
}
else
{
return decode("Sk³adowe klas");
return "Składowe klas";
}
}
......@@ -208,7 +188,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
}
else
{
return decode("Sk³adowe plików");
return "Składowe plików";
}
}
......@@ -218,7 +198,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! This is put above each page as a link to all examples. */
QCString trExamples()
{ return decode("Przyk³ady"); }
{ return "Przykłady"; }
/*! This is put above each page as a link to the search engine. */
QCString trSearch()
......@@ -226,17 +206,17 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! This is an introduction to the class hierarchy. */
QCString trClassHierarchyDescription()
{ return decode("Ta lista dziedziczenia posortowana jest z grubsza, "
"choæ nie ca³kowicie, alfabetycznie:");
{ return "Ta lista dziedziczenia posortowana jest z grubsza, "
"choć nie całkowicie, alfabetycznie:";
}
/*! This is an introduction to the list with all files. */
QCString trFileListDescription(bool extractAll)
{
QCString result="Tutaj znajduje siê lista wszystkich ";
QCString result="Tutaj znajduje się lista wszystkich ";
if (!extractAll) result+="udokumentowanych ";
result+="plików z ich krótkimi opisami:";
return decode(result);
result+="plików z ich krótkimi opisami:";
return result;
}
/*! This is an introduction to the annotated compound list. */
......@@ -245,93 +225,93 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return decode("Tutaj znajduj± siê struktury danych wraz z ich krótkimi opisami:");
return "Tutaj znajdują się struktury danych wraz z ich krótkimi opisami:";
}
else
{
return decode("Tutaj znajduj± siê klasy, struktury, "
"unie i interfejsy wraz z ich krótkimi opisami:");
return "Tutaj znajdują się klasy, struktury, "
"unie i interfejsy wraz z ich krótkimi opisami:";
}
}
/*! This is an introduction to the page with all class members. */
QCString trCompoundMembersDescription(bool extractAll)
{
QCString result="Tutaj znajduje siê lista wszystkich ";
QCString result="Tutaj znajduje się lista wszystkich ";
if (!extractAll)
{
result+="udokumentowanych ";
}
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="pól struktur i unii";
result+="pól struktur i unii";
}
else
{
result+="sk³adowych";
result+="składowych";
}
result+=" wraz z odno¶nikami do ";
result+=" wraz z odnośnikami do ";
if (!extractAll)
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="dokumentacji struktur/unii dla ka¿dego pola:";
result+="dokumentacji struktur/unii dla każdego pola:";
}
else
{
result+="dokumentacji klas dla ka¿dej sk³adowej:";
result+="dokumentacji klas dla każdej składowej:";
}
}
else
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="struktur/unii, do których dane pole nale¿y:";
result+="struktur/unii, do których dane pole należy:";
}
else
{
result+="klas, do których dana sk³adowa nale¿y:";
result+="klas, do których dana składowa należy:";
}
}
return decode(result);
return result;
}
/*! This is an introduction to the page with all file members. */
QCString trFileMembersDescription(bool extractAll)
{
QCString result="Tutaj znajduje siê lista wszystkich ";
QCString result="Tutaj znajduje się lista wszystkich ";
if (!extractAll) result+="udokumentowanych ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="funkcji, zmiennych, makr, wyliczeñ i definicji typów";
result+="funkcji, zmiennych, makr, wyliczeń i definicji typów";
}
else
{
result+="sk³adowych plików";
result+="składowych plików";
}
result+=" wraz z odno¶nikami do ";
result+=" wraz z odnośnikami do ";
if (extractAll)
result+="plików, do których one nale¿±:";
result+="plików, do których one należą:";
else
result+="dokumentacji:";
return decode(result);
return result;
}
/*! This is an introduction to the page with the list of all header files. */
QCString trHeaderFilesDescription()
{ return decode("Tutaj znajduj± siê pliki nag³ówkowe tworz±ce API:"); }
{ return "Tutaj znajdują się pliki nagłówkowe tworzące API:"; }
/*! This is an introduction to the page with the list of all examples */
QCString trExamplesDescription()
{ return decode("Tutaj znajduje siê lista wszystkich przyk³adów:"); }
{ return "Tutaj znajduje się lista wszystkich przykładów:"; }
/*! This is an introduction to the page with the list of related pages */
QCString trRelatedPagesDescription()
{ return decode("Tutaj znajduje siê lista wszystkich stron dokumentacji:"); }
{ return "Tutaj znajduje się lista wszystkich stron dokumentacji:"; }
/*! This is an introduction to the page with the list of class/file groups */
QCString trModulesDescription()
{ return decode("Tutaj znajduje siê lista wszystkich grup:"); }
{ return "Tutaj znajduje się lista wszystkich grup:"; }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
......@@ -377,7 +357,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* list of all files.
*/
QCString trFileIndex()
{ return decode("Indeks plików"); }
{ return "Indeks plików"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
......@@ -404,13 +384,13 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* the documentation of all files.
*/
QCString trFileDocumentation()
{ return decode("Dokumentacja plików"); }
{ return "Dokumentacja plików"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
QCString trExampleDocumentation()
{ return decode("Dokumentacja przyk³adów"); }
{ return "Dokumentacja przykładów"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
......@@ -420,7 +400,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! This is used in LaTeX as the title of the document */
QCString trReferenceManual()
{ return decode("Podrêcznik"); }
{ return "Podręcznik"; }
/*! This is used in the documentation of a file as a header before the
* list of defines
......@@ -438,7 +418,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* list of typedefs
*/
QCString trTypedefs()
{ return decode("Definicje typów"); }
{ return "Definicje typów"; }
/*! This is used in the documentation of a file as a header before the
* list of enumerations
......@@ -462,7 +442,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* list of (global) variables
*/
QCString trEnumerationValues()
{ return decode("Warto¶ci wyliczeñ"); }
{ return "Wartości wyliczeń"; }
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
......@@ -474,19 +454,19 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* of documentation blocks for function prototypes
*/
QCString trFunctionPrototypeDocumentation()
{ return decode("Dokumentacja prototypów funkcji"); }
{ return "Dokumentacja prototypów funkcji"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs
*/
QCString trTypedefDocumentation()
{ return decode("Dokumentacja definicji typów"); }
{ return "Dokumentacja definicji typów"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
QCString trEnumerationTypeDocumentation()
{ return decode("Dokumentacja typów wyliczanych"); }
{ return "Dokumentacja typów wyliczanych"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
......@@ -540,19 +520,19 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! this text is generated when the \\internal command is used. */
QCString trForInternalUseOnly()
{ return decode("Tylko do u¿ytku wewnêtrznego."); }
{ return "Tylko do użytku wewnętrznego."; }
/*! this text is generated when the \\reimp command is used. */
QCString trReimplementedForInternalReasons()
{ return decode("Reimplementowana z wewnêtrzych przyczyn; nie dotyczy API."); }
{ return "Reimplementowana z wewnętrzych przyczyn; nie dotyczy API."; }
/*! this text is generated when the \\warning command is used. */
QCString trWarning()
{ return decode("Ostrze¿enie"); }
{ return "Ostrzeżenie"; }
/*! this text is generated when the \\bug command is used. */
QCString trBugsAndLimitations()
{ return decode("B³êdy i ograniczenia"); }
{ return "Błędy i ograniczenia"; }
/*! this text is generated when the \\version command is used. */
QCString trVersion()
......@@ -568,7 +548,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! this text is generated when the \\sa command is used. */
QCString trSeeAlso()
{ return decode("Zobacz równie¿"); }
{ return "Zobacz również"; }
/*! this text is generated when the \\param command is used. */
QCString trParameters()
......@@ -576,7 +556,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! this text is generated when the \\exception command is used. */
QCString trExceptions()
{ return decode("Wyj±tki"); }
{ return "Wyjątki"; }
/*! this text is used in the title page of a LaTeX document. */
QCString trGeneratedBy()
......@@ -591,10 +571,10 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! used as an introduction to the namespace list */
QCString trNamespaceListDescription(bool extractAll)
{
QCString result="Tutaj znajduj± siê wszystkie ";
QCString result="Tutaj znajdują się wszystkie ";
if (!extractAll) result+="udokumentowane ";
result+="przestrzenie nazw wraz z ich krótkimi opisami:";
return decode(result);
result+="przestrzenie nazw wraz z ich krótkimi opisami:";
return result;
}
/*! used in the class documentation as a header before the list of all
......@@ -611,7 +591,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* related classes
*/
QCString trRelatedFunctionDocumentation()
{ return decode("Dokumentacja przyjació³ i funkcji zwi±zanych"); }
{ return "Dokumentacja przyjaciół i funkcji związanych"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
......@@ -630,12 +610,12 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
case ClassDef::Struct: result+=" struktury "; break;
case ClassDef::Union: result+=" unii "; break;
case ClassDef::Interface: result+=" interfejsu "; break;
case ClassDef::Protocol: result+=" protoko³u "; break;
case ClassDef::Protocol: result+=" protokołu "; break;
case ClassDef::Category: result+=" kategorii "; break;
case ClassDef::Exception: result+=" wyj±tku "; break;
case ClassDef::Exception: result+=" wyjątku "; break;
}
result+=(QCString)clName;
return decode(result);
return result;
}
/*! used as the title of the HTML page of a file */
......@@ -660,7 +640,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
QCString trPublicSlots()
{ return "Sloty publiczne"; }
QCString trSignals()
{ return decode("Sygna³y"); }
{ return "Sygnały"; }
QCString trStaticPublicMembers()
{ return "Statyczne metody publiczne"; }
QCString trProtectedMembers()
......@@ -735,19 +715,19 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! This is put above each page as a link to all members of namespaces. */
QCString trNamespaceMembers()
{ return decode("Sk³adowe przestrzeni nazw"); }
{ return "Składowe przestrzeni nazw"; }
/*! This is an introduction to the page with all namespace members */
QCString trNamespaceMemberDescription(bool extractAll)
{
QCString result="Tutaj znajduje siê lista wszystkich ";
QCString result="Tutaj znajduje się lista wszystkich ";
if (!extractAll) result+="udokumentowanych ";
result+="sk³adowych wraz z odno¶nikami do ";
result+="składowych wraz z odnośnikami do ";
if (extractAll)
result+="dokumentacji przestrzeni nazw dla ka¿dej sk³adowej:";
result+="dokumentacji przestrzeni nazw dla każdej składowej:";
else
result+="przestrzeni nazw do których sk³adowe te nale¿±:";
return decode(result);
result+="przestrzeni nazw do których składowe te należą:";
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
......@@ -789,13 +769,13 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
case ClassDef::Struct: result+="j struktury"; break;
case ClassDef::Union: result+="j unii"; break;
case ClassDef::Interface: result+="go interfejsu"; break;
case ClassDef::Protocol: result+="go protoko³u"; break;
case ClassDef::Protocol: result+="go protokołu"; break;
case ClassDef::Category: result+="j kategorii"; break;
case ClassDef::Exception: result+="go wyj±tku"; break;
case ClassDef::Exception: result+="go wyjątku"; break;
}
result+=" zosta³a wygenerowana z plik";
if (single) result+="u:"; else result+="ów:";
return decode(result);
result+=" została wygenerowana z plik";
if (single) result+="u:"; else result+="ów:";
return result;
}
/*! This is in the (quick) index as a link to the alphabetical compound
......@@ -810,12 +790,12 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! This is used as the heading text for the retval command. */
QCString trReturnValues()
{ return decode("Zwracane warto¶ci"); }
{ return "Zwracane wartości"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
QCString trMainPage()
{ return decode("Strona g³ówna"); }
{ return "Strona główna"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
......@@ -829,7 +809,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
QCString trSources()
{
return decode("¬ród³a");
return "Źródła";
}
QCString trDefinedAtLineInSourceFile()
{
......@@ -856,12 +836,12 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! this text is put before a collaboration diagram */
QCString trCollaborationDiagram(const char *clName)
{
return (QCString)decode("Diagram wspó³pracy dla ")+clName+":";
return (QCString)"Diagram współpracy dla "+clName+":";
}
/*! this text is put before an include dependency graph */
QCString trInclDepGraph(const char *fName)
{
return (QCString)decode("Wykres zale¿no¶ci za³±czania dla ")+fName+":";
return (QCString)"Wykres zależności załączania dla "+fName+":";
}
/*! header that is put before the list of constructor/destructors. */
QCString trConstructorDocumentation()
......@@ -871,22 +851,22 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! Used in the file documentation to point to the corresponding sources. */
QCString trGotoSourceCode()
{
return decode("Id¼ do kodu ¼ród³owego tego pliku.");
return "Idź do kodu źródłowego tego pliku.";
}
/*! Used in the file sources to point to the corresponding documentation. */
QCString trGotoDocumentation()
{
return decode("Id¼ do dokumentacji tego pliku.");
return "Idź do dokumentacji tego pliku.";
}
/*! Text for the \\pre command */
QCString trPrecondition()
{
return decode("Warunek wstêpny");
return "Warunek wstępny";
}
/*! Text for the \\post command */
QCString trPostcondition()
{
return decode("Warunek koñcowy");
return "Warunek końcowy";
}
/*! Text for the \\invariant command */
QCString trInvariant()
......@@ -896,12 +876,12 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! Text shown before a multi-line variable/enum initialization */
QCString trInitialValue()
{
return decode("Warto¶æ pocz±tkowa:");
return "Wartość początkowa:";
}
/*! Text used the source code in the file index */
QCString trCode()
{
return decode("kod ¼ród³owy");
return "kod źródłowy";
}
QCString trGraphicalHierarchy()
{
......@@ -909,11 +889,11 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
}
QCString trGotoGraphicalHierarchy()
{
return decode("Id¼ do graficznej hierarchi klas");
return "Idź do graficznej hierarchi klas";
}
QCString trGotoTextualHierarchy()
{
return decode("Id¼ do tekstowej hierarchi klas");
return "Idź do tekstowej hierarchi klas";
}
QCString trPageIndex()
{
......@@ -993,11 +973,11 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
QCString trReferencedBy()
{
return decode("Odwo³ania w");
return "Odwołania w";
}
QCString trRemarks()
{
return decode("Spostrze¿enia");
return "Spostrzeżenia";
}
QCString trAttention()
{
......@@ -1005,8 +985,8 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
}
QCString trInclByDepGraph()
{
return decode("Ten wykres pokazuje, które pliki bezpo¶rednio lub "
"po¶rednio za³±czaj± ten plik:");
return "Ten wykres pokazuje, które pliki bezpośrednio lub "
"pośrednio załączają ten plik:";
}
QCString trSince()
{
......@@ -1025,10 +1005,10 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! page explaining how the dot graph's should be interpreted */
QCString trLegendDocs()
{
return decode(
"Ta strona wyja¶nia jak interpretowaæ wykresy, które s± wygenerowane "
return
"Ta strona wyjaśnia jak interpretować wykresy, które są wygenerowane "
"przez doxygen.<p>\n"
"Rozwa¿ nastêpuj±cy przyk³ad:\n"
"Rozważ następujący przykład:\n"
"\\code\n"
"/*! Klasa Niewidzialna z powodu okrojenia */\n"
"class Niewidzialna { };\n\n"
......@@ -1036,17 +1016,17 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
"class Okrojona : public Niewidzialna { };\n\n"
"/* Klasa nie udokumentowana komentarzami doxygen */\n"
"class Nieudokumentowana { };\n\n"
"/*! Klasa, która jest dziedziczona publicznie */\n"
"/*! Klasa, która jest dziedziczona publicznie */\n"
"class PublicznaBaza : public Okrojona { };\n\n"
"/*! A template class */\n"
"template<class T> class Templ { };\n\n"
"/*! Klasa, która jest dziedziczona przy u¿yciu dziedziczenia chronionego */\n"
"/*! Klasa, która jest dziedziczona przy użyciu dziedziczenia chronionego */\n"
"class ChronionaBaza { };\n\n"
"/*! Klasa, która jest dziedziczona prywatnie */\n"
"/*! Klasa, która jest dziedziczona prywatnie */\n"
"class PrywatnaBaza { };\n\n"
"/*! Klasa, która jest u¿yta przez klasê Dziedziczona */\n"
"/*! Klasa, która jest użyta przez klasę Dziedziczona */\n"
"class Uzyta { };\n\n"
"/*! Superklasa, która dziedziczy kilka innych klas */\n"
"/*! Superklasa, która dziedziczy kilka innych klas */\n"
"class Dziedziczona : public PublicznaBaza,\n"
" protected ChronionaBaza,\n"
" private PrywatnaBaza,\n"
......@@ -1057,30 +1037,32 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
" Uzyta *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Je¶li znacznik \\c MAX_DOT_GRAPH_HEIGHT w pliku konfiguracji "
"jest ustawiony na 200, odniesie to rezultat w nastêpuj±cym wykresie:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"Rezultat na następującym wykresie:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n"
"<p>\n"
"Prostok±ty w powy¿szym wykresie maj± nastêpuj±ce znaczenie:\n"
"Prostokąty w powyższym wykresie mają następujące znaczenie:\n"
"</p>\n"
"<ul>\n"
"<li>Wype³niony czarny prostok±t reprezentuje strukturê lub klasê dla "
"której zosta³ wygenerowany wykres.\n"
"<li>Prostok±t z czarn± obwolut± oznacza udokumentowan± strukturê lub klasê.\n"
"<li>Prostok±t z szar± obwolut± oznacza nieudokumentowan± strukturê lub klasê.\n"
"<li>Prostok±t z czerwon± obwolut± oznacza udokumentowan± strukturê lub klasê dla\n"
"której nie s± pokazane wszystkie relacje dziedziczenia/zawierania. Wykres jest "
"okrojony, je¶li nie mie¶ci siê w okre¶lonych brzegach."
"<li>Wypełniony czarny prostokąt reprezentuje strukturę lub klasę dla "
"której został wygenerowany wykres.</li>\n"
"<li>Prostokąt z czarną obwolutą oznacza udokumentowaną strukturę lub klasę.</li>\n"
"<li>Prostokąt z szarą obwolutą oznacza nieudokumentowaną strukturę lub klasę.</li>\n"
"<li>Prostokąt z czerwoną obwolutą oznacza udokumentowaną strukturę lub klasę dla\n"
"której nie są pokazane wszystkie relacje dziedziczenia/zawierania. Wykres jest "
"okrojony, jeśli nie mieści się w określonych brzegach.</li>\n"
"</ul>\n"
"Strza³ki maj± nastêpuj±ce znaczenie:\n"
"<p>\n"
"Strzałki mają następujące znaczenie:\n"
"<p>\n"
"<ul>\n"
"<li>Ciemno niebieska strza³ka jest u¿ywana do wizualizacji relacji "
"dziedziczenia publicznego pomiêdzy dwiema klasami.\n"
"<li>Ciemno zielona strza³ka jest u¿ywana dla dziedziczenia chronionego.\n"
"<li>Ciemno czerwona strza³ka jest u¿ywana dla dziedziczenia prywatnego.\n"
"<li>Fioletowa przerywana strza³ka jest u¿ywana je¶li klasa jest zawarta "
"lub u¿yta przez inn± klasê. Strza³ka jest podpisana zmienn±(ymi) "
"przez które wskazywana klasa lub struktura jest dostêpna. \n"
"</ul>\n");
"<li>Ciemno niebieska strzałka jest używana do wizualizacji relacji "
"dziedziczenia publicznego pomiędzy dwiema klasami.</li>\n"
"<li>Ciemno zielona strzałka jest używana dla dziedziczenia chronionego.</li>\n"
"<li>Ciemno czerwona strzałka jest używana dla dziedziczenia prywatnego.</li>\n"
"<li>Fioletowa przerywana strzałka jest używana jeśli klasa jest zawarta "
"lub użyta przez inną klasę. Strzałka jest podpisana zmienną(ymi) "
"przez które wskazywana klasa lub struktura jest dostępna. </li>\n"
"</ul>\n";
}
/*! text for the link to the legend page */
QCString trLegend()
......@@ -1119,12 +1101,12 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! Used as a section header for IDL properties */
virtual QCString trProperties()
{
return decode("W³a¶ciwo¶ci");
return "Właściwości";
}
/*! Used as a section header for IDL property documentation */
virtual QCString trPropertyDocumentation()
{
return decode("Dokumentacja w³a¶ciwo¶ci");
return "Dokumentacja właściwości";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.4
......@@ -1155,27 +1137,27 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! Title of the package index page */
virtual QCString trPackageList()
{
return decode("Lista Pakietów");
return "Lista Pakietów";
}
/*! The description of the package index page */
virtual QCString trPackageListDescription()
{
return decode("Oto lista pakietów wraz z krótkim opisem (o ile jest dostêpny):");
return "Oto lista pakietów wraz z krótkim opisem (o ile jest dostępny):";
}
/*! The link name in the Quick links header for each page */
virtual QCString trPackages()
{
return decode("Pakiety");
return "Pakiety";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return decode("Dokumentacja Pakietu");
return "Dokumentacja Pakietu";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
return decode("Warto¶æ:");
return "Wartość:";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1185,12 +1167,12 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! Used as a marker that is put before a \\bug item */
virtual QCString trBug()
{
return decode("B³±d");
return "Błąd";
}
/*! Used as the header of the bug list */
virtual QCString trBugList()
{
return decode("Lista b³êdów");
return "Lista błędów";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1212,7 +1194,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! Used as header RTF general index */
virtual QCString trRTFGeneralIndex()
{
return decode("Indeks");
return "Indeks";
}
/*! This is used for translation of the word that will possibly
......@@ -1244,9 +1226,9 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
virtual QCString trNamespace(bool first_capital, bool singular)
{
QCString result((first_capital ? "Przestrze" : "przestrze"));
result+=(singular ? "ñ" : "nie");
result+=(singular ? "ń" : "nie");
result+=" nazw";
return decode(result);
return result;
}
/*! This is used for translation of the word that will possibly
......@@ -1277,9 +1259,9 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
*/
virtual QCString trMember(bool first_capital, bool singular)
{
QCString result((first_capital ? "Sk³adow" : "sk³adow"));
QCString result((first_capital ? "Składow" : "składow"));
result+=(singular ? "a" : "e");
return decode(result);
return result;
}
/*! This is used for translation of the word that will possibly
......@@ -1325,7 +1307,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
*/
virtual QCString trReferences()
{
return decode("Odwo³uje siê do");
return "Odwołuje się do";
}
......@@ -1353,7 +1335,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
*/
virtual QCString trRTFTableOfContents()
{
return decode("Spis tre¶ci");
return "Spis treści";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1365,7 +1347,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
*/
virtual QCString trDeprecatedList()
{
return decode("Lista elementów do wycofania");
return "Lista elementów do wycofania";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1382,7 +1364,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! Header used for the documentation section of a class' events. */
virtual QCString trEventDocumentation()
{
return decode("Dokumentacja zdarzeñ");
return "Dokumentacja zdarzeń";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1438,7 +1420,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
return "Oto graf wywo³añ dla tej funkcji:";
return "Oto graf wywołań dla tej funkcji:";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1472,22 +1454,22 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
{
if (numDocuments==0)
{
return "Niestety ¿aden dokument nie pasuje do twojego zapytania.";
return "Niestety żaden dokument nie pasuje do twojego zapytania.";
}
else if (numDocuments==1)
{
return "Znaleziono <b>1</b> dokument pasuj±cy do twojego zapytania.";
return "Znaleziono <b>1</b> dokument pasujący do twojego zapytania.";
}
int count = numDocuments % 10;
if ((count>=2) && (count<=4))
{
return "Znaleziono <b>$num</b> dokumenty pasuj±ce do twojego zapytania. "
"Najlepiej pasuj±ce dokumenty wy¶wietlane s± na pocz±tku listy.";
return "Znaleziono <b>$num</b> dokumenty pasujące do twojego zapytania. "
"Najlepiej pasujące dokumenty wyświetlane są na początku listy.";
}
else
{
return "Znaleziono <b>$num</b> dokumentów pasuj±cych do twojego zapytania. "
"Najlepiej pasuj±ce dokumenty wy¶wietlane s± na pocz±tku listy.";
return "Znaleziono <b>$num</b> dokumentów pasujących do twojego zapytania. "
"Najlepiej pasujące dokumenty wyświetlane są na początku listy.";
}
}
/*! This string is put before the list of matched words, for each search
......@@ -1495,7 +1477,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
*/
virtual QCString trSearchMatches()
{
return "Pasuj±ce s³owa:";
return "Pasujące słowa:";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1506,7 +1488,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
*/
virtual QCString trSourceFile(QCString& filename)
{
return "Plik ¼ród³owy " + filename;
return "Plik źródłowy " + filename;
}
//////////////////////////////////////////////////////////////////////////
......@@ -1517,13 +1499,13 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Struktura katalogów"; }
{ return "Struktura katalogów"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Dokumentacja katalogów"; }
{ return "Dokumentacja katalogów"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
......@@ -1536,8 +1518,8 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
*/
virtual QCString trDirDescription()
{
return "Ta struktura katalogów jest posortowana jest z grubsza, "
"choæ nie ca³kowicie, alfabetycznie:";
return "Ta struktura katalogów jest posortowana jest z grubsza, "
"choć nie całkowicie, alfabetycznie:";
}
/*! This returns the title of a directory page. The name of the
......@@ -1565,8 +1547,8 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
*/
virtual QCString trOverloadText()
{
return "To jest metoda przeci±¿ona, udostêpniona dla wygody. "
"Ró¿ni siê od powy¿szej metody tylko zestawem akceptowanych argumentów.";
return "To jest metoda przeciążona, udostępniona dla wygody. "
"Różni się od powyższej metody tylko zestawem akceptowanych argumentów.";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1576,14 +1558,14 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! This is used to introduce a caller (or called-by) graph */
virtual QCString trCallerGraph()
{
return "Oto graf wywo³ywañ tej funkcji:";
return "Oto graf wywoływań tej funkcji:";
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
{ return "Dokumentacja wyliczeñ"; } //TODO check if it is correct translation
{ return "Dokumentacja wyliczeń"; } //TODO check if it is correct translation
//////////////////////////////////////////////////////////////////////////
// new since 1.5.4 (mainly for Fortran)
......@@ -1591,11 +1573,11 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! header that is put before the list of member subprograms (Fortran). */
virtual QCString trMemberFunctionDocumentationFortran()
{ return "Dokumentacja sk³adowej funkcji/podprogramu"; }
{ return "Dokumentacja składowej funkcji/podprogramu"; }
/*! This is put above each page as a link to the list of annotated data types (Fortran). */
virtual QCString trCompoundListFortran()
{ return "Lista typów danych"; }
{ return "Lista typów danych"; }
/*! This is put above each page as a link to all members of compounds (Fortran). */
virtual QCString trCompoundMembersFortran()
......@@ -1603,25 +1585,25 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! This is an introduction to the annotated compound list (Fortran). */
virtual QCString trCompoundListDescriptionFortran()
{ return "Tutaj znajduj± siê typy danych z ich krótkimi opisami:"; }
{ return "Tutaj znajdują się typy danych z ich krótkimi opisami:"; }
/*! This is an introduction to the page with all data types (Fortran). */
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
{
QCString result="Tutaj znajduje siê lista wszystkich ";
QCString result="Tutaj znajduje się lista wszystkich ";
if (!extractAll)
{
result+="udokumentowanych ";
}
result+="sk³adowych typów danych";
result+=" wraz z odno¶nikami do ";
result+="składowych typów danych";
result+=" wraz z odnośnikami do ";
if (!extractAll)
{
result+="dokumentacji struktury danych dla ka¿dej sk³adowej";
result+="dokumentacji struktury danych dla każdej składowej";
}
else
{
result+="typów danych, do których dana sk³adowa nale¿y:";
result+="typów danych, do których dana składowa należy:";
}
return result;
}
......@@ -1630,13 +1612,13 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* annotated compound index (Fortran).
*/
virtual QCString trCompoundIndexFortran()
{ return "Indeks typów danych"; }
{ return "Indeks typów danych"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all data types (Fortran).
*/
virtual QCString trTypeDocumentation()
{ return "Dokumentacja typów danych"; }
{ return "Dokumentacja typów danych"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) subprograms (Fortran).
......@@ -1658,14 +1640,14 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! used as the title of page containing all the index of all modules (Fortran). */
virtual QCString trModulesList()
{ return "Lista modu³ów"; }
{ return "Lista modułów"; }
/*! used as an introduction to the modules list (Fortran) */
virtual QCString trModulesListDescription(bool extractAll)
{
QCString result="Tutaj znajduje siê lista wszystkich ";
QCString result="Tutaj znajduje się lista wszystkich ";
if (!extractAll) result+="udokumentowanych ";
result+="modu³ów z ich krótkimi opisami:";
result+="modułów z ich krótkimi opisami:";
return result;
}
......@@ -1678,13 +1660,13 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
if (isTemplate) result+=" szablonu";
switch(compType)
{
case ClassDef::Class: result+=" modu³u "; break;
case ClassDef::Class: result+=" modułu "; break;
case ClassDef::Struct: result+=" typu "; break;
case ClassDef::Union: result+=" unii "; break;
case ClassDef::Interface: result+=" interfejsu "; break;
case ClassDef::Protocol: result+=" protoko³u "; break;
case ClassDef::Protocol: result+=" protokołu "; break;
case ClassDef::Category: result+=" kategorii "; break;
case ClassDef::Exception: result+=" wyj±tku "; break;
case ClassDef::Exception: result+=" wyjątku "; break;
}
result+=(QCString)clName;
return result;
......@@ -1692,28 +1674,28 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! used as the title of the HTML page of a module (Fortran) */
virtual QCString trModuleReference(const char *namespaceName)
{
QCString result="Dokumentacja modu³u ";
QCString result="Dokumentacja modułu ";
result+=namespaceName;
return result;
}
/*! This is put above each page as a link to all members of modules. (Fortran) */
virtual QCString trModulesMembers()
{ return "Sk³adowe modu³u"; }
{ return "Składowe modułu"; }
/*! This is an introduction to the page with all modules members (Fortran) */
virtual QCString trModulesMemberDescription(bool extractAll)
{
QCString result="Tutaj znajduje siê lista wszystkich ";
QCString result="Tutaj znajduje się lista wszystkich ";
if (!extractAll) result+="udokumentowanych ";
result+="sk³adowych modu³ów wraz z odno¶nikami do ";
result+="składowych modułów wraz z odnośnikami do ";
if (extractAll)
{
result+="dokumentacji modu³u dla ka¿dej sk³adowej:";
result+="dokumentacji modułu dla każdej składowej:";
}
else
{
result+="modu³ów do których sk³adowe te nale¿±:";
result+="modułów do których składowe te należą:";
}
return result;
}
......@@ -1722,7 +1704,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
* index of all modules (Fortran).
*/
virtual QCString trModulesIndex()
{ return "Indeks modu³u"; }
{ return "Indeks modułu"; }
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
......@@ -1730,7 +1712,7 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
*/
virtual QCString trModule(bool first_capital, bool singular)
{
QCString result((first_capital ? "Modu³" : "modu³"));
QCString result((first_capital ? "Moduł" : "moduł"));
if (!singular) result+="y";
return result;
}
......@@ -1744,17 +1726,17 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
QCString result=(QCString)"Dokumentacja dla te";
switch(compType)
{
case ClassDef::Class: result+="go modu³u"; break;
case ClassDef::Class: result+="go modułu"; break;
case ClassDef::Struct: result+="go typu"; break;
case ClassDef::Union: result+="j unii"; break;
case ClassDef::Interface: result+="go interfejsu"; break;
case ClassDef::Protocol: result+="go protoko³u"; break;
case ClassDef::Protocol: result+="go protokołu"; break;
case ClassDef::Category: result+="j kategorii"; break;
case ClassDef::Exception: result+="go wyj±tku"; break;
case ClassDef::Exception: result+="go wyjątku"; break;
}
result+=" zosta³a wygenerowana z plik";
if (single) result+="u:"; else result+="ów:";
return decode(result);
result+=" została wygenerowana z plik";
if (single) result+="u:"; else result+="ów:";
return result;
}
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
......@@ -1780,8 +1762,43 @@ class TranslatorPolish : public TranslatorAdapter_1_6_0
/*! C# Type Constraint list */
virtual QCString trTypeConstraints()
{
return "Wiêzy typów"; //TODO check if it is correct translation
return "Więzy typów"; //TODO check if it is correct translation
}
//////////////////////////////////////////////////////////////////////////
// new since 1.6.0 (mainly for the new search engine)
//////////////////////////////////////////////////////////////////////////
/*! directory relation for \a name */
virtual QCString trDirRelation(const char *name)
{
return "Relcja "+ QCString(name);
}
/*! Loading message shown when loading search results */
virtual QCString trLoading()
{
return "Wczytywanie...";
}
/*! Label used for search results in the global namespace */
virtual QCString trGlobalNamespace()
{
return "Globalna przestrzeń nazw";
}
/*! Message shown while searching */
virtual QCString trSearching()
{
return "Szukanie...";
}
/*! Text shown when no search results are found */
virtual QCString trNoMatches()
{
return "Brak dopasowań";
}
};
#endif
......@@ -49,6 +49,7 @@
#include "textdocvisitor.h"
#include "portable.h"
#include "parserintf.h"
#include "bufstr.h"
#define ENABLE_TRACINGSUPPORT 0
......@@ -5515,21 +5516,36 @@ QCString substituteTemplateArgumentsInString(
{
//printf("n=%s formArg->type='%s' formArg->name='%s' formArg->defval='%s'\n",
// n.data(),formArg->type.data(),formArg->name.data(),formArg->defval.data());
//printf(">> formArg->name='%s' actArg->type='%s' actArg->name='%s'\n",
// formArg->name.data(),actArg->type.data(),actArg->name.data()
// );
if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument
{
// replace formal argument with the actual argument of the instance
if (!leftScopeMatch(actArg->type,n))
// the scope guard is to prevent recursive lockup for
// template<class A> class C : public<A::T>,
// where A::T would become A::T::T here,
// since n==A and actArg->type==A::T
// see bug595833 for an example
{
if (actArg->name.isEmpty())
{
result += actArg->type+" ";
found=TRUE;
}
else // for case where the actual arg is something like "unsigned int"
else
// for case where the actual arg is something like "unsigned int"
// the "int" part is in actArg->name.
{
result += actArg->type+" "+actArg->name+" ";
}
found=TRUE;
}
else if (formArg->name==n && actArg==0 && !formArg->defval.isEmpty() &&
}
}
else if (formArg->name==n &&
actArg==0 &&
!formArg->defval.isEmpty() &&
formArg->defval!=name /* to prevent recursion */
)
{
......@@ -5537,7 +5553,9 @@ QCString substituteTemplateArgumentsInString(
found=TRUE;
}
}
else if (formArg->name==n && actArg==0 && !formArg->defval.isEmpty() &&
else if (formArg->name==n &&
actArg==0 &&
!formArg->defval.isEmpty() &&
formArg->defval!=name /* to prevent recursion */
)
{
......@@ -5777,12 +5795,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
pd->setReference(tagInfo->tagName);
}
QCString pageName;
if (Config_getBool("CASE_SENSE_NAMES"))
pageName=pd->name();
else
pageName=pd->name().lower();
pd->setFileName(pageName);
pd->setFileName(convertNameToFile(pd->name(),FALSE));
//printf("Appending page `%s'\n",baseName.data());
Doxygen::pageSDict->append(baseName,pd);
......@@ -5799,13 +5812,9 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
{
file=gd->getOutputFileBase();
}
else if (pd->getGroupDef())
{
file=pd->getGroupDef()->getOutputFileBase().copy();
}
else
{
file=pageName;
file=pd->getOutputFileBase();
}
SectionInfo *si=new SectionInfo(
file,pd->name(),pd->title(),SectionInfo::Page,pd->getReference());
......@@ -5814,7 +5823,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
// si->fileName.data());
//printf(" SectionInfo: sec=%p sec->fileName=%s\n",si,si->fileName.data());
//printf("Adding section key=%s si->fileName=%s\n",pageName.data(),si->fileName.data());
Doxygen::sectionDict.insert(pageName,si);
Doxygen::sectionDict.insert(pd->name(),si);
}
}
return pd;
......@@ -5823,6 +5832,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
//----------------------------------------------------------------------------
void addRefItem(const QList<ListItemInfo> *sli,
const char *key,
const char *prefix, const char *name,const char *title,const char *args)
{
//printf("addRefItem(sli=%p,prefix=%s,name=%s,title=%s,args=%s)\n",sli,prefix,name,title,args);
......@@ -5834,7 +5844,6 @@ void addRefItem(const QList<ListItemInfo> *sli,
{
RefList *refList = Doxygen::xrefLists->find(lii->type);
if (refList
#if 0
&&
(
// either not a built-in list or the list is enabled
......@@ -5843,7 +5852,6 @@ void addRefItem(const QList<ListItemInfo> *sli,
(lii->type!="bug" || Config_getBool("GENERATE_BUGLIST")) &&
(lii->type!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST"))
)
#endif
)
{
RefItem *item = refList->getRefItem(lii->itemId);
......@@ -5854,7 +5862,7 @@ void addRefItem(const QList<ListItemInfo> *sli,
item->title = title;
item->args = args;
refList->insertIntoList(title,item);
refList->insertIntoList(key,item);
#if 0
......@@ -6843,3 +6851,121 @@ void stackTrace()
#endif
}
static int transcodeCharacterBuffer(BufStr &srcBuf,int size,
const char *inputEncoding,const char *outputEncoding)
{
if (inputEncoding==0 || outputEncoding==0) return size;
if (qstricmp(inputEncoding,outputEncoding)==0) return size;
void *cd = portable_iconv_open(outputEncoding,inputEncoding);
if (cd==(void *)(-1))
{
err("Error: unsupported character conversion: '%s'->'%s': %s\n"
"Check the INPUT_ENCODING setting in the config file!\n",
inputEncoding,outputEncoding,strerror(errno));
exit(1);
}
int tmpBufSize=size*4+1;
BufStr tmpBuf(tmpBufSize);
size_t iLeft=size;
size_t oLeft=tmpBufSize;
const char *srcPtr = srcBuf.data();
char *dstPtr = tmpBuf.data();
uint newSize=0;
if (!portable_iconv(cd, &srcPtr, &iLeft, &dstPtr, &oLeft))
{
newSize = tmpBufSize-oLeft;
srcBuf.shrink(newSize);
strncpy(srcBuf.data(),tmpBuf.data(),newSize);
//printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
}
else
{
err("Error: failed to translate characters from %s to %s: check INPUT_ENCODING\n",
inputEncoding,outputEncoding);
exit(1);
}
portable_iconv_close(cd);
return newSize;
}
//! read a file name \a fileName and optionally filter and transcode it
bool readInputFile(const char *fileName,BufStr &inBuf)
{
// try to open file
int size=0;
//uint oldPos = dest.curPos();
//printf(".......oldPos=%d\n",oldPos);
QFileInfo fi(fileName);
if (!fi.exists()) return FALSE;
QCString filterName = getFileFilter(fileName);
if (filterName.isEmpty())
{
QFile f(fileName);
if (!f.open(IO_ReadOnly))
{
err("Error: could not open file %s\n",fileName);
return FALSE;
}
size=fi.size();
// read the file
inBuf.skip(size);
if (f.readBlock(inBuf.data()/*+oldPos*/,size)!=size)
{
err("Error while reading file %s\n",fileName);
return FALSE;
}
}
else
{
QCString cmd=filterName+" \""+fileName+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
FILE *f=portable_popen(cmd,"r");
if (!f)
{
err("Error: could not execute filter %s\n",filterName.data());
return FALSE;
}
const int bufSize=1024;
char buf[bufSize];
int numRead;
while ((numRead=fread(buf,1,bufSize,f))>0)
{
//printf(">>>>>>>>Reading %d bytes\n",numRead);
inBuf.addArray(buf,numRead),size+=numRead;
}
portable_pclose(f);
}
if (inBuf.size()>=2 &&
((inBuf.at(0)==-1 && inBuf.at(1)==-2) || // Litte endian BOM
(inBuf.at(0)==-2 && inBuf.at(1)==-1) // big endian BOM
)
) // UCS-2 encoded file
{
transcodeCharacterBuffer(inBuf,inBuf.curPos(),
"UCS-2","UTF-8");
}
else // transcode according to the INPUT_ENCODING setting
{
// do character transcoding if needed.
transcodeCharacterBuffer(inBuf,inBuf.curPos(),
Config_getString("INPUT_ENCODING"),"UTF-8");
}
inBuf.addChar('\n'); /* to prevent problems under Windows ? */
// and translate CR's
size=inBuf.curPos();
int newSize=filterCRLF(inBuf.data(),size);
//printf("filter char at %p size=%d newSize=%d\n",dest.data()+oldPos,size,newSize);
if (newSize!=size) // we removed chars
{
inBuf.shrink(newSize); // resize the array
//printf(".......resizing from %d to %d result=[%s]\n",oldPos+size,oldPos+newSize,dest.data());
}
inBuf.at(inBuf.curPos())='\0';
return TRUE;
}
......@@ -53,6 +53,7 @@ class PageDef;
struct SectionInfo;
class QDir;
class Definition;
class BufStr;
//--------------------------------------------------------------------
......@@ -279,7 +280,8 @@ int getScopeFragment(const QCString &s,int p,int *l);
int filterCRLF(char *buf,int len);
void addRefItem(const QList<ListItemInfo> *sli,const char *prefix,
const char *name,const char *title,const char *args=0);
const char *key,
const char *name,const char *title,const char *args);
PageDef *addRelatedPage(const char *name,const QCString &ptitle,
const QCString &doc,QList<SectionInfo> *anchors,
......@@ -363,5 +365,8 @@ QCString convertCharEntitiesToUTF8(const QCString &s);
bool usingTreeIndex();
void stackTrace();
bool readInputFile(const char *fileName,BufStr &inBuf);
#endif
......@@ -204,52 +204,32 @@ ClassDef *VhdlDocGen::getClass(const char *name)
}
/*!
* adds components to their entities
* adds architectures to their entity
*/
void VhdlDocGen::computeVhdlComponentRelations(const QDict<EntryNav>& classEntries,FileStorage* g_storage)
void VhdlDocGen::computeVhdlComponentRelations()
{
ClassSDict::Iterator cli(*Doxygen::classSDict);
for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
QDictIterator<EntryNav> edi(classEntries);
EntryNav *rootNav;
for (;(rootNav=edi.current());++edi)
for (cli.toFirst();cli.current();++cli)
{
ClassDef *cd;
rootNav->loadEntry(g_storage);
Entry *root = rootNav->entry();
QCString bName=stripAnonymousNamespaceScope(rootNav->name());
if ((cd=getClass(bName)))
cli.current()->visited=FALSE;
ClassDef * cd = cli.current();
if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS)
{
QListIterator<BaseInfo> bii(*root->extends);
BaseInfo *bi=0;
for (bii.toFirst();(bi=bii.current());++bii)
QCString bName=cd->name();
int i=bName.find("::");
if (i>0)
{
ClassDef* baseDef=getClass(bi->name);
if (baseDef && baseDef != cd)
QCString entityName=bName.left(i);
ClassDef *classEntity=Doxygen::classSDict->find(entityName);
// entity for architecutre ?
if (classEntity)
{
QCString cc=VhdlDocGen::getClassName(cd);
ClassDef *ccdef=getClass(cc);
if (ccdef==0) break;
int ii=ccdef->protection();
int jj=baseDef->protection();
if (ii==VhdlDocGen::ENTITYCLASS && jj==VhdlDocGen::ENTITYCLASS && (ccdef !=baseDef))
{
ccdef->insertBaseClass(baseDef,bi->name,Public,Normal,0);
baseDef->insertSubClass(ccdef,Public,bi->virt,0);
classEntity->insertBaseClass(cd,bName,Public,Normal,0);
cd->insertSubClass(classEntity,Public,Normal,0);
}
}
}
else
{
if (Config_getBool("WARNINGS"))
warn(rootNav->fileDef()->fileName().data(),root->startLine, "found component without entity: [%s]",bi->name.data());
}
}//for
}//if
rootNav->releaseEntry();
}// for
} // computeVhdlComponentRelations
......
......@@ -105,7 +105,7 @@ class VhdlDocGen
static void debugClassName(ClassSDict*);
//static void MergeFuncDoc(Entry* p,Entry* root);
static void computeVhdlComponentRelations(const QDict<EntryNav>&,FileStorage*);
static void computeVhdlComponentRelations();
//static void addVariableToComponents(EntryNav *rootNav,ClassDef *cd, MemberDef::MemberType mtype, const QCString &name, bool fromAnnScope,MemberDef *fromAnnMemb,Protection prot,bool related);
......
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