summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2018-06-24 08:57:30 (GMT)
committerGitHub <noreply@github.com>2018-06-24 08:57:30 (GMT)
commit56c60e84e6dd6d7e4e7774be24d1402782fd3230 (patch)
tree4341e26d4bf860fec4c5784b042a5c9130ae2da4
parentba30b13cfd4910a5913f080a039fc429ec8a7e3f (diff)
parent154e877cc2e8b10091d7e0068b6f6d5793cd29f3 (diff)
downloadDoxygen-56c60e84e6dd6d7e4e7774be24d1402782fd3230.zip
Doxygen-56c60e84e6dd6d7e4e7774be24d1402782fd3230.tar.gz
Doxygen-56c60e84e6dd6d7e4e7774be24d1402782fd3230.tar.bz2
Merge branch 'master' into feature/bug_tableofcontents_latex
-rw-r--r--addon/doxywizard/CMakeLists.txt15
-rw-r--r--doc/doxygen_manual.css2
-rw-r--r--doc/formulas.doc9
-rw-r--r--examples/include.cpp2
-rw-r--r--qtools/qdict.doc2
-rw-r--r--qtools/qgdict.cpp2
-rw-r--r--qtools/qintdict.doc2
-rw-r--r--qtools/qptrdict.doc2
-rw-r--r--qtools/qstring.cpp2
-rw-r--r--qtools/qvaluelist.doc2
-rw-r--r--src/clangparser.cpp1
-rw-r--r--src/classdef.cpp22
-rw-r--r--src/code.l3
-rw-r--r--src/commentcnv.l2
-rw-r--r--src/commentscan.l2
-rw-r--r--src/config.xml9
-rw-r--r--src/context.cpp18
-rw-r--r--src/docparser.cpp42
-rw-r--r--src/dot.cpp17
-rw-r--r--src/doxygen.cpp60
-rw-r--r--src/doxygen.h2
-rw-r--r--src/doxygen.md2
-rw-r--r--src/filedef.cpp1
-rw-r--r--src/formula.cpp3
-rw-r--r--src/fortrancode.l65
-rw-r--r--src/fortranscanner.l112
-rw-r--r--src/ftvhelp.cpp2
-rw-r--r--src/htmlgen.cpp31
-rw-r--r--src/htmlgen.h5
-rw-r--r--src/index.cpp16
-rw-r--r--src/latexdocvisitor.cpp71
-rw-r--r--src/latexgen.cpp115
-rw-r--r--src/latexgen.h6
-rw-r--r--src/layout.cpp28
-rw-r--r--src/mangen.cpp8
-rw-r--r--src/mangen.h5
-rw-r--r--src/markdown.cpp13
-rw-r--r--src/memberdef.cpp4
-rw-r--r--src/outputgen.h5
-rw-r--r--src/outputlist.h10
-rw-r--r--src/pre.l2
-rw-r--r--src/pycode.l30
-rw-r--r--src/pyscanner.l1
-rw-r--r--src/rtfdocvisitor.cpp18
-rw-r--r--src/rtfgen.cpp53
-rw-r--r--src/rtfgen.h9
-rw-r--r--src/scanner.l6
-rw-r--r--src/translator.h46
-rw-r--r--src/translator_adapter.h35
-rw-r--r--src/translator_am.h4
-rw-r--r--src/translator_br.h124
-rw-r--r--src/translator_cn.h14
-rw-r--r--src/translator_cz.h10
-rw-r--r--src/translator_de.h134
-rw-r--r--src/translator_dk.h3
-rw-r--r--src/translator_en.h129
-rw-r--r--src/translator_es.h2
-rw-r--r--src/translator_fr.h2
-rw-r--r--src/translator_gr.h6
-rw-r--r--src/translator_it.h2
-rw-r--r--src/translator_je.h14
-rw-r--r--src/translator_jp.h14
-rw-r--r--src/translator_ke.h12
-rw-r--r--src/translator_kr.h14
-rw-r--r--src/translator_lv.h2
-rw-r--r--src/translator_nl.h128
-rw-r--r--src/translator_no.h3
-rw-r--r--src/translator_pl.h10
-rw-r--r--src/translator_pt.h132
-rw-r--r--src/translator_ro.h2
-rw-r--r--src/translator_ru.h2
-rw-r--r--src/translator_sc.h5
-rw-r--r--src/translator_si.h2
-rw-r--r--src/translator_sk.h12
-rw-r--r--src/translator_sv.h2
-rw-r--r--src/translator_tw.h14
-rw-r--r--src/translator_vi.h16
-rw-r--r--src/util.cpp30
-rw-r--r--src/vhdlcode.l68
-rw-r--r--src/vhdldocgen.cpp181
-rw-r--r--src/vhdldocgen.h27
-rw-r--r--templates/html/doxygen.css8
-rw-r--r--templates/html/dynsections.js6
-rw-r--r--templates/html/htmldirtree.tpl2
-rw-r--r--templates/html/navtree.js2
-rw-r--r--templates/latex/doxygen.sty14
-rw-r--r--testing/015/015__cond_8c.xml4
-rw-r--r--testing/015_cond.c4
88 files changed, 1521 insertions, 559 deletions
diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt
index 0907d23..810c0d0 100644
--- a/addon/doxywizard/CMakeLists.txt
+++ b/addon/doxywizard/CMakeLists.txt
@@ -4,9 +4,6 @@ if (NOT force_qt4)
if (Qt5Core_FOUND)
message(STATUS "Using Qt5")
find_package(Qt5 COMPONENTS Widgets Gui Xml)
- macro(qt_use_modules)
- qt5_use_modules(${ARGN})
- endmacro()
macro(qt_wrap_cpp)
qt5_wrap_cpp(${ARGN})
endmacro()
@@ -23,8 +20,6 @@ if (NOT Qt5Core_FOUND)
message(STATUS "Using Qt4")
endif()
find_package(Qt4 REQUIRED COMPONENTS QtCore QtXml QtGui)
- macro(qt_use_modules)
- endmacro()
macro(qt_wrap_cpp)
qt4_wrap_cpp(${ARGN})
endmacro()
@@ -104,9 +99,11 @@ ${GENERATED_SRC_WIZARD}/configdoc.cpp
${doxywizard_MOC}
${doxywizard_RESOURCES_RCC}
)
-qt_use_modules(doxywizard Core Gui Widgets Xml)
-target_link_libraries(doxywizard
-${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY}
-)
+
+if(Qt5Core_FOUND)
+ target_link_libraries(doxywizard Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml)
+else()
+ target_link_libraries(doxywizard ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY})
+endif()
install(TARGETS doxywizard DESTINATION bin)
diff --git a/doc/doxygen_manual.css b/doc/doxygen_manual.css
index 51cc8b0..87d560c 100644
--- a/doc/doxygen_manual.css
+++ b/doc/doxygen_manual.css
@@ -1554,7 +1554,7 @@ table.markdownTable {
}
table.markdownTable td, table.markdownTable th {
- border: 1px solid ##37;
+ border: 1px solid #2D4068;
padding: 3px 7px 2px;
}
diff --git a/doc/formulas.doc b/doc/formulas.doc
index ee4ff61..520f089 100644
--- a/doc/formulas.doc
+++ b/doc/formulas.doc
@@ -17,9 +17,8 @@
/*! \page formulas Including formulas
Doxygen allows you to put \LaTeX formulas in the
-output (this works only for the HTML and \LaTeX output,
-not for the RTF nor for the man page output). To be able to include
-formulas (as images) in the HTML documentation, you will also need to
+output (this works only for the HTML, \LaTeX and RTF output. To be able to include
+formulas (as images) in the HTML and RTF documentation, you will also need to
have the following tools installed
<ul>
<li>\c latex: the \LaTeX compiler, needed to parse the formulas.
@@ -101,8 +100,8 @@ the section should contain valid command for the specific environment.
\warning Currently, doxygen is not very fault tolerant in recovering
from typos in formulas. It may be necessary to remove the
-file <code>formula.repository</code> that is written to the html directory to
-get rid of an incorrect formula.
+files <code>formula.repository</code> that are written to the html and rtf directories to
+get rid of an incorrect formula as well as the <code>form_*</code> files.
\htmlonly
Go to the <a href="tables.html">next</a> section or return to the
diff --git a/examples/include.cpp b/examples/include.cpp
index ba8c054..d9ea5ea 100644
--- a/examples/include.cpp
+++ b/examples/include.cpp
@@ -8,7 +8,7 @@ class Include_Test
void example();
};
-/*! \page example
+/*! \page pag_example
* \dontinclude include_test.cpp
* Our main function starts like this:
* \skip main
diff --git a/qtools/qdict.doc b/qtools/qdict.doc
index d2e26c0..a414d3f 100644
--- a/qtools/qdict.doc
+++ b/qtools/qdict.doc
@@ -171,7 +171,7 @@
Setting \e size to a suitably large \link primes.html prime
number\endlink (equal to or greater than the expected number of entries)
- makes the hash distribution better and hence the loopup faster.
+ makes the hash distribution better and hence the lookup faster.
Setting \e caseSensitive to TRUE will treat "abc" and "Abc" as different
keys. Setting it to FALSE will make the dictionary ignore case.
diff --git a/qtools/qgdict.cpp b/qtools/qgdict.cpp
index 4fe1a26..c8d8fbd 100644
--- a/qtools/qgdict.cpp
+++ b/qtools/qgdict.cpp
@@ -1101,7 +1101,7 @@ QDataStream& QGDict::write( QDataStream &s ) const
QGDictIterator::QGDictIterator( const QGDict &d )
{
dict = (QGDict *)&d; // get reference to dict
- toFirst(); // set to first noe
+ toFirst(); // set to first node
if ( !dict->iterators ) {
dict->iterators = new QGDItList; // create iterator list
CHECK_PTR( dict->iterators );
diff --git a/qtools/qintdict.doc b/qtools/qintdict.doc
index e027fb2..90625da 100644
--- a/qtools/qintdict.doc
+++ b/qtools/qintdict.doc
@@ -166,7 +166,7 @@
Setting \e size to a suitably large \link primes.html prime number\endlink
(equal to or greater than the expected number of entries) makes the hash
- distribution better and hence the loopup faster.
+ distribution better and hence the lookup faster.
*/
/*!
diff --git a/qtools/qptrdict.doc b/qtools/qptrdict.doc
index bff6a15..633536c 100644
--- a/qtools/qptrdict.doc
+++ b/qtools/qptrdict.doc
@@ -172,7 +172,7 @@
Setting \e size to a suitably large \link primes.html prime number\endlink
(equal to or greater than the expected number of entries) makes the hash
- distribution better and hence the loopup faster.
+ distribution better and hence the lookup faster.
*/
/*!
diff --git a/qtools/qstring.cpp b/qtools/qstring.cpp
index 30bb05b..fe478bd 100644
--- a/qtools/qstring.cpp
+++ b/qtools/qstring.cpp
@@ -10768,7 +10768,7 @@ otherwise.
These functions are: isNull() (returns TRUE if the character is
U+0000), isPrint() (TRUE if the character is any sort of printable
-character, including whitespace), isPunct() (any sort of punctation),
+character, including whitespace), isPunct() (any sort of punctuation),
isMark() (Unicode Marks), isLetter (letters), isNumber() (any sort of
numeric characters), isLetterOrNumber(), and isDigit() (decimal digits).
All of these are wrappers around category(), which returns the
diff --git a/qtools/qvaluelist.doc b/qtools/qvaluelist.doc
index 918d08e..f7a0dde 100644
--- a/qtools/qvaluelist.doc
+++ b/qtools/qvaluelist.doc
@@ -199,7 +199,7 @@
\fn QValueList::~QValueList()
Destroys the list. References to the values in the list and all iterators
of this list become invalidated. Since QValueList is highly tuned for performance
- you wont see warnings if you use invalid iterators,
+ you won't see warnings if you use invalid iterators,
because it is impossible for
an iterator to check whether it is valid or not.
*/
diff --git a/src/clangparser.cpp b/src/clangparser.cpp
index 77151d6..2ea15ee 100644
--- a/src/clangparser.cpp
+++ b/src/clangparser.cpp
@@ -4,6 +4,7 @@
#if USE_LIBCLANG
#include <clang-c/Index.h>
+#include "clang/Tooling/CompilationDatabase.h"
#include "clang/Tooling/Tooling.h"
#include <qfileinfo.h>
#include <stdlib.h>
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 4ce48a7..4977760 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -440,7 +440,7 @@ void ClassDef::internalInsertMember(MemberDef *md,
if (getLanguage()==SrcLangExt_VHDL)
{
- QCString title=VhdlDocGen::trVhdlType(md->getMemberSpecifiers(),FALSE);
+ QCString title=theTranslator->trVhdlType(md->getMemberSpecifiers(),FALSE);
if (!m_impl->vhdlSummaryTitles.find(title))
{
m_impl->vhdlSummaryTitles.append(title,new QCString(title));
@@ -1882,7 +1882,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
}
else if (lang==SrcLangExt_VHDL)
{
- ol.parseText(VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE));
+ ol.parseText(theTranslator->trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE));
}
else
{
@@ -1935,21 +1935,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
if (rootNode && !rootNode->isEmpty())
{
ol.startMemberDescription(anchor());
-
- ol.pushGeneratorState();
- ol.disableAll();
- ol.enable(OutputGenerator::RTF);
- ol.writeString("{");
- ol.popGeneratorState();
-
ol.writeDoc(rootNode,this,0);
-
- ol.pushGeneratorState();
- ol.disableAll();
- ol.enable(OutputGenerator::RTF);
- ol.writeString("\\par}");
- ol.popGeneratorState();
-
if (isLinkableInProject())
{
writeMoreLink(ol,anchor());
@@ -2122,7 +2108,7 @@ QCString ClassDef::title() const
}
else if (lang==SrcLangExt_VHDL)
{
- pageTitle = VhdlDocGen::getClassTitle(this)+" Reference";
+ pageTitle = theTranslator->trCustomReference(VhdlDocGen::getClassTitle(this));
}
else if (isJavaEnum())
{
@@ -2474,7 +2460,7 @@ void ClassDef::writeMemberList(OutputList &ol)
QStrList sl;
if (lang==SrcLangExt_VHDL)
{
- sl.append(VhdlDocGen::trVhdlType(md->getMemberSpecifiers())); //append vhdl type
+ sl.append(theTranslator->trVhdlType(md->getMemberSpecifiers(),TRUE)); //append vhdl type
}
else if (md->isFriend()) sl.append("friend");
else if (md->isRelated()) sl.append("related");
diff --git a/src/code.l b/src/code.l
index 74b360f..5c9e289 100644
--- a/src/code.l
+++ b/src/code.l
@@ -3573,6 +3573,9 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
endFontClass();
}
}
+<SkipComment>[^\*\n]+ {
+ g_code->codify(yytext);
+ }
<*>"/*" {
startFontClass("comment");
g_code->codify(yytext);
diff --git a/src/commentcnv.l b/src/commentcnv.l
index 89d2fea..10dab28 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -1068,7 +1068,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
{
CondCtx *ctx = g_condStack.pop();
QCString sectionInfo = " ";
- if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label %s ",ctx->sectionId.data());
+ if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label '%s' ",ctx->sectionId.stripWhiteSpace().data());
warn(g_fileName,ctx->lineNr,"Conditional section%sdoes not have "
"a corresponding \\endcond command within this file.",sectionInfo.data());
}
diff --git a/src/commentscan.l b/src/commentscan.l
index 0db1bf8..67bd9b4 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -549,7 +549,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,
if (docEntry->sli)
{
QListIterator<ListItemInfo> slii(*docEntry->sli);
- for (slii.toFirst();(lii=slii.current());++slii)
+ for (slii.toLast();(lii=slii.current());--slii)
{
if (qstrcmp(lii->type,listName)==0)
{
diff --git a/src/config.xml b/src/config.xml
index fa0ae26..2dcc0f4 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -2533,13 +2533,14 @@ EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
]]>
</docs>
</option>
- <option type='string' id='LATEX_CMD_NAME' format='file' defval='latex' depends='GENERATE_LATEX'>
+ <option type='string' id='LATEX_CMD_NAME' format='file' defval='' depends='GENERATE_LATEX'>
<docs>
<![CDATA[
The \c LATEX_CMD_NAME tag can be used to specify the \f$\mbox{\LaTeX}\f$ command name to be invoked.
- <br>Note that when enabling \ref cfg_use_pdflatex "USE_PDFLATEX" this option is only used for
- generating bitmaps for formulas in the HTML output, but not in the
- \c Makefile that is written to the output directory.
+ <br>Note that when not enabling \ref cfg_use_pdflatex "USE_PDFLATEX" the default is \c latex when
+ enabling \ref cfg_use_pdflatex "USE_PDFLATEX" the default is \c pdflatex and when in the later case
+ \c latex is chosen this is overwritten by \c pdflatex. For specific output languages the default can
+ have been set differently, this depends on the implementation of the output language.
]]>
</docs>
</option>
diff --git a/src/context.cpp b/src/context.cpp
index 4584920..c9a6bb3 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -617,7 +617,7 @@ class TranslateContext::Private
TemplateVariant classes() const
{
return theTranslator->trClasses();
- // TODO: VHDL: trVhdlType(VhdlDocGen::ENTITY,FALSE)
+ // TODO: VHDL: theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE)
// TODO: Fortran: trDataTypes()
}
TemplateVariant classList() const
@@ -927,8 +927,8 @@ class TranslateContext::Private
{
static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
- return fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ return fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? theTranslator->trFunctionAndProc() :
theTranslator->trFunctions();
}
TemplateVariant variables() const
@@ -2816,7 +2816,7 @@ class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Pri
QCString title = theTranslator->trFunctions();
SrcLangExt lang = m_namespaceDef->getLanguage();
if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprograms();
- else if (lang==SrcLangExt_VHDL) title=VhdlDocGen::trFunctionAndProc();
+ else if (lang==SrcLangExt_VHDL) title=theTranslator->trFunctionAndProc();
return getMemberList(getCache().functions,MemberListType_decFuncMembers,title);
}
TemplateVariant variables() const
@@ -3249,7 +3249,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
QCString title = theTranslator->trFunctions();
SrcLangExt lang = m_fileDef->getLanguage();
if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprograms();
- else if (lang==SrcLangExt_VHDL) title=VhdlDocGen::trFunctionAndProc();
+ else if (lang==SrcLangExt_VHDL) title=theTranslator->trFunctionAndProc();
return getMemberList(getCache().functions,MemberListType_decFuncMembers,title);
}
TemplateVariant variables() const
@@ -5489,7 +5489,7 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
QCString title = theTranslator->trFunctions();
SrcLangExt lang = m_groupDef->getLanguage();
if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprograms();
- else if (lang==SrcLangExt_VHDL) title=VhdlDocGen::trFunctionAndProc();
+ else if (lang==SrcLangExt_VHDL) title=theTranslator->trFunctionAndProc();
return getMemberList(getCache().functions,MemberListType_decFuncMembers,title);
}
TemplateVariant variables() const
@@ -5828,7 +5828,7 @@ class ClassIndexContext::Private
}
else if (vhdlOpt)
{
- return VhdlDocGen::trDesignUnits();
+ return theTranslator->trDesignUnits();
}
else
{
@@ -6022,7 +6022,7 @@ class ClassHierarchyContext::Private
static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
if (vhdlOpt)
{
- return VhdlDocGen::trDesignUnitHierarchy();
+ return theTranslator->trDesignUnitHierarchy();
}
else
{
@@ -6780,7 +6780,7 @@ class ClassTreeContext::Private
}
else if (vhdlOpt)
{
- return VhdlDocGen::trDesignUnitList();
+ return theTranslator->trDesignUnitList();
}
else
{
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 215439a..205e818 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -3505,16 +3505,36 @@ DocHtmlCell::Alignment DocHtmlCell::alignment() const
{
HtmlAttribList attrs = attribs();
uint i;
- for (i=0; i<attrs.count(); ++i)
+ for (i=0; i<attrs.count(); ++i)
{
if (attrs.at(i)->name.lower()=="align")
{
- if (attrs.at(i)->value.lower()=="center")
+ if (attrs.at(i)->value.lower()=="center")
return Center;
- else if (attrs.at(i)->value.lower()=="right")
+ else if (attrs.at(i)->value.lower()=="right")
return Right;
else return Left;
}
+ else if (attrs.at(i)->name.lower()=="class")
+ {
+ if (attrs.at(i)->value.lower()=="markdowntableheadcenter")
+ return Center;
+ else if (attrs.at(i)->value.lower()=="markdowntableheadright")
+ return Right;
+ else if (attrs.at(i)->value.lower()=="markdowntableheadleft")
+ return Left;
+ else if (attrs.at(i)->value.lower()=="markdowntableheadnone")
+ return Center;
+ else if (attrs.at(i)->value.lower()=="markdowntablebodycenter")
+ return Center;
+ else if (attrs.at(i)->value.lower()=="markdowntablebodyright")
+ return Right;
+ else if (attrs.at(i)->value.lower()=="markdowntablebodyleft")
+ return Left;
+ else if (attrs.at(i)->value.lower()=="markdowntablebodynone")
+ return Left;
+ else return Left;
+ }
}
return Left;
}
@@ -5037,25 +5057,27 @@ void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type
void DocPara::handleImage(const QCString &cmdName)
{
+ QCString saveCmdName = cmdName;
+
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
- qPrint(cmdName));
+ qPrint(saveCmdName));
return;
}
tok=doctokenizerYYlex();
if (tok!=TK_WORD && tok!=TK_LNKWORD)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
+ tokToString(tok),qPrint(saveCmdName));
return;
}
tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
- qPrint(cmdName));
+ qPrint(saveCmdName));
return;
}
DocImage::Type t;
@@ -5066,9 +5088,9 @@ void DocPara::handleImage(const QCString &cmdName)
else if (imgType=="rtf") t=DocImage::Rtf;
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"image type %s specified as the first argument of "
- "%s is not valid",
- qPrint(imgType),qPrint(cmdName));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"output format %s specified as the first argument of "
+ "%s command is not valid",
+ qPrint(imgType),qPrint(saveCmdName));
return;
}
doctokenizerYYsetStateFile();
@@ -5077,7 +5099,7 @@ void DocPara::handleImage(const QCString &cmdName)
if (tok!=TK_WORD)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
+ tokToString(tok),qPrint(saveCmdName));
return;
}
HtmlAttribList attrList;
diff --git a/src/dot.cpp b/src/dot.cpp
index eeb8b8b..5adc2ab 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -1878,10 +1878,10 @@ void DotNode::writeBox(FTextStream &t,
<< m_url.right(m_url.length()-anchorPos) << "\"";
}
}
- if (!m_tooltip.isEmpty())
- {
- t << ",tooltip=\"" << escapeTooltip(m_tooltip) << "\"";
- }
+ }
+ if (!m_tooltip.isEmpty())
+ {
+ t << ",tooltip=\"" << escapeTooltip(m_tooltip) << "\"";
}
t << "];" << endl;
}
@@ -3483,9 +3483,10 @@ DotInclDepGraph::DotInclDepGraph(FileDef *fd,bool inverse)
m_inclDepFileName = fd->includeDependencyGraphFileName();
m_inclByDepFileName = fd->includedByDependencyGraphFileName();
QCString tmp_url=fd->getReference()+"$"+fd->getOutputFileBase();
+ QCString tooltip = fd->briefDescriptionAsTooltip();
m_startNode = new DotNode(m_curNodeNumber++,
fd->docName(),
- "",
+ tooltip,
tmp_url.data(),
TRUE // root node
);
@@ -3812,9 +3813,10 @@ DotCallGraph::DotCallGraph(MemberDef *md,bool inverse)
{
name = md->qualifiedName();
}
+ QCString tooltip = md->briefDescriptionAsTooltip();
m_startNode = new DotNode(m_curNodeNumber++,
linkToText(md->getLanguage(),name,FALSE),
- "",
+ tooltip,
uniqueId.data(),
TRUE // root node
);
@@ -4336,7 +4338,8 @@ DotGroupCollaboration::DotGroupCollaboration(GroupDef* gd)
{
QCString tmp_url = gd->getReference()+"$"+gd->getOutputFileBase();
m_usedNodes = new QDict<DotNode>(1009);
- m_rootNode = new DotNode(m_curNodeNumber++, gd->groupTitle(), "", tmp_url, TRUE );
+ QCString tooltip = gd->briefDescriptionAsTooltip();
+ m_rootNode = new DotNode(m_curNodeNumber++, gd->groupTitle(), tooltip, tmp_url, TRUE );
m_rootNode->markAsVisible();
m_usedNodes->insert(gd->name(), m_rootNode );
m_edges.setAutoDelete(TRUE);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index f0140e0..d209379 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -9574,7 +9574,7 @@ int readDir(QFileInfo *fi,
if (fi->isSymLink())
{
dirName = resolveSymlink(dirName.data());
- if (dirName.isEmpty()) return 0; // recusive symlink
+ if (dirName.isEmpty()) return 0; // recursive symlink
if (g_pathsVisited.find(dirName)) return 0; // already visited path
g_pathsVisited.insert(dirName,(void*)0x8);
}
@@ -9752,14 +9752,17 @@ int readFileOrDirectory(const char *s,
//----------------------------------------------------------------------------
-void readFormulaRepository()
+void readFormulaRepository(QCString dir, bool cmp)
{
- QFile f(Config_getString(HTML_OUTPUT)+"/formula.repository");
+ static int current_repository = 0;
+ int new_repository = 0;
+ QFile f(dir+"/formula.repository");
if (f.open(IO_ReadOnly)) // open repository
{
msg("Reading formula repository...\n");
QTextStream t(&f);
QCString line;
+ Formula *f;
while (!t.eof())
{
line=t.readLine().utf8();
@@ -9773,14 +9776,42 @@ void readFormulaRepository()
{
QCString formName = line.left(se);
QCString formText = line.right(line.length()-se-1);
- Formula *f=new Formula(formText);
- Doxygen::formulaList->setAutoDelete(TRUE);
- Doxygen::formulaList->append(f);
- Doxygen::formulaDict->insert(formText,f);
- Doxygen::formulaNameDict->insert(formName,f);
+ if (cmp)
+ {
+ if ((f=Doxygen::formulaDict->find(formText))==0)
+ {
+ err("discrepancy between formula repositories! Remove "
+ "formula.repository and from_* files from output directories.");
+ exit(1);
+ }
+ QCString formLabel;
+ formLabel.sprintf("\\form#%d",f->getId());
+ if (formLabel != formName)
+ {
+ err("discrepancy between formula repositories! Remove "
+ "formula.repository and from_* files from output directories.");
+ exit(1);
+ }
+ new_repository++;
+ }
+ else
+ {
+ f=new Formula(formText);
+ Doxygen::formulaList->setAutoDelete(TRUE);
+ Doxygen::formulaList->append(f);
+ Doxygen::formulaDict->insert(formText,f);
+ Doxygen::formulaNameDict->insert(formName,f);
+ current_repository++;
+ }
}
}
}
+ if (cmp && (current_repository != new_repository))
+ {
+ err("size discrepancy between formula repositories! Remove "
+ "formula.repository and from_* files from output directories.");
+ exit(1);
+ }
}
//----------------------------------------------------------------------------
@@ -11070,7 +11101,12 @@ void parseInput()
if (Config_getBool(GENERATE_HTML))
{
- readFormulaRepository();
+ readFormulaRepository(Config_getString(HTML_OUTPUT));
+ }
+ if (Config_getBool(GENERATE_RTF))
+ {
+ // in case GENERRATE_HTML is set we just have to compare, both repositories should be identical
+ readFormulaRepository(Config_getString(RTF_OUTPUT),Config_getBool(GENERATE_HTML));
}
/**************************************************************************
@@ -11558,6 +11594,12 @@ void generateOutput()
Doxygen::formulaList->generateBitmaps(Config_getString(HTML_OUTPUT));
g_s.end();
}
+ if (Doxygen::formulaList->count()>0 && generateRtf)
+ {
+ g_s.begin("Generating bitmaps for formulas in RTF...\n");
+ Doxygen::formulaList->generateBitmaps(Config_getString(RTF_OUTPUT));
+ g_s.end();
+ }
if (Config_getBool(SORT_GROUP_NAMES))
{
diff --git a/src/doxygen.h b/src/doxygen.h
index b3467c1..7bd05a4 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -159,7 +159,7 @@ void searchInputFiles(StringList &inputFiles);
void parseInput();
void generateOutput();
void readAliases();
-void readFormulaRepository();
+void readFormulaRepository(QCString dir, bool cmp = FALSE);
void cleanUpDoxygen();
int readFileOrDirectory(const char *s,
FileNameList *fnList,
diff --git a/src/doxygen.md b/src/doxygen.md
index ccb47b9..17144ec 100644
--- a/src/doxygen.md
+++ b/src/doxygen.md
@@ -9,7 +9,7 @@ links to the relevant parts of the code. This document is intended for
developers who want to work on doxygen. Users of doxygen are referred to the
[User Manual](http://www.doxygen.org/manual.html).
-The generic starting point of the application is of cource the main() function.
+The generic starting point of the application is of course the main() function.
Configuration options
---------------------
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 74c4c67..e2df9be 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -1420,7 +1420,6 @@ bool FileDef::generateSourceFile() const
{
static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
static bool verbatimHeaders = Config_getBool(VERBATIM_HEADERS);
- QCString extension = name().right(4);
return !isReference() &&
(sourceBrowser ||
(verbatimHeaders && guessSection(name())==Entry::HEADER_SEC)
diff --git a/src/formula.cpp b/src/formula.cpp
index 6fe617d..46e2075 100644
--- a/src/formula.cpp
+++ b/src/formula.cpp
@@ -96,8 +96,7 @@ void FormulaList::generateBitmaps(const char *path)
{
//printf("Running latex...\n");
//system("latex _formulas.tex </dev/null >/dev/null");
- QCString latexCmd = Config_getString(LATEX_CMD_NAME);
- if (latexCmd.isEmpty()) latexCmd="latex";
+ QCString latexCmd = "latex";
portable_sysTimerStart();
if (portable_system(latexCmd,"_formulas.tex")!=0)
{
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 14268cf..e64c38e 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -687,7 +687,7 @@ NUM_TYPE (complex|integer|logical|real)
LOG_OPER (\.and\.|\.eq\.|\.eqv\.|\.ge\.|\.gt\.|\.le\.|\.lt\.|\.ne\.|\.neqv\.|\.or\.|\.not\.)
KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
-TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE|CLASS|PROCEDURE)
+TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE|CLASS|PROCEDURE|ENUMERATOR)
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
ATTR_SPEC (IMPLICIT|ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|(NON_)?RECURSIVE|PURE|IMPURE|ELEMENTAL|VALUE|NOPASS|DEFERRED|CONTIGUOUS|VOLATILE)
@@ -697,7 +697,8 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION
FLOW (DO|SELECT|CASE|SELECT{BS}(CASE|TYPE)|WHERE|IF|THEN|ELSE|WHILE|FORALL|ELSEWHERE|ELSEIF|RETURN|CONTINUE|EXIT|GO{BS}TO)
COMMANDS (FORMAT|CONTAINS|MODULE{BS_}PROCEDURE|WRITE|READ|ALLOCATE|ALLOCATED|ASSOCIATED|PRESENT|DEALLOCATE|NULLIFY|SIZE|INQUIRE|OPEN|CLOSE|FLUSH|DATA|COMMON)
IGNORE (CALL)
-PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON_)?RECURSIVE|IMPURE|PURE|ELEMENTAL)?
+PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON_)?RECURSIVE|IMPURE|PURE|ELEMENTAL)?0
+LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")"
/* | */
@@ -778,12 +779,12 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON
BEGIN(Use);
}
<Use>"ONLY" { // TODO: rename
- startFontClass("keywordtype");
- codifyLines(yytext);
- endFontClass();
+ startFontClass("keywordtype");
+ codifyLines(yytext);
+ endFontClass();
yy_push_state(YY_START);
- BEGIN(UseOnly);
- }
+ BEGIN(UseOnly);
+ }
<Use>{ID} {
QCString tmp = yytext;
tmp = tmp.lower();
@@ -844,6 +845,20 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON
BEGIN(ClassName);
if (!qstricmp(yytext,"module")) currentModule="module";
}
+<Start>("enum")/{BS_}|{BS}{COMMA}{BS}{LANGUAGE_BIND_SPEC}|\n { //
+ startScope();
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ yy_push_state(YY_START);
+ BEGIN(ClassName);
+ currentClass="class";
+ }
+<*>{LANGUAGE_BIND_SPEC} { //
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ }
<Start>("type")/{BS_}|({COMMA}({ACCESS_SPEC}|ABSTRACT|EXTENDS))|\n { //
startScope();
startFontClass("keyword");
@@ -869,15 +884,19 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON
}
<ClassName>\n { // interface may be without name
yy_pop_state();
- YY_FTN_REJECT;
- }
+ YY_FTN_REJECT;
+ }
+<Start>^{BS}"end"({BS_}"enum").* { // just reset currentClass, rest is done in following rule
+ currentClass=0;
+ YY_FTN_REJECT;
+ }
<Start>^{BS}"end"({BS_}"type").* { // just reset currentClass, rest is done in following rule
currentClass=0;
- YY_FTN_REJECT;
+ YY_FTN_REJECT;
}
<Start>^{BS}"end"({BS_}"module").* { // just reset currentModule, rest is done in following rule
currentModule=0;
- YY_FTN_REJECT;
+ YY_FTN_REJECT;
}
/*-------- subprog definition -------------------------------------*/
<Start>({PREFIX}{BS_})?{TYPE_SPEC}{BS_}({PREFIX}{BS_})?{BS}/{SUBPROG}{BS_} { // TYPE_SPEC is for old function style function result
@@ -910,7 +929,7 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON
yy_pop_state();
YY_FTN_RESET
}
-<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface")?{BS} { // Fortran subroutine or function ends
+<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"enum"|"type"|"interface")?{BS} { // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl;
endScope();
startFontClass("keyword");
@@ -923,7 +942,7 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON
generateLink(*g_code,yytext);
yy_pop_state();
}
-<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface"){BS}/(\n|!) { // Fortran subroutine or function ends
+<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"enum"|"type"|"interface"){BS}/(\n|!) { // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl;
endScope();
startFontClass("keyword");
@@ -966,8 +985,11 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON
g_code->codify(yytext);
endFontClass();
}
- else if (g_currentMemberDef && ((g_currentMemberDef->isFunction() && (g_currentMemberDef->typeString() != QCString("subroutine") || inTypeDecl)) ||
- g_currentMemberDef->isVariable()))
+ else if (g_currentMemberDef &&
+ ((g_currentMemberDef->isFunction() && (g_currentMemberDef->typeString()!=QCString("subroutine") || inTypeDecl)) ||
+ g_currentMemberDef->isVariable() || g_currentMemberDef->isEnumValue()
+ )
+ )
{
generateLink(*g_code, yytext);
}
@@ -1050,11 +1072,20 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON
// fixed form continuation line
YY_FTN_REJECT;
}
+ else if (QCString(yytext).stripWhiteSpace().lower() == "type")
+ {
+ yy_push_state(YY_START);
+ BEGIN(Declaration);
+ startFontClass("keywordtype");
+ g_code->codify(QCString(yytext).stripWhiteSpace());
+ endFontClass();
+ g_code->codify(yytext + 4);
+ }
else
{
- g_insideBody=TRUE;
+ g_insideBody=TRUE;
generateLink(*g_code, yytext);
- g_insideBody=FALSE;
+ g_insideBody=FALSE;
}
}
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 774251b..d0503c2 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -164,6 +164,7 @@ static Entry* global_root = 0 ;
static Entry* file_root = 0 ;
static Entry* current = 0 ;
static Entry* last_entry = 0 ;
+static Entry* last_enum = 0 ;
static ScanVar v_type = V_IGNORE; // type of parsed variable
static QList<Entry> moduleProcedures; // list of all interfaces which contain unresolved
// module procedures
@@ -198,8 +199,8 @@ static SymbolModifiers currentModifiers;
//! Holds program scope->symbol name->symbol modifiers.
static QMap<Entry*,QMap<QCString,SymbolModifiers> > modifiers;
-static Entry *global_scope = NULL;
-
+static Entry *global_scope = NULL;
+static int anonCount = 0 ;
//-----------------------------------------------------------------------------
static int yyread(char *buf,int max_size);
@@ -228,6 +229,7 @@ static QCString extractFromParens(const QCString name);
static CommentInPrepass* locatePrepassComment(int from, int to);
static void updateVariablePrepassComment(int from, int to);
static void newLine();
+static void initEntry();
//-----------------------------------------------------------------------------
#undef YY_INPUT
@@ -263,7 +265,7 @@ NUM_TYPE (complex|integer|logical|real)
LOG_OPER (\.and\.|\.eq\.|\.eqv\.|\.ge\.|\.gt\.|\.le\.|\.lt\.|\.ne\.|\.neqv\.|\.or\.|\.not\.)
KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
-TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE{ARGS}|CLASS{ARGS}|PROCEDURE{ARGS}?)
+TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|ENUMERATOR|{CHAR}|TYPE{ARGS}|CLASS{ARGS}|PROCEDURE{ARGS}?)
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
ATTR_SPEC (EXTERNAL|ALLOCATABLE|DIMENSION{ARGS}|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE|CONTIGUOUS|VOLATILE|VALUE)
@@ -300,6 +302,7 @@ SCOPENAME ({ID}{BS}"::"{BS})*
%x Variable
%x Initialization
%x ArrayInitializer
+%x Enum
%x Typedef
%x TypedefBody
%x TypedefBodyContains
@@ -726,8 +729,17 @@ private {
{ID} {
}
}
-<Start,ModuleBody,TypedefBody,SubprogBody>{
+<Start,ModuleBody,TypedefBody,SubprogBody,Enum>{
^{BS}{TYPE_SPEC}/{SEPARATE} {
+ last_enum = 0;
+ if (YY_START == Enum)
+ {
+ argType = "@"; // enum marker
+ }
+ else
+ {
+ argType = QCString(yytext).simplifyWhiteSpace().lower();
+ }
current->bodyLine = yyLineNr + 1;
current->endBodyLine = yyLineNr + lineCountPrepass;
/* variable declaration starts */
@@ -736,7 +748,6 @@ private {
addModule(NULL);
yy_push_state(ModuleBody); //anon program
}
- argType = QCString(yytext).simplifyWhiteSpace().lower();
yy_push_state(AttributeList);
}
/* Dimitri: macro expansion should already be done during preprocessing not here!
@@ -834,17 +845,30 @@ private {
modifiers[current_root][name.lower()] |= currentModifiers;
argName= name;
- v_type= V_IGNORE;
- if (!argType.isEmpty() && current_root->section!=Entry::FUNCTION_SEC)
- { // new variable entry
- v_type = V_VARIABLE;
+ v_type= V_IGNORE;
+ if (!argType.isEmpty() && current_root->section!=Entry::FUNCTION_SEC)
+ { // new variable entry
+ v_type = V_VARIABLE;
current->section = Entry::VARIABLE_SEC;
- current->name = argName;
- current->type = argType;
- current->fileName = yyFileName;
- current->bodyLine = yyLineNr; // used for source reference
+ current->name = argName;
+ current->type = argType;
+ current->fileName = yyFileName;
+ current->bodyLine = yyLineNr; // used for source reference
current->startLine = yyLineNr;
- addCurrentEntry(1);
+ if (argType == "@")
+ {
+ current_root->addSubEntry(current);
+ current = new Entry(*current);
+ // add to the scope surrounding the enum (copy!)
+ current_root->parent()->addSubEntry(current);
+ last_enum = current;
+ current = new Entry ;
+ initEntry();
+ }
+ else
+ {
+ addCurrentEntry(1);
+ }
}
else if (!argType.isEmpty())
{ // declaration of parameter list: add type for corr. parameter
@@ -980,19 +1004,72 @@ private {
{
updateVariablePrepassComment(yyColNr-(int)yyleng, yyColNr);
yy_pop_state(); // end initialization
- if (v_type == V_VARIABLE) last_entry->initializer= initializer;
+ if (last_enum)
+ {
+ last_enum->initializer= initializer;
+ }
+ else
+ {
+ if (v_type == V_VARIABLE) last_entry->initializer= initializer;
+ }
}
else
initializer+=", ";
}
<Initialization>"\n"|"!" { //|
yy_pop_state(); // end initialization
- if (v_type == V_VARIABLE) last_entry->initializer= initializer;
+ if (last_enum)
+ {
+ last_enum->initializer= initializer;
+ }
+ else
+ {
+ if (v_type == V_VARIABLE) last_entry->initializer= initializer;
+ }
yyColNr -= 1;
unput(*yytext);
}
<Initialization>. { initializer+=yytext; }
+<*>{BS}"enum"{BS}","{BS}"bind"{BS}"("{BS}"c"{BS}")"{BS} {
+ if(YY_START == Start)
+ {
+ addModule(NULL);
+ yy_push_state(ModuleBody); //anon program
+ }
+
+ yy_push_state(Enum);
+ current->protection = defaultProtection;
+ typeProtection = defaultProtection;
+ typeMode = true;
+
+ current->spec |= Entry::Struct;
+ current->name.resize(0);
+ current->args.resize(0);
+ current->name.sprintf("@%d",anonCount++);
+
+ current->section = Entry::ENUM_SEC;
+ current->fileName = yyFileName;
+ current->startLine = yyLineNr;
+ current->bodyLine = yyLineNr;
+ if ((current_root) &&
+ (current_root->section == Entry::CLASS_SEC
+ || current_root->section == Entry::NAMESPACE_SEC))
+ {
+ current->name = current_root->name + "::" + current->name;
+ }
+
+ addCurrentEntry(1);
+ startScope(last_entry);
+ BEGIN( Enum ) ;
+ }
+<Enum>"end"{BS}"enum" {
+ last_entry->parent()->endBodyLine = yyLineNr;
+ if (!endScope(current_root))
+ yyterminate();
+ typeMode = false;
+ yy_pop_state();
+ }
/*------ fortran subroutine/function handling ------------------------------------------------------------*/
/* Start is initial condition */
@@ -1133,6 +1210,7 @@ private {
{
Entry *tmp_entry = current;
current = last_entry; // temporarily switch to the previous entry
+ if (last_enum) current = last_enum;
handleCommentBlock(docBlock,TRUE);
current=tmp_entry;
}
@@ -1148,7 +1226,7 @@ private {
docBlock.resize(0);
}
-<Start,SubprogBody,ModuleBody,TypedefBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains,TypedefBodyContains>"!>" {
+<Start,SubprogBody,ModuleBody,TypedefBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains,TypedefBodyContains,Enum>"!>" {
yy_push_state(YY_START);
current->docLine = yyLineNr;
docBlockJavaStyle = FALSE;
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 14c94a3..d71c48f 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -257,7 +257,7 @@ void FTVHelp::generateIndent(FTextStream &t, FTVNode *n,bool opened)
while (p) { indent++; p=p->parent; }
if (n->isDir)
{
- QCString dir = opened ? "&#9660;" : "&#9654;";
+ QCString dir = opened ? "&#9660;" : "&#9658;";
t << "<span style=\"width:" << (indent*16) << "px;display:inline-block;\">&#160;</span>"
<< "<span id=\"arr_" << generateIndentLabel(n,0) << "\" class=\"arrow\" ";
t << "onclick=\"toggleFolder('" << generateIndentLabel(n,0) << "')\"";
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index accc6a0..740b2f5 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -1428,13 +1428,7 @@ void HtmlGenerator::startMemberItem(const char *anchor,int annoType,const char *
t << " inherit " << inheritId;
}
t << "\">";
- switch(annoType)
- {
- case 0: t << "<td class=\"memItemLeft\" align=\"right\" valign=\"top\">"; break;
- case 1: t << "<td class=\"memItemLeft\" >"; break;
- case 2: t << "<td class=\"memItemLeft\" valign=\"top\">"; break;
- default: t << "<td class=\"memTemplParams\" colspan=\"2\">"; break;
- }
+ insertMemberAlignLeft(annoType, true);
}
void HtmlGenerator::endMemberItem()
@@ -1466,7 +1460,19 @@ void HtmlGenerator::insertMemberAlign(bool templ)
t << "&#160;</td><td class=\"" << className << "\" valign=\"bottom\">";
}
-void HtmlGenerator::startMemberDescription(const char *anchor,const char *inheritId)
+void HtmlGenerator::insertMemberAlignLeft(int annoType, bool initTag)
+{
+ if (!initTag) t << "&#160;</td>";
+ switch(annoType)
+ {
+ case 0: t << "<td class=\"memItemLeft\" align=\"right\" valign=\"top\">"; break;
+ case 1: t << "<td class=\"memItemLeft\" >"; break;
+ case 2: t << "<td class=\"memItemLeft\" valign=\"top\">"; break;
+ default: t << "<td class=\"memTemplParams\" colspan=\"2\">"; break;
+ }
+}
+
+void HtmlGenerator::startMemberDescription(const char *anchor,const char *inheritId, bool typ)
{
DBG_HTML(t << "<!-- startMemberDescription -->" << endl)
if (m_emptySection)
@@ -1479,7 +1485,10 @@ void HtmlGenerator::startMemberDescription(const char *anchor,const char *inheri
{
t << " inherit " << inheritId;
}
- t << "\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">";
+ t << "\">";
+ t << "<td class=\"mdescLeft\">&#160;</td>";
+ if (typ) t << "<td class=\"mdescLeft\">&#160;</td>";
+ t << "<td class=\"mdescRight\">";;
}
void HtmlGenerator::endMemberDescription()
@@ -1505,7 +1514,7 @@ void HtmlGenerator::endMemberSections()
}
}
-void HtmlGenerator::startMemberHeader(const char *anchor)
+void HtmlGenerator::startMemberHeader(const char *anchor, int typ)
{
DBG_HTML(t << "<!-- startMemberHeader -->" << endl)
if (!m_emptySection)
@@ -1518,7 +1527,7 @@ void HtmlGenerator::startMemberHeader(const char *anchor)
t << "<table class=\"memberdecls\">" << endl;
m_emptySection=FALSE;
}
- t << "<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\">";
+ t << "<tr class=\"heading\"><td colspan=\"" << typ << "\"><h2 class=\"groupheader\">";
if (anchor)
{
t << "<a name=\"" << anchor << "\"></a>" << endl;
diff --git a/src/htmlgen.h b/src/htmlgen.h
index 82f0c17..2d8d6e0 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -175,7 +175,7 @@ class HtmlGenerator : public OutputGenerator
void endMemberSections();
void startHeaderSection();
void endHeaderSection();
- void startMemberHeader(const char *);
+ void startMemberHeader(const char *, int);
void endMemberHeader();
void startMemberSubtitle();
void endMemberSubtitle();
@@ -200,7 +200,8 @@ class HtmlGenerator : public OutputGenerator
void endMemberGroup(bool);
void insertMemberAlign(bool);
- void startMemberDescription(const char *anchor,const char *inheritId);
+ void insertMemberAlignLeft(int,bool);
+ void startMemberDescription(const char *anchor,const char *inheritId, bool typ);
void endMemberDescription();
void startMemberDeclaration() {}
void endMemberDeclaration(const char *anchor,const char *inheritId);
diff --git a/src/index.cpp b/src/index.cpp
index e9f5437..c605005 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -2508,8 +2508,8 @@ static const CmhlInfo *getCmhlInfo(int hl)
{
CmhlInfo("functions", theTranslator->trAll()),
CmhlInfo("functions_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? theTranslator->trFunctionAndProc() :
theTranslator->trFunctions()),
CmhlInfo("functions_vars",theTranslator->trVariables()),
CmhlInfo("functions_type",theTranslator->trTypedefs()),
@@ -2687,8 +2687,8 @@ static const FmhlInfo *getFmhlInfo(int hl)
{
FmhlInfo("globals", theTranslator->trAll()),
FmhlInfo("globals_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? theTranslator->trFunctionAndProc() :
theTranslator->trFunctions()),
FmhlInfo("globals_vars",theTranslator->trVariables()),
FmhlInfo("globals_type",theTranslator->trTypedefs()),
@@ -2855,8 +2855,8 @@ static const NmhlInfo *getNmhlInfo(int hl)
{
NmhlInfo("namespacemembers", theTranslator->trAll()),
NmhlInfo("namespacemembers_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? theTranslator->trFunctionAndProc() :
theTranslator->trFunctions()),
NmhlInfo("namespacemembers_vars",theTranslator->trVariables()),
NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()),
@@ -4022,7 +4022,7 @@ static void writeIndex(OutputList &ol)
ol.startIndexSection(isClassHierarchyIndex);
ol.parseText(/*projPrefix+*/
(fortranOpt ? theTranslator->trCompoundIndexFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitIndex() :
+ vhdlOpt ? theTranslator->trHierarchicalIndex() :
theTranslator->trHierarchicalIndex()
));
ol.endIndexSection(isClassHierarchyIndex);
@@ -4032,7 +4032,7 @@ static void writeIndex(OutputList &ol)
ol.startIndexSection(isCompoundIndex);
ol.parseText(/*projPrefix+*/
(fortranOpt ? theTranslator->trCompoundIndexFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitIndex() :
+ vhdlOpt ? theTranslator->trDesignUnitIndex() :
theTranslator->trCompoundIndex()
));
ol.endIndexSection(isCompoundIndex);
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 86ceade..7fd27bb 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -18,6 +18,7 @@
#include "htmlattrib.h"
#include <qfileinfo.h>
#include "latexdocvisitor.h"
+#include "latexgen.h"
#include "docparser.h"
#include "language.h"
#include "doxygen.h"
@@ -291,10 +292,12 @@ void LatexDocVisitor::visit(DocVerbatim *s)
{
case DocVerbatim::Code:
{
- m_t << "\n\\begin{DoxyCode}\n";
+ m_t << "\n\\begin{DoxyCode}{" << usedTableLevels() << "}\n";
+ LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(lang)
->parseCode(m_ci,s->context(),s->text(),langExt,
s->isExample(),s->exampleFile());
+ LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCode}\n";
}
break;
@@ -399,7 +402,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
{
case DocInclude::IncWithLines:
{
- m_t << "\n\\begin{DoxyCodeInclude}\n";
+ m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
+ LatexCodeGenerator::setDoxyCodeOpen(TRUE);
QFileInfo cfi( inc->file() );
FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
@@ -415,11 +419,13 @@ void LatexDocVisitor::visit(DocInclude *inc)
0, // memberDef
TRUE // show line numbers
);
+ LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
break;
case DocInclude::Include:
- m_t << "\n\\begin{DoxyCodeInclude}\n";
+ m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
+ LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),langExt,inc->isExample(),
@@ -431,6 +437,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
0, // memberDef
FALSE
);
+ LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}\n";
break;
case DocInclude::DontInclude:
@@ -447,7 +454,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
break;
case DocInclude::Snippet:
{
- m_t << "\n\\begin{DoxyCodeInclude}\n";
+ m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
+ LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -456,6 +464,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
inc->isExample(),
inc->exampleFile()
);
+ LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
break;
@@ -463,7 +472,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
{
QFileInfo cfi( inc->file() );
FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- m_t << "\n\\begin{DoxyCodeInclude}\n";
+ m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
+ LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -478,6 +488,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
0, // memberDef
TRUE // show line number
);
+ LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
break;
@@ -495,7 +506,8 @@ void LatexDocVisitor::visit(DocIncOperator *op)
// op->type(),op->isFirst(),op->isLast(),op->text().data());
if (op->isFirst())
{
- if (!m_hide) m_t << "\n\\begin{DoxyCodeInclude}\n";
+ if (!m_hide) m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
+ LatexCodeGenerator::setDoxyCodeOpen(TRUE);
pushEnabled();
m_hide = TRUE;
}
@@ -515,6 +527,7 @@ void LatexDocVisitor::visit(DocIncOperator *op)
if (op->isLast())
{
popEnabled();
+ LatexCodeGenerator::setDoxyCodeOpen(FALSE);
if (!m_hide) m_t << "\n\\end{DoxyCodeInclude}\n";
}
else
@@ -935,7 +948,7 @@ static void writeStartTableCommand(FTextStream &t,const DocNode *n,int cols)
{
if (tableIsNested(n))
{
- t << "\\begin{tabularx}{\\linewidth}{|*{" << cols << "}{>{\\raggedright\\arraybackslash}X|}}";
+ t << "{\\begin{tabularx}{\\linewidth}{|*{" << cols << "}{>{\\raggedright\\arraybackslash}X|}}";
}
else
{
@@ -948,7 +961,7 @@ static void writeEndTableCommand(FTextStream &t,const DocNode *n)
{
if (tableIsNested(n))
{
- t << "\\end{tabularx}\n";
+ t << "\\end{tabularx}}\n";
}
else
{
@@ -995,7 +1008,8 @@ void LatexDocVisitor::visitPre(DocHtmlTable *t)
if (firstRow && firstRow->isHeading())
{
setFirstRow(TRUE);
- firstRow->accept(this);
+ DocNode *n = t->parent();
+ if (!tableIsNested(n)) firstRow->accept(this);
setFirstRow(FALSE);
}
}
@@ -1021,13 +1035,14 @@ void LatexDocVisitor::visitPost(DocHtmlCaption *c)
void LatexDocVisitor::visitPre(DocHtmlRow *r)
{
setCurrentColumn(0);
- if (r->isHeading()) m_t << "\\rowcolor{\\tableheadbgcolor}";
}
void LatexDocVisitor::visitPost(DocHtmlRow *row)
{
if (m_hide) return;
+ DocNode *n = row->parent() ->parent();
+
int c=currentColumn();
while (c<=numCols()) // end of row while inside a row span?
{
@@ -1045,10 +1060,7 @@ void LatexDocVisitor::visitPost(DocHtmlRow *row)
if (span->colSpan>1) // row span is also part of a column span
{
m_t << "\\multicolumn{" << span->colSpan << "}{";
- m_t << "p{(\\linewidth-\\tabcolsep*"
- << numCols() << "-\\arrayrulewidth*"
- << row->visibleCells() << ")*"
- << span->colSpan <<"/"<< numCols() << "}|}{}";
+ m_t << "}|}{}";
}
else // solitary row span
{
@@ -1089,7 +1101,8 @@ void LatexDocVisitor::visitPost(DocHtmlRow *row)
m_t << "\n";
- if (row->isHeading() && row->rowIndex()==1)
+
+ if (row->isHeading() && row->rowIndex()==1 && !tableIsNested(n))
{
if (firstRow())
{
@@ -1131,10 +1144,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c)
{
m_t << "|";
}
- m_t << "p{(\\linewidth-\\tabcolsep*"
- << numCols() << "-\\arrayrulewidth*"
- << row->visibleCells() << ")*"
- << span->colSpan <<"/"<< numCols() << "}|}{}";
+ m_t << "l|}{" << (c->isHeading()? "\\columncolor{\\tableheadbgcolor}" : "") << "}"; // alignment not relevant, empty column
setCurrentColumn(currentColumn()+span->colSpan);
}
else
@@ -1146,6 +1156,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c)
}
int cs = c->colSpan();
+ int a = c->alignment();
if (cs>1 && row)
{
setInColSpan(TRUE);
@@ -1154,11 +1165,18 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c)
{
m_t << "|";
}
- m_t << "p{(\\linewidth-\\tabcolsep*"
- << numCols() << "-\\arrayrulewidth*"
- << row->visibleCells() << ")*"
- << cs <<"/"<< numCols() << "}|}{";
- if (c->isHeading()) m_t << "\\cellcolor{\\tableheadbgcolor}";
+ switch (a)
+ {
+ case DocHtmlCell::Right:
+ m_t << "r|}{";
+ break;
+ case DocHtmlCell::Center:
+ break;
+ m_t << "c|}{";
+ default:
+ m_t << "l|}{";
+ break;
+ }
}
int rs = c->rowSpan();
if (rs>0)
@@ -1168,9 +1186,8 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c)
// c->rowIndex(),c->columnIndex(),c->rowSpan(),c->colSpan(),
// currentColumn());
addRowSpan(new ActiveRowSpan(c,rs,cs,currentColumn()));
- m_t << "\\multirow{" << rs << "}{\\linewidth}{";
+ m_t << "\\multirow{" << rs << "}{*}{";
}
- int a = c->alignment();
if (a==DocHtmlCell::Center)
{
m_t << "\\PBS\\centering ";
@@ -1181,7 +1198,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c)
}
if (c->isHeading())
{
- m_t << "\\textbf{ ";
+ m_t << "\\cellcolor{\\tableheadbgcolor}\\textbf{ ";
}
if (cs>1)
{
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index cc796b1..b00bc6f 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -39,6 +39,7 @@
#include "resourcemgr.h"
static bool DoxyCodeOpen = FALSE;
+static bool DoxyCodeLineOpen = FALSE;
//-------------------------------
LatexCodeGenerator::LatexCodeGenerator(FTextStream &t,const QCString &relPath,const QCString &sourceFileName)
@@ -101,7 +102,7 @@ void LatexCodeGenerator::codify(const char *str)
m_col+=spacesToNextTabStop;
p++;
break;
- case '\n': (usedTableLevels()>0) ? m_t << "\\newline\n" : m_t << '\n'; m_col=0; p++;
+ case '\n': (usedTableLevels()>0 && !DoxyCodeOpen) ? m_t << "\\newline\n" : m_t << '\n'; m_col=0; p++;
break;
default:
i=0;
@@ -190,10 +191,10 @@ void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,co
{
static bool usePDFLatex = Config_getBool(USE_PDFLATEX);
static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
- if (!DoxyCodeOpen)
+ if (!DoxyCodeLineOpen)
{
m_t << "\\DoxyCodeLine{";
- DoxyCodeOpen = TRUE;
+ DoxyCodeLineOpen = TRUE;
}
if (m_prettyCode)
{
@@ -228,19 +229,19 @@ void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,co
void LatexCodeGenerator::startCodeLine(bool)
{
m_col=0;
- if (!DoxyCodeOpen)
+ if (!DoxyCodeLineOpen)
{
m_t << "\\DoxyCodeLine{";
- DoxyCodeOpen = TRUE;
+ DoxyCodeLineOpen = TRUE;
}
}
void LatexCodeGenerator::endCodeLine()
{
- if (DoxyCodeOpen)
+ if (DoxyCodeLineOpen)
{
m_t << "}";
- DoxyCodeOpen = FALSE;
+ DoxyCodeLineOpen = FALSE;
}
codify("\n");
}
@@ -255,6 +256,10 @@ void LatexCodeGenerator::endFontClass()
m_t << "}";
}
+void LatexCodeGenerator::setDoxyCodeOpen(bool val)
+{
+ DoxyCodeOpen = val;
+}
//-------------------------------
@@ -286,13 +291,15 @@ static void writeLatexMakefile()
exit(1);
}
// inserted by KONNO Akihisa <konno@researchers.jp> 2002-03-05
- QCString latex_command = Config_getString(LATEX_CMD_NAME);
+ QCString latex_command = theTranslator->latexCommandName();
QCString mkidx_command = Config_getString(MAKEINDEX_CMD_NAME);
// end insertion by KONNO Akihisa <konno@researchers.jp> 2002-03-05
FTextStream t(&file);
if (!Config_getBool(USE_PDFLATEX)) // use plain old latex
{
- t << "all: refman.dvi" << endl
+ t << "LATEX_CMD=" << latex_command << endl
+ << endl
+ << "all: refman.dvi" << endl
<< endl
<< "ps: refman.ps" << endl
<< endl
@@ -309,7 +316,7 @@ static void writeLatexMakefile()
t << "\tps2pdf refman.ps refman.pdf" << endl << endl;
t << "refman.dvi: clean refman.tex doxygen.sty" << endl
<< "\techo \"Running latex...\"" << endl
- << "\t" << latex_command << " refman.tex" << endl
+ << "\t$(LATEX_CMD) refman.tex" << endl
<< "\techo \"Running makeindex...\"" << endl
<< "\t" << mkidx_command << " refman.idx" << endl;
if (generateBib)
@@ -317,19 +324,19 @@ static void writeLatexMakefile()
t << "\techo \"Running bibtex...\"" << endl;
t << "\tbibtex refman" << endl;
t << "\techo \"Rerunning latex....\"" << endl;
- t << "\t" << latex_command << " refman.tex" << endl;
+ t << "\t$(LATEX_CMD) refman.tex" << endl;
}
t << "\techo \"Rerunning latex....\"" << endl
- << "\t" << latex_command << " refman.tex" << endl
+ << "\t$(LATEX_CMD) refman.tex" << endl
<< "\tlatex_count=8 ; \\" << endl
<< "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
<< "\t do \\" << endl
<< "\t echo \"Rerunning latex....\" ;\\" << endl
- << "\t " << latex_command << " refman.tex ;\\" << endl
+ << "\t $(LATEX_CMD) refman.tex ; \\" << endl
<< "\t latex_count=`expr $$latex_count - 1` ;\\" << endl
<< "\t done" << endl
<< "\t" << mkidx_command << " refman.idx" << endl
- << "\t" << latex_command << " refman.tex" << endl << endl
+ << "\t$(LATEX_CMD) refman.tex" << endl << endl
<< "refman_2on1.ps: refman.ps" << endl
<< "\tpsnup -2 refman.ps >refman_2on1.ps" << endl
<< endl
@@ -338,26 +345,28 @@ static void writeLatexMakefile()
}
else // use pdflatex for higher quality output
{
+ t << "LATEX_CMD=" << latex_command << endl
+ << endl;
t << "all: refman.pdf" << endl << endl
<< "pdf: refman.pdf" << endl << endl;
t << "refman.pdf: clean refman.tex" << endl;
- t << "\tpdflatex refman" << endl;
+ t << "\t$(LATEX_CMD) refman" << endl;
t << "\t" << mkidx_command << " refman.idx" << endl;
if (generateBib)
{
t << "\tbibtex refman" << endl;
- t << "\tpdflatex refman" << endl;
+ t << "\t$(LATEX_CMD) refman" << endl;
}
- t << "\tpdflatex refman" << endl
+ t << "\t$(LATEX_CMD) refman" << endl
<< "\tlatex_count=8 ; \\" << endl
<< "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
<< "\t do \\" << endl
<< "\t echo \"Rerunning latex....\" ;\\" << endl
- << "\t pdflatex refman ;\\" << endl
+ << "\t $(LATEX_CMD) refman ;\\" << endl
<< "\t latex_count=`expr $$latex_count - 1` ;\\" << endl
<< "\t done" << endl
<< "\t" << mkidx_command << " refman.idx" << endl
- << "\tpdflatex refman" << endl << endl;
+ << "\t$(LATEX_CMD) refman" << endl << endl;
}
t << endl
@@ -371,7 +380,7 @@ static void writeMakeBat()
#if defined(_MSC_VER)
QCString dir=Config_getString(LATEX_OUTPUT);
QCString fileName=dir+"/make.bat";
- QCString latex_command = Config_getString(LATEX_CMD_NAME);
+ QCString latex_command = theTranslator->latexCommandName();
QCString mkidx_command = Config_getString(MAKEINDEX_CMD_NAME);
QFile file(fileName);
bool generateBib = !Doxygen::citeDict->isEmpty();
@@ -386,14 +395,15 @@ static void writeMakeBat()
t << "del /s /f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf\n\n";
if (!Config_getBool(USE_PDFLATEX)) // use plain old latex
{
- t << latex_command << " refman.tex\n";
+ t << "set LATEX_CMD=" << latex_command << "\n";
+ t << "%LATEX_CMD% refman.tex\n";
t << "echo ----\n";
t << mkidx_command << " refman.idx\n";
if (generateBib)
{
t << "bibtex refman\n";
t << "echo ----\n";
- t << latex_command << " refman.tex\n";
+ t << "\t%LATEX_CMD% refman.tex\n";
}
t << "setlocal enabledelayedexpansion\n";
t << "set count=8\n";
@@ -405,28 +415,29 @@ static void writeMakeBat()
t << "set /a count-=1\n";
t << "if !count! EQU 0 goto :skip\n\n";
t << "echo ----\n";
- t << latex_command << " refman.tex\n";
+ t << "%LATEX_CMD% refman.tex\n";
t << "goto :repeat\n";
t << ":skip\n";
t << "endlocal\n";
t << mkidx_command << " refman.idx\n";
- t << latex_command << " refman.tex\n";
+ t << "%LATEX_CMD% refman.tex\n";
t << "dvips -o refman.ps refman.dvi\n";
t << "gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite "
"-sOutputFile=refman.pdf -c save pop -f refman.ps\n";
}
else // use pdflatex
{
- t << "pdflatex refman\n";
+ t << "set LATEX_CMD=" << latex_command << "\n";
+ t << "%LATEX_CMD% refman\n";
t << "echo ----\n";
t << mkidx_command << " refman.idx\n";
if (generateBib)
{
t << "bibtex refman" << endl;
- t << "pdflatex refman" << endl;
+ t << "%LATEX_CMD% refman" << endl;
}
t << "echo ----\n";
- t << "pdflatex refman\n\n";
+ t << "%LATEX_CMD% refman\n\n";
t << "setlocal enabledelayedexpansion\n";
t << "set count=8\n";
t << ":repeat\n";
@@ -437,12 +448,12 @@ static void writeMakeBat()
t << "set /a count-=1\n";
t << "if !count! EQU 0 goto :skip\n\n";
t << "echo ----\n";
- t << "pdflatex refman\n";
+ t << "%LATEX_CMD% refman\n";
t << "goto :repeat\n";
t << ":skip\n";
t << "endlocal\n";
t << mkidx_command << " refman.idx\n";
- t << "pdflatex refman\n";
+ t << "%LATEX_CMD% refman\n";
t << "cd /D %Dir_Old%\n";
t << "set Dir_Old=\n";
}
@@ -517,6 +528,8 @@ static void writeDefaultHeaderPart1(FTextStream &t)
"\\PassOptionsToPackage{warn}{textcomp}\n"
"\\usepackage{textcomp}\n"
"\\usepackage[nointegrals]{wasysym}\n"
+ "\\usepackage[table]{xcolor}\n"
+ "\\usepackage{ifpdf,ifxetex}\n"
"\n";
// Language support
@@ -529,9 +542,13 @@ static void writeDefaultHeaderPart1(FTextStream &t)
}
// Define default fonts
- t << "% Font selection\n"
- "\\usepackage[T1]{fontenc}\n"
- "\\usepackage[scaled=.90]{helvet}\n"
+ t << "% Font selection\n";
+ QCString fontenc = theTranslator->latexFontenc();
+ if (!fontenc.isEmpty())
+ {
+ t << "\\usepackage[" << fontenc << "]{fontenc}\n";
+ }
+ t << "\\usepackage[scaled=.90]{helvet}\n"
"\\usepackage{courier}\n"
"\\usepackage{amssymb}\n"
"\\usepackage{sectsty}\n"
@@ -661,7 +678,11 @@ static void writeDefaultHeaderPart1(FTextStream &t)
"\\ifpdf\n"
" \\usepackage[pdftex,pagebackref=true]{hyperref}\n"
"\\else\n"
- " \\usepackage[ps2pdf,pagebackref=true]{hyperref}\n"
+ " \\ifxetex\n"
+ " \\usepackage[pagebackref=true]{hyperref}\n"
+ " \\else\n"
+ " \\usepackage[ps2pdf,pagebackref=true]{hyperref}\n"
+ " \\fi\n"
"\\fi\n"
"\\ifpdf\n"
" \\DeclareUnicodeCharacter{207B}{${}^{-}$}% Superscript minus\n"
@@ -696,16 +717,23 @@ static void writeDefaultHeaderPart1(FTextStream &t)
t << "\\usepackage{caption}\n"
<< "\\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}\n\n";
+
// in page table of contents
t << "\\usepackage{etoc}\n"
"\\etocsettocstyle{\\doxytocparskip}{\\doxynormalparskip}\n";
+ // prevent numbers overlap the titles in toc
+ t << "\\renewcommand{\\numberline}[1]{#1~}\n";
+
// End of preamble, now comes the document contents
t << "%===== C O N T E N T S =====\n"
"\n"
"\\begin{document}\n";
- if (theTranslator->idLanguage()=="greek")
- t << "\\selectlanguage{greek}\n";
+ QCString documentPre = theTranslator->latexDocumentPre();
+ if (!documentPre.isEmpty())
+ {
+ t << documentPre;
+ }
t << "\n";
// Front matter
@@ -798,8 +826,13 @@ static void writeDefaultFooter(FTextStream &t)
"\\clearemptydoublepage\n"
"\\addcontentsline{toc}{" << unit << "}{\\indexname}\n"
"\\printindex\n"
- "\n"
- "\\end{document}\n";
+ "\n";
+ QCString documentPost = theTranslator->latexDocumentPost();
+ if (!documentPost.isEmpty())
+ {
+ t << documentPost;
+ }
+ t << "\\end{document}\n";
}
void LatexGenerator::writeHeaderFile(QFile &f)
@@ -1553,7 +1586,7 @@ void LatexGenerator::endGroupHeader(int)
t << "}" << endl;
}
-void LatexGenerator::startMemberHeader(const char *)
+void LatexGenerator::startMemberHeader(const char *,int)
{
if (Config_getBool(COMPACT_LATEX))
{
@@ -1841,7 +1874,7 @@ void LatexGenerator::endMemberItem()
t << endl;
}
-void LatexGenerator::startMemberDescription(const char *,const char *)
+void LatexGenerator::startMemberDescription(const char *,const char *,bool)
{
if (!insideTabbing)
{
@@ -2207,12 +2240,14 @@ void LatexGenerator::endConstraintList()
void LatexGenerator::startCodeFragment()
{
- t << "\n\\begin{DoxyCode}\n";
+ t << "\n\\begin{DoxyCode}{" << usedTableLevels() << "}\n";
+ DoxyCodeOpen = TRUE;
}
void LatexGenerator::endCodeFragment()
{
t << "\\end{DoxyCode}\n";
+ DoxyCodeOpen = FALSE;
}
void LatexGenerator::startInlineHeader()
diff --git a/src/latexgen.h b/src/latexgen.h
index 430d250..07c4080 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -51,6 +51,7 @@ class LatexCodeGenerator : public CodeOutputInterface
void writeCodeAnchor(const char *) {}
void setCurrentDoc(Definition *,const char *,bool) {}
void addWord(const char *,bool) {}
+ static void setDoxyCodeOpen(bool val);
private:
void _writeCodeLink(const char *className,
@@ -169,7 +170,7 @@ class LatexGenerator : public OutputGenerator
void endMemberSections() {}
void startHeaderSection() {}
void endHeaderSection() {}
- void startMemberHeader(const char *);
+ void startMemberHeader(const char *,int);
void endMemberHeader();
void startMemberSubtitle() {}
void endMemberSubtitle() {}
@@ -194,6 +195,7 @@ class LatexGenerator : public OutputGenerator
void endMemberGroup(bool);
void insertMemberAlign(bool) {}
+ void insertMemberAlignLeft(int,bool){}
void writeRuler() { t << endl << endl; }
void writeAnchor(const char *fileName,const char *name);
@@ -225,7 +227,7 @@ class LatexGenerator : public OutputGenerator
void endCenter() { t << "\\end{center}" << endl; }
void startSmall() { t << "\\footnotesize "; }
void endSmall() { t << "\\normalsize "; }
- void startMemberDescription(const char *,const char *);
+ void startMemberDescription(const char *,const char *,bool);
void endMemberDescription();
void startMemberDeclaration() {}
void endMemberDeclaration(const char *,const char *) {}
diff --git a/src/layout.cpp b/src/layout.cpp
index fdc9f4c..1d9a5ed 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -310,7 +310,7 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandlerSection(this,LayoutDocEntry::ClassNestedClasses,&LayoutParser::startSectionEntry,
COMPILE_FOR_2_OPTIONS(
theTranslator->trCompounds(),
- SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
+ SrcLangExt_VHDL,theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE),
SrcLangExt_Fortran,theTranslator->trDataTypes()
)));
m_sHandler.insert("class/memberdecl/services",
@@ -491,7 +491,7 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry,
COMPILE_FOR_2_OPTIONS(
theTranslator->trCompounds(),
- SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
+ SrcLangExt_VHDL,theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE),
SrcLangExt_Fortran,theTranslator->trDataTypes()
)));
m_sHandler.insert("namespace/memberdecl/membergroups",
@@ -508,7 +508,7 @@ class LayoutParser : public QXmlDefaultHandler
COMPILE_FOR_2_OPTIONS(
theTranslator->trFunctions(),
SrcLangExt_Fortran,theTranslator->trSubprograms(),
- SrcLangExt_VHDL,VhdlDocGen::trFunctionAndProc()
+ SrcLangExt_VHDL,theTranslator->trFunctionAndProc()
)));
m_sHandler.insert("namespace/memberdecl/variables",
new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
@@ -570,7 +570,7 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandlerSection(this,LayoutDocEntry::FileClasses,&LayoutParser::startSectionEntry,
COMPILE_FOR_2_OPTIONS(
theTranslator->trCompounds(),
- SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
+ SrcLangExt_VHDL,theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE),
SrcLangExt_Fortran,theTranslator->trDataTypes()
)));
m_sHandler.insert("file/memberdecl/namespaces",
@@ -599,7 +599,7 @@ class LayoutParser : public QXmlDefaultHandler
COMPILE_FOR_2_OPTIONS(
theTranslator->trFunctions(),
SrcLangExt_Fortran,theTranslator->trSubprograms(),
- SrcLangExt_VHDL,VhdlDocGen::trFunctionAndProc()
+ SrcLangExt_VHDL,theTranslator->trFunctionAndProc()
)));
m_sHandler.insert("file/memberdecl/variables",
new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
@@ -660,7 +660,7 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandlerSection(this,LayoutDocEntry::GroupClasses,&LayoutParser::startSectionEntry,
COMPILE_FOR_2_OPTIONS(
theTranslator->trCompounds(),
- SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
+ SrcLangExt_VHDL,theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE),
SrcLangExt_Fortran,theTranslator->trDataTypes()
)));
m_sHandler.insert("group/memberdecl/namespaces",
@@ -701,7 +701,7 @@ class LayoutParser : public QXmlDefaultHandler
COMPILE_FOR_2_OPTIONS(
theTranslator->trFunctions(),
SrcLangExt_Fortran,theTranslator->trSubprograms(),
- SrcLangExt_VHDL,VhdlDocGen::trFunctionAndProc()
+ SrcLangExt_VHDL,theTranslator->trFunctionAndProc()
)));
m_sHandler.insert("group/memberdecl/variables",
new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
@@ -954,35 +954,35 @@ class LayoutParser : public QXmlDefaultHandler
},
{ "classindex",
LayoutNavEntry::ClassIndex,
- fortranOpt ? theTranslator->trDataTypes() : vhdlOpt ? VhdlDocGen::trDesignUnits() : theTranslator->trCompoundIndex(),
+ fortranOpt ? theTranslator->trDataTypes() : vhdlOpt ? theTranslator->trDesignUnits() : theTranslator->trCompoundIndex(),
QCString(),
QCString(),
"classes"
},
{ "classes",
LayoutNavEntry::Classes,
- fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trClasses(),
+ fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? theTranslator->trDesignUnitList() : theTranslator->trClasses(),
theTranslator->trCompoundList(),
- fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
+ fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? theTranslator->trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
"annotated"
},
{ "classlist",
LayoutNavEntry::ClassList,
- fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trCompoundList(),
+ fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? theTranslator->trDesignUnitList() : theTranslator->trCompoundList(),
QCString(),
- fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
+ fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? theTranslator->trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
"annotated"
},
{ "hierarchy",
LayoutNavEntry::ClassHierarchy,
- vhdlOpt ? VhdlDocGen::trDesignUnitHierarchy() : theTranslator->trClassHierarchy(),
+ vhdlOpt ? theTranslator->trDesignUnitHierarchy() : theTranslator->trClassHierarchy(),
QCString(),
theTranslator->trClassHierarchyDescription(),
hasGraphicalHierarchy ? "inherits" : "hierarchy"
},
{ "classmembers",
LayoutNavEntry::ClassMembers,
- fortranOpt ? theTranslator->trCompoundMembersFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitMembers() : theTranslator->trCompoundMembers(),
+ fortranOpt ? theTranslator->trCompoundMembersFortran() : vhdlOpt ? theTranslator->trDesignUnitMembers() : theTranslator->trCompoundMembers(),
QCString(),
fortranOpt ? theTranslator->trCompoundMembersDescriptionFortran(extractAll) : theTranslator->trCompoundMembersDescription(extractAll),
"functions"
diff --git a/src/mangen.cpp b/src/mangen.cpp
index 17e6003..d23b2fe 100644
--- a/src/mangen.cpp
+++ b/src/mangen.cpp
@@ -283,7 +283,7 @@ void ManGenerator::endGroupHeader(int)
upperCase=FALSE;
}
-void ManGenerator::startMemberHeader(const char *)
+void ManGenerator::startMemberHeader(const char *,int)
{
if (!firstCol) t << endl;
t << ".SS \"";
@@ -619,9 +619,9 @@ void ManGenerator::startSection(const char *,const char *,SectionInfo::SectionTy
{
case SectionInfo::Page: startGroupHeader(FALSE); break;
case SectionInfo::Section: startGroupHeader(FALSE); break;
- case SectionInfo::Subsection: startMemberHeader(0); break;
- case SectionInfo::Subsubsection: startMemberHeader(0); break;
- case SectionInfo::Paragraph: startMemberHeader(0); break;
+ case SectionInfo::Subsection: startMemberHeader(0, -1); break;
+ case SectionInfo::Subsubsection: startMemberHeader(0, -1); break;
+ case SectionInfo::Paragraph: startMemberHeader(0, -1); break;
default: ASSERT(0); break;
}
}
diff --git a/src/mangen.h b/src/mangen.h
index b3b9f76..0413ffd 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -99,9 +99,10 @@ class ManGenerator : public OutputGenerator
void endMemberSections() {}
void startHeaderSection() {}
void endHeaderSection();
- void startMemberHeader(const char *);
+ void startMemberHeader(const char *,int);
void endMemberHeader();
void insertMemberAlign(bool) {}
+ void insertMemberAlignLeft(int,bool){}
void startMemberSubtitle() {}
void endMemberSubtitle() {}
//void writeListItem();
@@ -160,7 +161,7 @@ class ManGenerator : public OutputGenerator
void endCenter() {}
void startSmall() {}
void endSmall() {}
- void startMemberDescription(const char *,const char *) { t << "\n.RI \""; firstCol=FALSE; }
+ void startMemberDescription(const char *,const char *,bool) { t << "\n.RI \""; firstCol=FALSE; }
void endMemberDescription() { t << "\""; firstCol=FALSE; }
void startMemberDeclaration() {}
void endMemberDeclaration(const char *,const char *) {}
diff --git a/src/markdown.cpp b/src/markdown.cpp
index f7526dc..0ca95a4 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -844,7 +844,7 @@ static int processLink(GrowBuf &out,const char *data,int,int size)
}
if (isToc) // special case for [TOC]
{
- if (g_current) g_current->stat=TRUE;
+ out.addStr("@tableofcontents");
}
else if (isImageLink)
{
@@ -1590,15 +1590,15 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
int columns,start,end,cc;
i = findTableColumns(data,size,start,end,columns);
-
+
+ int headerStart = start;
+ int headerEnd = end;
+
#ifdef USE_ORIGINAL_TABLES
out.addStr("<table>");
// write table header, in range [start..end]
out.addStr("<tr>");
-
- int headerStart = start;
- int headerEnd = end;
#endif
// read cell alignments
@@ -1712,9 +1712,6 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
QVector<QVector<TableCell> > tableContents;
tableContents.setAutoDelete(TRUE);
- int headerStart = start;
- int headerEnd = end;
-
int m=headerStart;
QVector<TableCell> *headerContents = new QVector<TableCell>(columns);
headerContents->setAutoDelete(TRUE);
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 0bd0701..819904f 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -1978,7 +1978,7 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const
bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
if (optVhdl)
{
- sl.append(VhdlDocGen::trTypeString(getMemberSpecifiers()));
+ sl.append(theTranslator->trVhdlType(getMemberSpecifiers(),TRUE));
}
else
{
@@ -2576,7 +2576,7 @@ void MemberDef::writeDocumentation(MemberList *ml,
else if (getFileDef()) { scopeName=getFileDef()->displayName(); scopedContainer=getFileDef(); }
ciname = ((GroupDef *)container)->groupTitle();
}
- else if (container->definitionType()==TypeFile && getNamespaceDef())
+ else if (container->definitionType()==TypeFile && getNamespaceDef() && lang != SrcLangExt_Python)
{ // member is in a namespace, but is written as part of the file documentation
// as well, so we need to make sure its label is unique.
memAnchor.prepend("file_");
diff --git a/src/outputgen.h b/src/outputgen.h
index 68356b4..44d34b8 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -380,7 +380,7 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void endMemberSections() = 0;
virtual void startHeaderSection() = 0;
virtual void endHeaderSection() = 0;
- virtual void startMemberHeader(const char *anchor) = 0;
+ virtual void startMemberHeader(const char *anchor, int typ) = 0;
virtual void endMemberHeader() = 0;
virtual void startMemberSubtitle() = 0;
virtual void endMemberSubtitle() = 0;
@@ -403,6 +403,7 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void startMemberGroup() = 0;
virtual void endMemberGroup(bool) = 0;
virtual void insertMemberAlign(bool) = 0;
+ virtual void insertMemberAlignLeft(int,bool) = 0;
virtual void startMemberDoc(const char *,const char *,
const char *,const char *,int,int,bool) = 0;
virtual void endMemberDoc(bool) = 0;
@@ -414,7 +415,7 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name) = 0;
virtual void writeEndAnnoItem(const char *name) = 0;
- virtual void startMemberDescription(const char *anchor,const char *inheritId) = 0;
+ virtual void startMemberDescription(const char *anchor,const char *inheritId, bool typ) = 0;
virtual void endMemberDescription() = 0;
virtual void startMemberDeclaration() = 0;
virtual void endMemberDeclaration(const char *anchor,const char *inheritId) = 0;
diff --git a/src/outputlist.h b/src/outputlist.h
index 0738ed1..2e89101 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -191,8 +191,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startHeaderSection); }
void endHeaderSection()
{ forall(&OutputGenerator::endHeaderSection); }
- void startMemberHeader(const char *anchor)
- { forall(&OutputGenerator::startMemberHeader,anchor); }
+ void startMemberHeader(const char *anchor, int typ = 2)
+ { forall(&OutputGenerator::startMemberHeader,anchor,typ); }
void endMemberHeader()
{ forall(&OutputGenerator::endMemberHeader); }
void startMemberSubtitle()
@@ -237,6 +237,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::endMemberGroup,last); }
void insertMemberAlign(bool templ=FALSE)
{ forall(&OutputGenerator::insertMemberAlign,templ); }
+ void insertMemberAlignLeft(int typ=0, bool templ=FALSE)
+ { forall(&OutputGenerator::insertMemberAlignLeft,typ,templ); }
void writeRuler()
{ forall(&OutputGenerator::writeRuler); }
void writeAnchor(const char *fileName,const char *name)
@@ -306,8 +308,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startBold); }
void endBold()
{ forall(&OutputGenerator::endBold); }
- void startMemberDescription(const char *anchor,const char *inheritId=0)
- { forall(&OutputGenerator::startMemberDescription,anchor,inheritId); }
+ void startMemberDescription(const char *anchor,const char *inheritId=0, bool typ = false)
+ { forall(&OutputGenerator::startMemberDescription,anchor,inheritId, typ); }
void endMemberDescription()
{ forall(&OutputGenerator::endMemberDescription); }
void startMemberDeclaration()
diff --git a/src/pre.l b/src/pre.l
index bf1ec9b..37f7115 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -3195,7 +3195,7 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
{
CondCtx *ctx = g_condStack.pop();
QCString sectionInfo = " ";
- if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label %s ",ctx->sectionId.data());
+ if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label '%s' ",ctx->sectionId.stripWhiteSpace().data());
warn(fileName,ctx->lineNr,"Conditional section%sdoes not have "
"a corresponding \\endcond command within this file.",sectionInfo.data());
delete ctx;
diff --git a/src/pycode.l b/src/pycode.l
index fe1eef5..1b176d6 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -884,7 +884,7 @@ SHORTSTRINGITEM ({SHORTSTRINGCHAR}|{ESCAPESEQ})
SHORTSTRINGCHAR [^\\\n"]
STRINGLITERAL {STRINGPREFIX}?( {SHORTSTRING} | {LONGSTRING})
STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR")
-KEYWORD ("lambda"|"import"|"class"|"assert"|"as"|"from"|"global"|"def"|"True"|"False")
+KEYWORD ("lambda"|"import"|"class"|"assert"|"with"|"as"|"from"|"global"|"def"|"True"|"False")
FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally")
QUOTES ("\""[^"]*"\"")
SINGLEQUOTES ("'"[^']*"'")
@@ -1382,21 +1382,43 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT
}
*/
-<*>{STRINGPREFIX}?{TRISINGLEQUOTE} |
+<*>{STRINGPREFIX}?{TRISINGLEQUOTE} {
+ if (YY_START==SingleQuoteString) REJECT;
+ startFontClass("stringliteral");
+ g_stringContext=YY_START;
+ g_doubleQuote=yytext[yyleng-1]=='"';
+ codify(yytext);
+ BEGIN(TripleString);
+ }
<*>{STRINGPREFIX}?{TRIDOUBLEQUOTE} {
- startFontClass("stringliteral");
+ if (YY_START==DoubleQuoteString) REJECT;
+ startFontClass("stringliteral");
g_stringContext=YY_START;
g_doubleQuote=yytext[yyleng-1]=='"';
- codify(yytext);
+ codify(yytext);
BEGIN(TripleString);
}
<*>{STRINGPREFIX}?"'" { // single quoted string
+ if (YY_START==SingleQuoteString ||
+ YY_START==DoubleQuoteString ||
+ YY_START==TripleString
+ )
+ {
+ REJECT;
+ }
startFontClass("stringliteral");
g_stringContext=YY_START;
codify(yytext);
BEGIN(SingleQuoteString);
}
<*>{STRINGPREFIX}?"\"" { // double quoted string
+ if (YY_START==SingleQuoteString ||
+ YY_START==DoubleQuoteString ||
+ YY_START==TripleString
+ )
+ {
+ REJECT;
+ }
startFontClass("stringliteral");
g_stringContext=YY_START;
codify(yytext);
diff --git a/src/pyscanner.l b/src/pyscanner.l
index 5c9aef5..4718e3b 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -487,7 +487,6 @@ SHORTSTRINGITEM ({SHORTSTRINGCHAR}|{ESCAPESEQ})
SHORTSTRINGCHAR [^\\\n"]
STRINGLITERAL {STRINGPREFIX}?( {SHORTSTRING} | {LONGSTRING})
STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR")
-KEYWORD ("lambda"|"import"|"class"|"assert"|"as"|"from"|"global"|"def"|"True"|"False")
FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally")
POUNDCOMMENT "#"[^#\n][^\n]*
SCRIPTCOMMENT "#!".*
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index c85b638..ec6d015 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -526,9 +526,21 @@ void RTFDocVisitor::visit(DocIncOperator *op)
void RTFDocVisitor::visit(DocFormula *f)
{
if (m_hide) return;
- // TODO: do something sensible here, like including a bitmap
DBG_RTF("{\\comment RTFDocVisitor::visit(DocFormula)}\n");
- m_t << f->text();
+ bool bDisplay = !f->isInline();
+ if (bDisplay)
+ {
+ m_t << "\\par";
+ m_t << "{";
+ m_t << "\\pard\\plain";
+ m_t << "\\pard";
+ m_t << "\\qc";
+ }
+ m_t << "{ \\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"" << f->relPath() << f->name() << ".png\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt Image}}";
+ if (bDisplay)
+ {
+ m_t << "\\par}";
+ }
m_lastIsPara=FALSE;
}
@@ -1067,7 +1079,7 @@ void RTFDocVisitor::visitPost(DocHtmlHeader *)
{
if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlHeader)}\n");
- // close open table of contens entry
+ // close open table of contents entry
m_t << "} \\par";
m_t << "}" << endl; // end section
m_lastIsPara=TRUE;
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index 7fcfbb3..64da929 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -244,7 +244,22 @@ void RTFGenerator::beginRTFDocument()
t <<"\\red128\\green0\\blue0;";
t <<"\\red128\\green128\\blue0;";
t <<"\\red128\\green128\\blue128;";
- t <<"\\red192\\green192\\blue192;}" << endl;
+ t <<"\\red192\\green192\\blue192;";
+
+ // code highlighting colors. Note order is important see also RTFGenerator::startFontClass
+ t <<"\\red0\\green128\\blue0;"; // keyword = index 17
+ t <<"\\red96\\green64\\blue32;"; // keywordtype
+ t <<"\\rede0\\green128\\blue0;"; // keywordflow
+ t <<"\\red128\\green0\\blue0;"; // comment
+ t <<"\\red128\\green96\\blue32;"; // preprocessor
+ t <<"\\red0\\green32\\blue128;"; // stringliteral
+ t <<"\\red0\\green128\\blue128;"; // charliteral
+ t <<"\\red255\\green0\\blue255;"; // vhdldigit
+ t <<"\\red0\\green0\\blue0;"; // vhdlchar
+ t <<"\\red112\\green0\\blue112;"; // vhdlkeyword
+ t <<"\\red255\\green0\\blue0;"; // vhdllogic
+
+ t <<"}\n";
DBG_RTF(t <<"{\\comment Beginning style list}\n")
t <<"{\\stylesheet\n";
@@ -575,7 +590,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
break;
case isTitlePageAuthor:
{
- t << "Doxgyen. }\n";
+ t << " doxygen.}\n";
t << "{\\creatim " << dateToRTFDateString() << "}\n}";
DBG_RTF(t << "{\\comment end of infoblock}\n");
// setup for this section
@@ -602,7 +617,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << rtf_Style_Reset << rtf_Style["Title"]->reference << endl; // set to title style
if (rtf_title)
// User has overridden document title in extensions file
- t << "{\\field\\fldedit {\\*\\fldinst " << rtf_title << " \\\\*MERGEFORMAT}{\\fldrslt " << rtf_title << "}}\\par" << endl;
+ t << "{\\field\\fldedit {\\*\\fldinst TITLE \\\\*MERGEFORMAT}{\\fldrslt " << rtf_title << "}}\\par" << endl;
else
{
DocText *root = validatingParseText(projectName);
@@ -703,7 +718,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
}
else if (vhdlOpt)
{
- t << "{\\tc \\v " << VhdlDocGen::trDesignUnitIndex() << "}"<< endl;
+ t << "{\\tc \\v " << theTranslator->trDesignUnitIndex() << "}"<< endl;
}
else
{
@@ -1626,7 +1641,7 @@ void RTFGenerator::endDescItem()
newParagraph();
}
-void RTFGenerator::startMemberDescription(const char *,const char *)
+void RTFGenerator::startMemberDescription(const char *,const char *,bool)
{
DBG_RTF(t << "{\\comment (startMemberDescription)}" << endl)
t << "{" << endl;
@@ -1639,11 +1654,11 @@ void RTFGenerator::endMemberDescription()
{
DBG_RTF(t << "{\\comment (endMemberDescription)}" << endl)
endEmphasis();
- newParagraph();
+ //newParagraph();
decrementIndentLevel();
- //t << "\\par";
+ t << "\\par";
t << "}" << endl;
- //m_omitParagraph = TRUE;
+ m_omitParagraph = TRUE;
}
void RTFGenerator::startDescList(SectionTypes)
@@ -3041,5 +3056,25 @@ void RTFGenerator::endLabels()
{
}
+void RTFGenerator::startFontClass(const char *name)
+{
+ int cod = 2;
+ QCString qname(name);
+ if (qname == "keyword") cod = 17;
+ else if (qname == "keywordtype") cod = 18;
+ else if (qname == "keywordflow") cod = 19;
+ else if (qname == "comment") cod = 20;
+ else if (qname == "preprocessor") cod = 21;
+ else if (qname == "stringliteral") cod = 22;
+ else if (qname == "charliteral") cod = 23;
+ else if (qname == "vhdldigit") cod = 24;
+ else if (qname == "vhdlchar") cod = 25;
+ else if (qname == "vhdlkeyword") cod = 26;
+ else if (qname == "vhdllogic") cod = 27;
+ t << "{\\cf" << cod << " ";
+}
-
+void RTFGenerator::endFontClass()
+{
+ t << "}";
+}
diff --git a/src/rtfgen.h b/src/rtfgen.h
index d8f6ca7..bb3146a 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -103,7 +103,7 @@ class RTFGenerator : public OutputGenerator
void endMemberSections() {}
void startHeaderSection() {}
void endHeaderSection() {}
- void startMemberHeader(const char *) { startGroupHeader(FALSE); }
+ void startMemberHeader(const char *,int) { startGroupHeader(FALSE); }
void endMemberHeader() { endGroupHeader(FALSE); }
void startMemberSubtitle();
void endMemberSubtitle();
@@ -120,6 +120,7 @@ class RTFGenerator : public OutputGenerator
void startMemberTemplateParams() {}
void endMemberTemplateParams(const char *,const char *) {}
void insertMemberAlign(bool) {}
+ void insertMemberAlignLeft(int,bool){}
void writeRuler() { rtfwriteRuler_thin(); }
@@ -156,7 +157,7 @@ class RTFGenerator : public OutputGenerator
void startSmall() { t << "{\\sub "; }
void endSmall() { t << "}"; }
- void startMemberDescription(const char *,const char *);
+ void startMemberDescription(const char *,const char *,bool);
void endMemberDescription();
void startMemberDeclaration() {}
void endMemberDeclaration(const char *,const char *) {}
@@ -257,8 +258,8 @@ class RTFGenerator : public OutputGenerator
void writeLabel(const char *l,bool isLast);
void endLabels();
- void startFontClass(const char *) {}
- void endFontClass() {}
+ void startFontClass(const char *);
+ void endFontClass();
void writeCodeAnchor(const char *) {}
void setCurrentDoc(Definition *,const char *,bool) {}
diff --git a/src/scanner.l b/src/scanner.l
index 3609d32..21b845f 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -4793,7 +4793,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
<FuncQual>{ID} { // typically a K&R style C function
if (insideCS && qstrcmp(yytext,"where")==0)
{
- // type contraint for a method
+ // type constraint for a method
delete current->typeConstr;
current->typeConstr = new ArgumentList;
current->typeConstr->append(new Argument);
@@ -5535,7 +5535,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
baseName.resize(0);
BEGIN( BasesProt ) ;
}
- else if (insideCS && qstrcmp(yytext,"where")==0) // C# type contraint
+ else if (insideCS && qstrcmp(yytext,"where")==0) // C# type constraint
{
delete current->typeConstr;
current->typeConstr = new ArgumentList;
@@ -5815,7 +5815,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
QCString baseScope = yytext;
if (insideCS && baseScope.stripWhiteSpace()=="where")
{
- // type contraint for a class
+ // type constraint for a class
delete current->typeConstr;
current->typeConstr = new ArgumentList;
current->typeConstr->append(new Argument);
diff --git a/src/translator.h b/src/translator.h
index 7092174..9da2317 100644
--- a/src/translator.h
+++ b/src/translator.h
@@ -19,6 +19,8 @@
#define TRANSLATOR_H
#include "classdef.h"
+#include "config.h"
+#include "vhdldocgen.h"
/** Abstract base class for all translatable text fragments. */
class Translator
@@ -41,6 +43,36 @@ class Translator
virtual QCString idLanguage() = 0;
virtual QCString latexLanguageSupportCommand() = 0;
+ /*!
+ * Sets the LaTeX font encoding to be used. The default is set to `T1`,
+ * in case another font encoding has to be used this can be specified with
+ * this routine. In case no font encoding is required the empty string
+ * can be returned.
+ */
+ virtual QCString latexFontenc() { return "T1"; }
+ /*!
+ * Sets the commands to be insered directly after the `\\begin{document}`
+ * in the LaTeX document.
+ */
+ virtual QCString latexDocumentPre() { return ""; }
+ /*!
+ * Sets the commands to be insered directly before the `\\end{document}`
+ * in the LaTeX document.
+ */
+ virtual QCString latexDocumentPost() { return ""; }
+ /*!
+ * Set the name to be used as latex command.
+ */
+ virtual QCString latexCommandName()
+ {
+ QCString latex_command = Config_getString(LATEX_CMD_NAME);
+ if (latex_command.isEmpty()) latex_command = "latex";
+ if (Config_getBool(USE_PDFLATEX))
+ {
+ if (latex_command == "latex") latex_command = "pdflatex";
+ }
+ return latex_command;
+ }
// --- Language translation methods -------------------
@@ -570,6 +602,20 @@ class Translator
virtual QCString trSingletonReference(const char *sName) = 0;
virtual QCString trServiceGeneratedFromFiles(bool single) = 0;
virtual QCString trSingletonGeneratedFromFiles(bool single) = 0;
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.15
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trDesignUnitHierarchy() = 0;
+ virtual QCString trDesignUnitList() = 0;
+ virtual QCString trDesignUnitMembers() = 0;
+ virtual QCString trDesignUnitListDescription() = 0;
+ virtual QCString trDesignUnitIndex() = 0;
+ virtual QCString trDesignUnits() = 0;
+ virtual QCString trFunctionAndProc() = 0;
+ virtual QCString trVhdlType(uint64 type,bool single) = 0;
+ virtual QCString trCustomReference(const char *name) = 0;
};
#endif
diff --git a/src/translator_adapter.h b/src/translator_adapter.h
index 254876a..e66c9bf 100644
--- a/src/translator_adapter.h
+++ b/src/translator_adapter.h
@@ -41,7 +41,40 @@ class TranslatorAdapterBase : public Translator
};
-class TranslatorAdapter_1_8_4 : public TranslatorAdapterBase
+class TranslatorAdapter_1_8_15 : public TranslatorAdapterBase
+{
+ public:
+ virtual QCString updateNeededMessage()
+ { return createUpdateNeededMessage(idLanguage(),"release 1.8.15"); }
+
+ virtual QCString trDesignUnitHierarchy()
+ { return english.trDesignUnitHierarchy(); }
+
+ virtual QCString trDesignUnitList()
+ { return english.trDesignUnitList(); }
+
+ virtual QCString trDesignUnitMembers()
+ { return english.trDesignUnitMembers(); }
+
+ virtual QCString trDesignUnitListDescription()
+ { return english.trDesignUnitListDescription(); }
+
+ virtual QCString trDesignUnitIndex()
+ { return english.trDesignUnitIndex(); }
+
+ virtual QCString trDesignUnits()
+ { return english.trDesignUnits(); }
+
+ virtual QCString trFunctionAndProc()
+ { return english.trFunctionAndProc(); }
+
+ virtual QCString trVhdlType(uint64 type,bool single)
+ { return english.trVhdlType(type,single); }
+ virtual QCString trCustomReference(const char *name)
+ { return english.trCustomReference(name); }
+};
+
+class TranslatorAdapter_1_8_4 : public TranslatorAdapter_1_8_15
{
public:
virtual QCString updateNeededMessage()
diff --git a/src/translator_am.h b/src/translator_am.h
index 6f5e671..5b4c446 100644
--- a/src/translator_am.h
+++ b/src/translator_am.h
@@ -32,8 +32,8 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0
/* Used to get the command(s) for the language support. */
virtual QCString latexLanguageSupportCommand()
{
- return "<pre>\\usepackage[latin]{armtex}\n"
- "\\usepackage[armscii8]{inputenc}\n</pre>";
+ return "\\usepackage[latin]{armtex}\n"
+ "\\usepackage[armscii8]{inputenc}\n";
}
// --- Language translation methods -------------------
diff --git a/src/translator_br.h b/src/translator_br.h
index a294ee0..774e554 100644
--- a/src/translator_br.h
+++ b/src/translator_br.h
@@ -1,5 +1,5 @@
/******************************************************************************
- * Copyright (C) 1997-2017 by Dimitri van Heesch.
+ * Copyright (C) 1997-2018 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
@@ -10,14 +10,16 @@
* Documents produced by Doxygen are derivative workns derived from the
* input used in their production; they are not affected by this license.
*
- * Brazilian Portuguese translation version 20100531
+ * Brazilian Portuguese translation
* Maintainer:
- * Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br>
+ * Fabio "FJTC" Jun Takada Chino <fjtc at brokenbits dot com dot br>
* Collaborators:
* Emerson Ferreira <nuskorpios at gmail dot com>
* Thanks to Jorge Ramos, Fernando Carijo and others for their contributions.
*
* History:
+ * 20180612:
+ * - Updated to 1.8.15;
* 20170123:
* - Full translation revision;
* - trLegendDocs() is now synchronized with the English version;
@@ -2082,6 +2084,122 @@ class TranslatorBrazilian : public Translator
return result;
}
+ //////////////////////////////////////////////////////////////////////////
+ // new since 1.8.15
+ //////////////////////////////////////////////////////////////////////////
+
+ /** VHDL design unit hierarchy */
+ virtual QCString trDesignUnitHierarchy()
+ { return "Hierarquia da Unidade de Design"; }
+ /** VHDL design unit list */
+ virtual QCString trDesignUnitList()
+ { return "Lista de Unidades de Design"; }
+ /** VHDL design unit members */
+ virtual QCString trDesignUnitMembers()
+ { return "Membros da Unidade de Design"; }
+ /** VHDL design unit list description */
+ virtual QCString trDesignUnitListDescription()
+ {
+ return "Esta é uma lista de todos os membros de unidades de design "
+ "com ligações para as entidades às quais pertencem:";
+ }
+ /** VHDL design unit index */
+ virtual QCString trDesignUnitIndex()
+ { return "Índice de Unidades de Design"; }
+ /** VHDL design units */
+ virtual QCString trDesignUnits()
+ { return "Unidades de Design"; }
+ /** VHDL functions/procedures/processes */
+ virtual QCString trFunctionAndProc()
+ { return "Funções/Procedimentos/Processos"; }
+ /** VHDL type */
+ virtual QCString trVhdlType(uint64 type,bool single)
+ {
+ switch(type)
+ {
+ case VhdlDocGen::LIBRARY:
+ if (single) return "Biblioteca";
+ else return "Bibliotecas";
+ case VhdlDocGen::PACKAGE:
+ if (single) return "Pacote";
+ else return "Pacotes";
+ case VhdlDocGen::SIGNAL:
+ if (single) return "Sinal";
+ else return "Sinais";
+ case VhdlDocGen::COMPONENT:
+ if (single) return "Componente";
+ else return "Componentes";
+ case VhdlDocGen::CONSTANT:
+ if (single) return "Constante";
+ else return "Constantes";
+ case VhdlDocGen::ENTITY:
+ if (single) return "Entidade";
+ else return "Entidades";
+ case VhdlDocGen::TYPE:
+ if (single) return "Tipo";
+ else return "Tipos";
+ case VhdlDocGen::SUBTYPE:
+ if (single) return "Subtipo";
+ else return "Subtipos";
+ case VhdlDocGen::FUNCTION:
+ if (single) return "Função";
+ else return "Funções";
+ case VhdlDocGen::RECORD:
+ if (single) return "Registro";
+ else return "Registros";
+ case VhdlDocGen::PROCEDURE:
+ if (single) return "Procedimento";
+ else return "Procedimentos";
+ case VhdlDocGen::ARCHITECTURE:
+ if (single) return "Arquitetura";
+ else return "Arquiteturas";
+ case VhdlDocGen::ATTRIBUTE:
+ if (single) return "Atributo";
+ else return "Atributos";
+ case VhdlDocGen::PROCESS:
+ if (single) return "Processo";
+ else return "Processos";
+ case VhdlDocGen::PORT:
+ if (single) return "Porta";
+ else return "Portas";
+ case VhdlDocGen::USE:
+ if (single) return "cláusula de uso";
+ else return "cláusulas de uso";
+ case VhdlDocGen::GENERIC:
+ if (single) return "Generico";
+ else return "Genericos";
+ case VhdlDocGen::PACKAGE_BODY:
+ return "Corpo do Pacote";
+ case VhdlDocGen::UNITS:
+ return "Unidades";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (single) return "Variável Compartilhada";
+ else return "Variáveis Compartilhadas";
+ case VhdlDocGen::VFILE:
+ if (single) return "Arquivo";
+ else return "Arquivos";
+ case VhdlDocGen::GROUP:
+ if (single) return "Grupo";
+ else return "Grupos";
+ case VhdlDocGen::INSTANTIATION:
+ if (single) return "Instância";
+ else return "Instâncias";
+ case VhdlDocGen::ALIAS:
+ if (single) return "Apelido";
+ else return "Apelidos";
+ case VhdlDocGen::CONFIG:
+ if (single) return "Configuração";
+ else return "Configurações";
+ case VhdlDocGen::MISCELLANEOUS:
+ return "Outros"; // Is this correct for VHDL?
+ case VhdlDocGen::UCF_CONST:
+ return "Restrições";
+ default:
+ return "Classe";
+ }
+ }
+ virtual QCString trCustomReference(const char *name)
+ { return "Referência de " + QCString(name); }
//////////////////////////////////////////////////////////////////////////
diff --git a/src/translator_cn.h b/src/translator_cn.h
index fc0cf3c..0e559c1 100644
--- a/src/translator_cn.h
+++ b/src/translator_cn.h
@@ -24,7 +24,7 @@
*/
#define CN_SPC " "
-class TranslatorChinese : public Translator
+class TranslatorChinese : public TranslatorAdapter_1_8_15
{
public:
/*! Used for identification of the language. The identification
@@ -53,8 +53,20 @@ class TranslatorChinese : public Translator
*/
virtual QCString latexLanguageSupportCommand()
{
+ return "\\usepackage{CJKutf8}\n";
+ }
+ virtual QCString latexFontenc()
+ {
return "";
}
+ virtual QCString latexDocumentPre()
+ {
+ return "\\begin{CJK}{UTF8}{min}\n";
+ }
+ virtual QCString latexDocumentPost()
+ {
+ return "\\end{CJK}\n";
+ }
/*! used in the compound documentation before a list of related functions.
*/
diff --git a/src/translator_cz.h b/src/translator_cz.h
index 056d0e4..9d6c489 100644
--- a/src/translator_cz.h
+++ b/src/translator_cz.h
@@ -85,7 +85,7 @@
// something else. It is difficult to find the general translation
// for all kinds in the Czech language.
-class TranslatorCzech : public Translator
+class TranslatorCzech : public TranslatorAdapter_1_8_15
{
public:
// --- Language control methods -------------------
@@ -96,7 +96,13 @@ class TranslatorCzech : public Translator
virtual QCString latexLanguageSupportCommand()
{
return "\\usepackage[T2A]{fontenc}\n"
- "\\usepackage[czech]{babel}\n";
+ "\\usepackage[czech]{babel}\n"
+ "\\usepackage{regexpatch}\n"
+ "\\makeatletter\n"
+ "% Change the `-` delimiter to an active character\n"
+ "\\xpatchparametertext\\@@@cmidrule{-}{\\cA-}{}{}\n"
+ "\\xpatchparametertext\\@cline{-}{\\cA-}{}{}\n"
+ "\\makeatother\n";
}
// --- Language translation methods -------------------
diff --git a/src/translator_de.h b/src/translator_de.h
index d63bdcf..8e6ec2c 100644
--- a/src/translator_de.h
+++ b/src/translator_de.h
@@ -316,8 +316,17 @@ class TranslatorGerman : public Translator
/*! This is an introduction to the class hierarchy. */
virtual QCString trClassHierarchyDescription()
- { return "Die Liste der Ableitungen ist -mit Einschränkungen- "
- "alphabetisch sortiert:";
+ {
+ if (Config_getBool(OPTIMIZE_OUTPUT_VHDL))
+ {
+ return "Hier folgt eine hierarchische Auflistung der "
+ "Entwurfseinheiten:";
+ }
+ else
+ {
+ return "Die Liste der Ableitungen ist -mit Einschränkungen- "
+ "alphabetisch sortiert:";
+ }
}
/*! This is an introduction to the list with all files. */
@@ -469,6 +478,10 @@ class TranslatorGerman : public Translator
{
return "Datenstruktur-Dokumentation";
}
+ else if (Config_getBool(OPTIMIZE_OUTPUT_VHDL))
+ {
+ return "Entwurfseinheiten-Dokumentation";
+ }
else
{
return "Klassen-Dokumentation";
@@ -2125,6 +2138,123 @@ class TranslatorGerman : public Translator
}
//////////////////////////////////////////////////////////////////////////
+// new since 1.8.15
+//////////////////////////////////////////////////////////////////////////
+
+ /** VHDL design unit hierarchy */
+ virtual QCString trDesignUnitHierarchy()
+ { return "Entwurfseinheiten-Hierarchie"; }
+ /** VHDL design unit list */
+ virtual QCString trDesignUnitList()
+ { return "Auflistung der Entwurfseinheiten"; }
+ /** VHDL design unit members */
+ virtual QCString trDesignUnitMembers()
+ { return "Entwurfseinheiten-Elemente"; }
+ /** VHDL design unit list description */
+ virtual QCString trDesignUnitListDescription()
+ {
+ return "Hier folgt die Aufzählung aller Entwurfseinheiten und deren "
+ "Elemente mit einer Kurzbeschreibung:";
+ }
+ /** VHDL design unit index */
+ virtual QCString trDesignUnitIndex()
+ { return "Entwurfseinheiten-Verzeichnis"; }
+ /** VHDL design units */
+ virtual QCString trDesignUnits()
+ { return "Entwurfseinheiten"; }
+ /** VHDL functions/procedures/processes */
+ virtual QCString trFunctionAndProc()
+ { return "Funktionen/Prozeduren/Prozesse"; }
+ /** VHDL type */
+ virtual QCString trVhdlType(uint64 type,bool single)
+ {
+ switch(type)
+ {
+ case VhdlDocGen::LIBRARY:
+ if (single) return "Bibliothek";
+ else return "Bibliotheken";
+ case VhdlDocGen::PACKAGE:
+ if (single) return "Paket";
+ else return "Pakete";
+ case VhdlDocGen::SIGNAL:
+ if (single) return "Signal";
+ else return "Signale";
+ case VhdlDocGen::COMPONENT:
+ if (single) return "Komponente";
+ else return "Komponenten";
+ case VhdlDocGen::CONSTANT:
+ if (single) return "Konstante";
+ else return "Konstanten";
+ case VhdlDocGen::ENTITY:
+ if (single) return "Entwurfseinheit";
+ else return "Entwurfseinheiten";
+ case VhdlDocGen::TYPE:
+ if (single) return "Typ";
+ else return "Typen";
+ case VhdlDocGen::SUBTYPE:
+ if (single) return "Subtyp";
+ else return "Subtypen";
+ case VhdlDocGen::FUNCTION:
+ if (single) return "Funktion";
+ else return "Funktionen";
+ case VhdlDocGen::RECORD:
+ if (single) return "Datenstruktur";
+ else return "Datenstrukturen";
+ case VhdlDocGen::PROCEDURE:
+ if (single) return "Prozedur";
+ else return "Prozeduren";
+ case VhdlDocGen::ARCHITECTURE:
+ if (single) return "Architektur";
+ else return "Architekturen";
+ case VhdlDocGen::ATTRIBUTE:
+ if (single) return "Attribut";
+ else return "Attribute";
+ case VhdlDocGen::PROCESS:
+ if (single) return "Prozess";
+ else return "Prozesse";
+ case VhdlDocGen::PORT:
+ if (single) return "Schnittstelle";
+ else return "Schnittstellen";
+ case VhdlDocGen::USE:
+ if (single) return "Use Klausel";
+ else return "Use Klauseln";
+ case VhdlDocGen::GENERIC:
+ if (single) return "Parameter";
+ else return "Parameter";
+ case VhdlDocGen::PACKAGE_BODY:
+ return "Paketkörper";
+ case VhdlDocGen::UNITS:
+ return "Einheiten";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (single) return "Geteilte Variable";
+ else return "Geteilte Variablen";
+ case VhdlDocGen::VFILE:
+ if (single) return "Datei";
+ else return "Dateien";
+ case VhdlDocGen::GROUP:
+ if (single) return "Gruppe";
+ else return "Gruppen";
+ case VhdlDocGen::INSTANTIATION:
+ if (single) return "Instanziierung";
+ else return "Instanziierungen";
+ case VhdlDocGen::ALIAS:
+ if (single) return "Alias";
+ else return "Aliase";
+ case VhdlDocGen::CONFIG:
+ if (single) return "Konfiguration";
+ else return "Konfigurationen";
+ case VhdlDocGen::MISCELLANEOUS:
+ return "Verschiedenes";
+ case VhdlDocGen::UCF_CONST:
+ return "Constraints";
+ default:
+ return "Klasse";
+ }
+ }
+ virtual QCString trCustomReference(const char *name)
+ { return QCString(name)+"-Referenz"; }
+
+//////////////////////////////////////////////////////////////////////////
};
diff --git a/src/translator_dk.h b/src/translator_dk.h
index e98cfa8..70e9032 100644
--- a/src/translator_dk.h
+++ b/src/translator_dk.h
@@ -116,8 +116,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0
virtual QCString latexLanguageSupportCommand()
{
return
- "\\usepackage[danish]{babel}\n"
- "\\usepackage[T1]{fontenc}\n";
+ "\\usepackage[danish]{babel}\n";
}
// --- Language translation methods -------------------
diff --git a/src/translator_en.h b/src/translator_en.h
index 190ba79..d12621e 100644
--- a/src/translator_en.h
+++ b/src/translator_en.h
@@ -224,8 +224,16 @@ class TranslatorEnglish : public Translator
/*! This is an introduction to the class hierarchy. */
virtual QCString trClassHierarchyDescription()
- { return "This inheritance list is sorted roughly, "
- "but not completely, alphabetically:";
+ {
+ if (Config_getBool(OPTIMIZE_OUTPUT_VHDL))
+ {
+ return "Here is a hierarchical list of all entities:";
+ }
+ else
+ {
+ return "This inheritance list is sorted roughly, "
+ "but not completely, alphabetically:";
+ }
}
/*! This is an introduction to the list with all files. */
@@ -1993,6 +2001,123 @@ class TranslatorEnglish : public Translator
}
//////////////////////////////////////////////////////////////////////////
+// new since 1.8.15
+//////////////////////////////////////////////////////////////////////////
+
+ /** VHDL design unit hierarchy */
+ virtual QCString trDesignUnitHierarchy()
+ { return "Design Unit Hierarchy"; }
+ /** VHDL design unit list */
+ virtual QCString trDesignUnitList()
+ { return "Design Unit List"; }
+ /** VHDL design unit members */
+ virtual QCString trDesignUnitMembers()
+ { return "Design Unit Members"; }
+ /** VHDL design unit list description */
+ virtual QCString trDesignUnitListDescription()
+ {
+ return "Here is a list of all design unit members with links to "
+ "the Entities they belong to:";
+ }
+ /** VHDL design unit index */
+ virtual QCString trDesignUnitIndex()
+ { return "Design Unit Index"; }
+ /** VHDL design units */
+ virtual QCString trDesignUnits()
+ { return "Design Units"; }
+ /** VHDL functions/procedures/processes */
+ virtual QCString trFunctionAndProc()
+ { return "Functions/Procedures/Processes"; }
+ /** VHDL type */
+ virtual QCString trVhdlType(uint64 type,bool single)
+ {
+ switch(type)
+ {
+ case VhdlDocGen::LIBRARY:
+ if (single) return "Library";
+ else return "Libraries";
+ case VhdlDocGen::PACKAGE:
+ if (single) return "Package";
+ else return "Packages";
+ case VhdlDocGen::SIGNAL:
+ if (single) return "Signal";
+ else return "Signals";
+ case VhdlDocGen::COMPONENT:
+ if (single) return "Component";
+ else return "Components";
+ case VhdlDocGen::CONSTANT:
+ if (single) return "Constant";
+ else return "Constants";
+ case VhdlDocGen::ENTITY:
+ if (single) return "Entity";
+ else return "Entities";
+ case VhdlDocGen::TYPE:
+ if (single) return "Type";
+ else return "Types";
+ case VhdlDocGen::SUBTYPE:
+ if (single) return "Subtype";
+ else return "Subtypes";
+ case VhdlDocGen::FUNCTION:
+ if (single) return "Function";
+ else return "Functions";
+ case VhdlDocGen::RECORD:
+ if (single) return "Record";
+ else return "Records";
+ case VhdlDocGen::PROCEDURE:
+ if (single) return "Procedure";
+ else return "Procedures";
+ case VhdlDocGen::ARCHITECTURE:
+ if (single) return "Architecture";
+ else return "Architectures";
+ case VhdlDocGen::ATTRIBUTE:
+ if (single) return "Attribute";
+ else return "Attributes";
+ case VhdlDocGen::PROCESS:
+ if (single) return "Process";
+ else return "Processes";
+ case VhdlDocGen::PORT:
+ if (single) return "Port";
+ else return "Ports";
+ case VhdlDocGen::USE:
+ if (single) return "use clause";
+ else return "Use Clauses";
+ case VhdlDocGen::GENERIC:
+ if (single) return "Generic";
+ else return "Generics";
+ case VhdlDocGen::PACKAGE_BODY:
+ return "Package Body";
+ case VhdlDocGen::UNITS:
+ return "Units";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (single) return "Shared Variable";
+ else return "Shared Variables";
+ case VhdlDocGen::VFILE:
+ if (single) return "File";
+ else return "Files";
+ case VhdlDocGen::GROUP:
+ if (single) return "Group";
+ else return "Groups";
+ case VhdlDocGen::INSTANTIATION:
+ if (single) return "Instantiation";
+ else return "Instantiations";
+ case VhdlDocGen::ALIAS:
+ if (single) return "Alias";
+ else return "Aliases";
+ case VhdlDocGen::CONFIG:
+ if (single) return "Configuration";
+ else return "Configurations";
+ case VhdlDocGen::MISCELLANEOUS:
+ return "Miscellaneous";
+ case VhdlDocGen::UCF_CONST:
+ return "Constraints";
+ default:
+ return "Class";
+ }
+ }
+ virtual QCString trCustomReference(const char *name)
+ { return QCString(name)+" Reference"; }
+
+//////////////////////////////////////////////////////////////////////////
};
diff --git a/src/translator_es.h b/src/translator_es.h
index 8922297..5f89f24 100644
--- a/src/translator_es.h
+++ b/src/translator_es.h
@@ -34,7 +34,7 @@
* Updated to 1.8.4 by Bartomeu Creus Navarro (17-julio-2013)
*/
-class TranslatorSpanish : public Translator
+class TranslatorSpanish : public TranslatorAdapter_1_8_15
{
public:
diff --git a/src/translator_fr.h b/src/translator_fr.h
index 9775a29..b0fb5b1 100644
--- a/src/translator_fr.h
+++ b/src/translator_fr.h
@@ -103,7 +103,7 @@
// Translator class (by the local maintainer) when the localized
// translator is made up-to-date again.
-class TranslatorFrench : public Translator
+class TranslatorFrench : public TranslatorAdapter_1_8_15
{
public:
diff --git a/src/translator_gr.h b/src/translator_gr.h
index 8b7afe1..6ed43db 100644
--- a/src/translator_gr.h
+++ b/src/translator_gr.h
@@ -42,7 +42,7 @@
#ifndef TRANSLATOR_GR_H
#define TRANSLATOR_GR_H
-class TranslatorGreek : public Translator
+class TranslatorGreek : public TranslatorAdapter_1_8_15
{
public:
@@ -59,8 +59,8 @@ class TranslatorGreek : public Translator
virtual QCString latexLanguageSupportCommand()
{
- //return "\\usepackage[greek,english]{babel}\n\\usepackage[iso-8859-7]{inputenc}\n";
- return "\\usepackage[greek,english]{babel}\n";
+ return "\\usepackage[greek,english]{babel}\n"
+ "\\usepackage{alphabeta}\n";
}
// --- Language translation methods -------------------
diff --git a/src/translator_it.h b/src/translator_it.h
index 8f08b5a..9638a01 100644
--- a/src/translator_it.h
+++ b/src/translator_it.h
@@ -89,7 +89,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
-class TranslatorItalian : public Translator
+class TranslatorItalian : public TranslatorAdapter_1_8_15
{
public:
diff --git a/src/translator_je.h b/src/translator_je.h
index 835a516..d555421 100644
--- a/src/translator_je.h
+++ b/src/translator_je.h
@@ -36,7 +36,19 @@ class TranslatorJapaneseEn : public TranslatorEnglish
{ return "japanese-en"; }
virtual QCString latexLanguageSupportCommand()
{
- return "platex";
+ return "\\usepackage{CJKutf8}\n";
+ }
+ virtual QCString latexFontenc()
+ {
+ return "";
+ }
+ virtual QCString latexDocumentPre()
+ {
+ return "\\begin{CJK}{UTF8}{min}\n";
+ }
+ virtual QCString latexDocumentPost()
+ {
+ return "\\end{CJK}\n";
}
virtual QCString trRTFansicp()
{
diff --git a/src/translator_jp.h b/src/translator_jp.h
index c4f92c2..fc0d65d 100644
--- a/src/translator_jp.h
+++ b/src/translator_jp.h
@@ -69,7 +69,7 @@ Doxygen の開発の方でもそれはそれでいーんじゃん?みたいな
#ifndef TRANSLATOR_JP_H
#define TRANSLATOR_JP_H
-class TranslatorJapanese : public Translator
+class TranslatorJapanese : public TranslatorAdapter_1_8_15
{
public:
virtual QCString idLanguage()
@@ -77,8 +77,20 @@ class TranslatorJapanese : public Translator
virtual QCString latexLanguageSupportCommand()
{
+ return "\\usepackage{CJKutf8}\n";
+ }
+ virtual QCString latexFontenc()
+ {
return "";
}
+ virtual QCString latexDocumentPre()
+ {
+ return "\\begin{CJK}{UTF8}{min}\n";
+ }
+ virtual QCString latexDocumentPost()
+ {
+ return "\\end{CJK}\n";
+ }
/*! used in the compound documentation before a list of related functions. */
virtual QCString trRelatedFunctions()
diff --git a/src/translator_ke.h b/src/translator_ke.h
index 525cf84..c9f488c 100644
--- a/src/translator_ke.h
+++ b/src/translator_ke.h
@@ -35,12 +35,22 @@ class TranslatorKoreanEn : public TranslatorEnglish
{ return "korean-en"; }
virtual QCString latexLanguageSupportCommand()
{
- return "\\usepackage{hfont}\n";
+ return "\\usepackage{kotex}\n";
}
virtual QCString trRTFansicp()
{
return "949";
}
+ virtual QCString latexCommandName()
+ {
+ QCString latex_command = Config_getString(LATEX_CMD_NAME);
+ if (latex_command.isEmpty()) latex_command = "latex";
+ if (Config_getBool(USE_PDFLATEX))
+ {
+ if (latex_command == "latex") latex_command = "xelatex";
+ }
+ return latex_command;
+ }
/*! Used as ansicpg for RTF fcharset
* \see trRTFansicp() for a table of possible values.
diff --git a/src/translator_kr.h b/src/translator_kr.h
index 7e95e3b..fb1c356 100644
--- a/src/translator_kr.h
+++ b/src/translator_kr.h
@@ -48,7 +48,7 @@
Translator class (by the local maintainer) when the localized
translator is made up-to-date again.
*/
-class TranslatorKorean : public Translator
+class TranslatorKorean : public TranslatorAdapter_1_8_15
{
protected:
friend class TranslatorAdapterBase;
@@ -86,7 +86,17 @@ class TranslatorKorean : public Translator
// I'm not sure what this should be.
// When I figure it out, I'll update this.
// see http://www.ktug.or.kr/jsboard/read.php?table=operate&no=4422&page=1
- return "\\usepackage{hfont}\n";
+ return "\\usepackage{kotex}\n";
+ }
+ virtual QCString latexCommandName()
+ {
+ QCString latex_command = Config_getString(LATEX_CMD_NAME);
+ if (latex_command.isEmpty()) latex_command = "latex";
+ if (Config_getBool(USE_PDFLATEX))
+ {
+ if (latex_command == "latex") latex_command = "xelatex";
+ }
+ return latex_command;
}
// --- Language translation methods -------------------
diff --git a/src/translator_lv.h b/src/translator_lv.h
index 2736bb0..bd579da 100644
--- a/src/translator_lv.h
+++ b/src/translator_lv.h
@@ -76,7 +76,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4
*/
virtual QCString latexLanguageSupportCommand()
{
- return "\\usepackage[LV]{fontenc}\n"
+ return "\\usepackage[T2A]{fontenc}\n"
"\\usepackage[latvian]{babel}\n";
}
diff --git a/src/translator_nl.h b/src/translator_nl.h
index 241cf97..c0c8c9b 100644
--- a/src/translator_nl.h
+++ b/src/translator_nl.h
@@ -93,8 +93,15 @@ class TranslatorDutch : public Translator
QCString trSearch()
{ return "Zoeken"; }
QCString trClassHierarchyDescription()
- { return "Deze inheritance lijst is min of meer alfabetisch "
- "gesorteerd:";
+ {
+ if (Config_getBool(OPTIMIZE_OUTPUT_VHDL))
+ {
+ return "Hieronder is een hi&euml;rarchische lijst met alle entiteiten:";
+ }
+ else
+ {
+ return "Deze inheritance lijst is min of meer alfabetisch gesorteerd:";
+ }
}
QCString trFileListDescription(bool extractAll)
{
@@ -1586,6 +1593,123 @@ class TranslatorDutch : public Translator
}
//////////////////////////////////////////////////////////////////////////
+// new since 1.8.15
+//////////////////////////////////////////////////////////////////////////
+
+ /** VHDL design unit hierarchy */
+ virtual QCString trDesignUnitHierarchy()
+ { return "Ontwerp Eenheid Hi&euml;rarchie"; }
+ /** VHDL design unit list */
+ virtual QCString trDesignUnitList()
+ { return "Ontwerp Eenheid Lijst"; }
+ /** VHDL design unit members */
+ virtual QCString trDesignUnitMembers()
+ { return "Ontwerp Eenheid Members"; }
+ /** VHDL design unit list description */
+ virtual QCString trDesignUnitListDescription()
+ {
+ return "hieronder volgt de lijst met all ontwerp eenheden met links "
+ "naar de entiteiten waar ze bij behoren:";
+ }
+ /** VHDL design unit index */
+ virtual QCString trDesignUnitIndex()
+ { return "Ontwerp Eenheid Index"; }
+ /** VHDL design units */
+ virtual QCString trDesignUnits()
+ { return "Ontwerp Eenheden"; }
+ /** VHDL functions/procedures/processes */
+ virtual QCString trFunctionAndProc()
+ { return "Functies/Procedures/Processen"; }
+ /** VHDL type */
+ virtual QCString trVhdlType(uint64 type,bool single)
+ {
+ switch(type)
+ {
+ case VhdlDocGen::LIBRARY:
+ if (single) return "Bibliotheek";
+ else return "Bibliotheken";
+ case VhdlDocGen::PACKAGE:
+ if (single) return "Package";
+ else return "Packages";
+ case VhdlDocGen::SIGNAL:
+ if (single) return "Signal";
+ else return "Signals";
+ case VhdlDocGen::COMPONENT:
+ if (single) return "Bestanddeel";
+ else return "Bestanddelen";
+ case VhdlDocGen::CONSTANT:
+ if (single) return "Konstante";
+ else return "Konstanten";
+ case VhdlDocGen::ENTITY:
+ if (single) return "Entiteit";
+ else return "Entiteiten";
+ case VhdlDocGen::TYPE:
+ if (single) return "Type";
+ else return "Types";
+ case VhdlDocGen::SUBTYPE:
+ if (single) return "Ondertype";
+ else return "Ondertypes";
+ case VhdlDocGen::FUNCTION:
+ if (single) return "Funktie";
+ else return "Funkties";
+ case VhdlDocGen::RECORD:
+ if (single) return "Record";
+ else return "Records";
+ case VhdlDocGen::PROCEDURE:
+ if (single) return "Procedure";
+ else return "Procedures";
+ case VhdlDocGen::ARCHITECTURE:
+ if (single) return "Architectuur";
+ else return "Architecturen";
+ case VhdlDocGen::ATTRIBUTE:
+ if (single) return "Attribuut";
+ else return "Attributen";
+ case VhdlDocGen::PROCESS:
+ if (single) return "Proces";
+ else return "Processen";
+ case VhdlDocGen::PORT:
+ if (single) return "Poort";
+ else return "Porten";
+ case VhdlDocGen::USE:
+ if (single) return "gebruiks clausule";
+ else return "Gebruiks Clausules";
+ case VhdlDocGen::GENERIC:
+ if (single) return "Algemeen";
+ else return "Algemene";
+ case VhdlDocGen::PACKAGE_BODY:
+ return "Package Body";
+ case VhdlDocGen::UNITS:
+ return "Eenheden";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (single) return "Gedeelde Variable";
+ else return "Gedeelde Variablen";
+ case VhdlDocGen::VFILE:
+ if (single) return "Bestand";
+ else return "Bestanden";
+ case VhdlDocGen::GROUP:
+ if (single) return "Groep";
+ else return "Groepen";
+ case VhdlDocGen::INSTANTIATION:
+ if (single) return "Instanti&euml;ring";
+ else return "Instanti&euml;ringen";
+ case VhdlDocGen::ALIAS:
+ if (single) return "Alias";
+ else return "Aliases";
+ case VhdlDocGen::CONFIG:
+ if (single) return "Configuratie";
+ else return "Configuraties";
+ case VhdlDocGen::MISCELLANEOUS:
+ return "Diverse";
+ case VhdlDocGen::UCF_CONST:
+ return "Limiteringen";
+ default:
+ return "Klasse";
+ }
+ }
+ virtual QCString trCustomReference(const char *name)
+ { return QCString(name)+" Referentie"; }
+
+//////////////////////////////////////////////////////////////////////////
};
#endif
diff --git a/src/translator_no.h b/src/translator_no.h
index 58b596a..eccd952 100644
--- a/src/translator_no.h
+++ b/src/translator_no.h
@@ -72,8 +72,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6
virtual QCString latexLanguageSupportCommand()
{
return
- "\\usepackage[norwegian]{babel}\n"
- "\\usepackage[T1]{fontenc}\n";
+ "\\usepackage[norsk]{babel}\n";
}
// --- Language translation methods -------------------
diff --git a/src/translator_pl.h b/src/translator_pl.h
index 421f407..e0ecc8f 100644
--- a/src/translator_pl.h
+++ b/src/translator_pl.h
@@ -44,8 +44,14 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2
*/
QCString latexLanguageSupportCommand()
{
- return "\\usepackage{polski}\n"
- "\\usepackage[T1]{fontenc}\n";
+ return "\\usepackage[polish]{babel}\n"
+ "\\let\\lll\\undefined\n"; /* to overcome problems with the <<<
+ symbol as defined in the amssymb
+ package, and the Polish symbol
+ "Latin Small Letter L With Stroke"
+ &lstrok; or &#322; or &#x0142;
+ We take the amssymb symbol as leading.
+ */
}
// --- Language translation methods -------------------
diff --git a/src/translator_pt.h b/src/translator_pt.h
index c58bf64..2506f7f 100644
--- a/src/translator_pt.h
+++ b/src/translator_pt.h
@@ -1,5 +1,5 @@
/******************************************************************************
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
+ * Copyright (C) 1997-2018 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
@@ -10,9 +10,9 @@
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
- * Portuguese translation version 20110428
+ * Portuguese translation version
* Maintainer (from 04/28/2011):
- * Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br>
+ * Fabio "FJTC" Jun Takada Chino <fjtc at brokenbits dot com dot br>
* Maintainer (until 04/28/2011):
* Rui Godinho Lopes <rui at ruilopes.com>
*
@@ -24,6 +24,8 @@
* VERSION HISTORY
* ---------------
* History:
+ * 20180612:
+ * - Updated to 1.8.15;
* 20131129:
* - Updated to 1.8.5;
* - Translation in the method trFileMembers() fixed;
@@ -85,7 +87,10 @@ class TranslatorPortuguese : public Translator
* the empty string is returned in this implementation.
*/
virtual QCString latexLanguageSupportCommand()
- { return "Portuguese"; }
+ {
+ return
+ "\\usepackage[portuges]{babel}\n";
+ }
// --- Language translation methods -------------------
@@ -2016,6 +2021,125 @@ class TranslatorPortuguese : public Translator
return result;
}
+ //////////////////////////////////////////////////////////////////////////
+ // new since 1.8.15
+ //////////////////////////////////////////////////////////////////////////
+
+ /** VHDL design unit hierarchy */
+ virtual QCString trDesignUnitHierarchy()
+ { return "Hierarquia da Unidade de Design"; }
+ /** VHDL design unit list */
+ virtual QCString trDesignUnitList()
+ { return "Lista de Unidades de Design"; }
+ /** VHDL design unit members */
+ virtual QCString trDesignUnitMembers()
+ { return "Membros da Unidade de Design"; }
+ /** VHDL design unit list description */
+ virtual QCString trDesignUnitListDescription()
+ {
+ return "Esta é uma lista de todos os membros de unidades de design "
+ "com ligações para as entidades às quais pertencem:";
+ }
+ /** VHDL design unit index */
+ virtual QCString trDesignUnitIndex()
+ { return "Índice de Unidades de Design"; }
+ /** VHDL design units */
+ virtual QCString trDesignUnits()
+ { return "Unidades de Design"; }
+ /** VHDL functions/procedures/processes */
+ virtual QCString trFunctionAndProc()
+ { return "Funções/Procedimentos/Processos"; }
+ /** VHDL type */
+ virtual QCString trVhdlType(uint64 type,bool single)
+ {
+ switch(type)
+ {
+ case VhdlDocGen::LIBRARY:
+ if (single) return "Biblioteca";
+ else return "Bibliotecas";
+ case VhdlDocGen::PACKAGE:
+ if (single) return "Pacote";
+ else return "Pacotes";
+ case VhdlDocGen::SIGNAL:
+ if (single) return "Sinal";
+ else return "Sinais";
+ case VhdlDocGen::COMPONENT:
+ if (single) return "Componente";
+ else return "Componentes";
+ case VhdlDocGen::CONSTANT:
+ if (single) return "Constante";
+ else return "Constantes";
+ case VhdlDocGen::ENTITY:
+ if (single) return "Entidade";
+ else return "Entidades";
+ case VhdlDocGen::TYPE:
+ if (single) return "Tipo";
+ else return "Tipos";
+ case VhdlDocGen::SUBTYPE:
+ if (single) return "Subtipo";
+ else return "Subtipos";
+ case VhdlDocGen::FUNCTION:
+ if (single) return "Função";
+ else return "Funções";
+ case VhdlDocGen::RECORD:
+ if (single) return "Registro";
+ else return "Registros";
+ case VhdlDocGen::PROCEDURE:
+ if (single) return "Procedimento";
+ else return "Procedimentos";
+ case VhdlDocGen::ARCHITECTURE:
+ if (single) return "Arquitetura";
+ else return "Arquiteturas";
+ case VhdlDocGen::ATTRIBUTE:
+ if (single) return "Atributo";
+ else return "Atributos";
+ case VhdlDocGen::PROCESS:
+ if (single) return "Processo";
+ else return "Processos";
+ case VhdlDocGen::PORT:
+ if (single) return "Porta";
+ else return "Portas";
+ case VhdlDocGen::USE:
+ if (single) return "cláusula de uso";
+ else return "cláusulas de uso";
+ case VhdlDocGen::GENERIC:
+ if (single) return "Generico";
+ else return "Genericos";
+ case VhdlDocGen::PACKAGE_BODY:
+ return "Corpo do Pacote";
+ case VhdlDocGen::UNITS:
+ return "Unidades";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (single) return "Variável Compartilhada";
+ else return "Variáveis Compartilhadas";
+ case VhdlDocGen::VFILE:
+ if (single) return "Ficheiro";
+ else return "Ficheiros";
+ case VhdlDocGen::GROUP:
+ if (single) return "Grupo";
+ else return "Grupos";
+ case VhdlDocGen::INSTANTIATION:
+ if (single) return "Instância";
+ else return "Instâncias";
+ case VhdlDocGen::ALIAS:
+ if (single) return "Apelido";
+ else return "Apelidos";
+ case VhdlDocGen::CONFIG:
+ if (single) return "Configuração";
+ else return "Configurações";
+ case VhdlDocGen::MISCELLANEOUS:
+ return "Outros"; // Is this correct for VHDL?
+ case VhdlDocGen::UCF_CONST:
+ return "Restrições";
+ default:
+ return "Classe";
+ }
+ }
+ virtual QCString trCustomReference(const char *name)
+ { return "Referência de " + QCString(name); }
+
+//////////////////////////////////////////////////////////////////////////
+
//////////////////////////////////////////////////////////////////////////
};
diff --git a/src/translator_ro.h b/src/translator_ro.h
index 661578b..6f0c197 100644
--- a/src/translator_ro.h
+++ b/src/translator_ro.h
@@ -42,7 +42,7 @@
#define TRANSLATOR_RO_H
-class TranslatorRomanian : public Translator
+class TranslatorRomanian : public TranslatorAdapter_1_8_15
{
public:
diff --git a/src/translator_ru.h b/src/translator_ru.h
index 54c0202..9d92888 100644
--- a/src/translator_ru.h
+++ b/src/translator_ru.h
@@ -26,7 +26,7 @@
#ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H
-class TranslatorRussian : public Translator
+class TranslatorRussian : public TranslatorAdapter_1_8_15
{
public:
/*! Used for identification of the language. */
diff --git a/src/translator_sc.h b/src/translator_sc.h
index d2b3954..e8191df 100644
--- a/src/translator_sc.h
+++ b/src/translator_sc.h
@@ -71,6 +71,11 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0
*/
virtual QCString latexLanguageSupportCommand()
{
+ return "\\usepackage[T2A]{fontenc}\n"
+ "\\usepackage[russian]{babel}\n";
+ }
+ virtual QCString latexFontenc()
+ {
return "";
}
diff --git a/src/translator_si.h b/src/translator_si.h
index 792053e..2dd7e5b 100644
--- a/src/translator_si.h
+++ b/src/translator_si.h
@@ -36,7 +36,7 @@ class TranslatorSlovene : public TranslatorAdapter_1_4_6
*/
QCString latexLanguageSupportCommand()
{
- return "\\usepackage[slovene]{babel}\n\\usepackage[T1]{fontenc}\n";
+ return "\\usepackage[slovene]{babel}\n";
}
QCString trRelatedFunctions()
{ return "Povezane funkcije"; }
diff --git a/src/translator_sk.h b/src/translator_sk.h
index 3a925ec..9ee8252 100644
--- a/src/translator_sk.h
+++ b/src/translator_sk.h
@@ -32,7 +32,7 @@
#ifndef TRANSLATOR_SK_H
#define TRANSLATOR_SK_H
-class TranslatorSlovak : public Translator
+class TranslatorSlovak : public TranslatorAdapter_1_8_15
{
public:
// --- Language control methods -------------------
@@ -41,8 +41,14 @@ class TranslatorSlovak : public Translator
{ return "slovak"; }
virtual QCString latexLanguageSupportCommand()
- { return "\\usepackage[slovak]{babel}\n"; }
-
+ { return "\\usepackage[slovak]{babel}\n"
+ "\\usepackage{regexpatch}\n"
+ "\\makeatletter\n"
+ "% Change the `-` delimiter to an active character\n"
+ "\\xpatchparametertext\\@@@cmidrule{-}{\\cA-}{}{}\n"
+ "\\xpatchparametertext\\@cline{-}{\\cA-}{}{}\n"
+ "\\makeatother\n";
+ }
// --- Language translation methods -------------------
/*! used in the compound documentation before a list of related functions. */
diff --git a/src/translator_sv.h b/src/translator_sv.h
index 88fffd9..5da89df 100644
--- a/src/translator_sv.h
+++ b/src/translator_sv.h
@@ -120,7 +120,7 @@ Problem!
#ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H
-class TranslatorSwedish : public Translator
+class TranslatorSwedish : public TranslatorAdapter_1_8_15
{
public:
diff --git a/src/translator_tw.h b/src/translator_tw.h
index 26a6db6..9e9092d 100644
--- a/src/translator_tw.h
+++ b/src/translator_tw.h
@@ -41,7 +41,7 @@
// Translator class (by the local maintainer) when the localized
// translator is made up-to-date again.
-class TranslatorChinesetraditional : public Translator
+class TranslatorChinesetraditional : public TranslatorAdapter_1_8_15
{
public:
@@ -72,8 +72,20 @@ class TranslatorChinesetraditional : public Translator
*/
virtual QCString latexLanguageSupportCommand()
{
+ return "\\usepackage{CJKutf8}\n";
+ }
+ virtual QCString latexFontenc()
+ {
return "";
}
+ virtual QCString latexDocumentPre()
+ {
+ return "\\begin{CJK}{UTF8}{min}\n";
+ }
+ virtual QCString latexDocumentPost()
+ {
+ return "\\end{CJK}\n";
+ }
// --- Language translation methods -------------------
diff --git a/src/translator_vi.h b/src/translator_vi.h
index a0046b0..b391b0c 100644
--- a/src/translator_vi.h
+++ b/src/translator_vi.h
@@ -78,9 +78,23 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0
*/
virtual QCString latexLanguageSupportCommand()
{
+ return
+ "\\usepackage[vietnamese]{babel}\n";
+ }
+ virtual QCString latexFontenc()
+ {
return "";
}
-
+ virtual QCString latexCommandName()
+ {
+ QCString latex_command = Config_getString(LATEX_CMD_NAME);
+ if (latex_command.isEmpty()) latex_command = "latex";
+ if (Config_getBool(USE_PDFLATEX))
+ {
+ if (latex_command == "latex") latex_command = "xelatex";
+ }
+ return latex_command;
+ }
// --- Language translation methods -------------------
/*! used in the compound documentation before a list of related functions. */
diff --git a/src/util.cpp b/src/util.cpp
index 9762892..ea68cd7 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -323,7 +323,6 @@ int guessSection(const char *name)
n.right(4)==".c++" ||
n.right(5)==".java" ||
n.right(2)==".m" ||
- n.right(2)==".M" ||
n.right(3)==".mm" ||
n.right(3)==".ii" || // inline
n.right(4)==".ixx" ||
@@ -1782,7 +1781,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
pc = c;
i++;
c = src[i];
- *dst+=c;
+ *dst++=c;
}
else if (c=='"')
{
@@ -7395,23 +7394,23 @@ int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos)
{
if (((uchar)c&0xE0)==0xC0)
{
- bytes++; // 11xx.xxxx: >=2 byte character
+ bytes+=1; // 11xx.xxxx: >=2 byte character
}
if (((uchar)c&0xF0)==0xE0)
{
- bytes++; // 111x.xxxx: >=3 byte character
+ bytes+=2; // 111x.xxxx: >=3 byte character
}
if (((uchar)c&0xF8)==0xF0)
{
- bytes++; // 1111.xxxx: >=4 byte character
+ bytes+=3; // 1111.xxxx: >=4 byte character
}
if (((uchar)c&0xFC)==0xF8)
{
- bytes++; // 1111.1xxx: >=5 byte character
+ bytes+=4; // 1111.1xxx: >=5 byte character
}
if (((uchar)c&0xFE)==0xFC)
{
- bytes++; // 1111.1xxx: 6 byte character
+ bytes+=5; // 1111.1xxx: 6 byte character
}
}
else if (c=='&') // skip over character entities
@@ -7445,11 +7444,10 @@ QCString parseCommentAsText(const Definition *scope,const MemberDef *md,
root->accept(visitor);
delete visitor;
delete root;
- QCString result = convertCharEntitiesToUTF8(s.data());
+ QCString result = convertCharEntitiesToUTF8(s.data()).stripWhiteSpace();
int i=0;
int charCnt=0;
int l=result.length();
- bool addEllipsis=FALSE;
while ((i=nextUtf8CharPosition(result,l,i))<l)
{
charCnt++;
@@ -7460,19 +7458,17 @@ QCString parseCommentAsText(const Definition *scope,const MemberDef *md,
while ((i=nextUtf8CharPosition(result,l,i))<l && charCnt<100)
{
charCnt++;
- if (result.at(i)>=0 && isspace(result.at(i)))
- {
- addEllipsis=TRUE;
- }
- else if (result.at(i)==',' ||
- result.at(i)=='.' ||
- result.at(i)=='?')
+ if (result.at(i)==',' ||
+ result.at(i)=='.' ||
+ result.at(i)=='!' ||
+ result.at(i)=='?')
{
+ i++; // we want to be "behind" last inspected character
break;
}
}
}
- if (addEllipsis || charCnt==100) result=result.left(i)+"...";
+ if ( i < l) result=result.left(i)+"...";
return result.data();
}
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index ce1f92b..618258f 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -94,7 +94,7 @@ static QCString g_exampleFile;
static QCString g_classScope;
-static QCString g_CurrScope;
+static bool g_CurrARCH = FALSE;
static FileDef * g_sourceFileDef;
static Definition * g_currentDefinition;
@@ -109,7 +109,7 @@ static int g_braceCount=0;
static void writeFont(const char *s,const char* text);
static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName);
static bool writeColoredWord(QCString& word );
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE);
+static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE, const char *curr_class=0);
static void endFontClass();
static void startFontClass(const char *s);
//-------------------------------------------------------------------
@@ -291,7 +291,7 @@ static void writeWord(const char *word,const char* curr_class=0,bool classLink=F
}
else
{
- generateClassOrGlobalLink(*g_code,temp);
+ generateClassOrGlobalLink(*g_code,temp,FALSE,curr_class);
}
}
else
@@ -328,7 +328,7 @@ static void writeWord(const char *word,const char* curr_class=0,bool classLink=F
}
else
{
- generateClassOrGlobalLink(*g_code,temp);
+ generateClassOrGlobalLink(*g_code,temp,FALSE,curr_class);
}
}
else
@@ -383,7 +383,7 @@ static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE,b
if (comment)
writeFont("keyword",sp);
else
- writeWord(sp,cl,classlink);
+ writeWord(sp,cl,classlink);
done=TRUE;
}
}
@@ -510,7 +510,7 @@ static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& m
}// generateMemLink
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/)
+static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/, const char *curr_class)
{
QCString className=clName;
@@ -521,6 +521,11 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
//bool isLocal=FALSE;
className.stripPrefix("_");
cd = getClass(className.data());
+ if (!cd && curr_class)
+ {
+ if (QCString(curr_class).contains(QRegExp("::"+QCString(clName)+"$"))) cd = getClass(curr_class);
+ }
+
while (cd)
{
//className.stripPrefix("_");
@@ -759,7 +764,7 @@ DIGITSS [0-9]+|[0-9]+("#")*[0-9_a-fA-F\+\.\-]+("#")*
ALLTYPESMAP {B}*[_a-zA-Z0-9. ]+{BN}*
ALLTYPESMAP1 {BN}*[_a-zA-Z0-9.() ]+{BN}*
-ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME}
+ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME}{BN}+("is")
PROCESS ({BN}*{FUNCNAME}{BN}*[:]+{BN}*("process"){BN}*[(]*)|[^a-zA-Z]("process "|"process("){BN}*[ (]*|[^a-zA-Z]("process"){BN}+
END1 {B}*("end "){BN}+("if"|"case"|"loop"|"generate"|"for")
@@ -768,7 +773,7 @@ END3 {BN}*[^a-zA-Z]("end"){BN}+{FUNCNAME}{BN}*[;]
END4 {B}*("end"){BN}+"function"{BN}+{FUNCNAME}{BN}*[;]
ENDEFUNC {END3}|{END4}|{END2}
-KEYWORD ("new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in")
+KEYWORD ("of"|"new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in")
TYPEKW ^{B}*("type"|"subtype"|"constant"|"attribute"|"signal"|"variable","alias","configuration")
FUNC ^{B}*("function"|"procedure"){BN}*{FUNCNAME}{BN}*("(")
@@ -807,6 +812,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
%x ClassVar
%x ClassesName
%x Map
+%x End
%x Body
%%
@@ -1058,14 +1064,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
g_CurrClass.append(vhdlcodeYYtext);
g_CurrClass=g_CurrClass.stripWhiteSpace();
- if (!writeColoredWord(g_CurrScope))
- {
- generateClassOrGlobalLink(*g_code,vhdlcodeYYtext);
- }
- else
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
+ generateClassOrGlobalLink(*g_code,vhdlcodeYYtext);
BEGIN(Bases);
}
@@ -1284,6 +1283,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
//temp+=("-");
//temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
QCString temp = VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
+ g_CurrARCH = TRUE;
temp+="::";
temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
g_CurrClass=temp;
@@ -1291,7 +1291,6 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
codifyLines(vhdlcodeYYtext,temp.data(),TRUE);
//generateClassOrGlobalLink(*g_code,temp.data());
isPackageBody=FALSE;
- BEGIN(ClassName);
}
@@ -1371,6 +1370,41 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
}
+<Bases>"end"{BN}+"architecture"{BN}+{FUNCNAME} {
+ codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
+ g_CurrARCH = FALSE;
+ }
+<Bases>"end"{BN}+{FUNCNAME} {
+ if (g_CurrARCH)
+ {
+ codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
+ g_CurrARCH = FALSE;
+ }
+ else
+ REJECT;
+ }
+<Bases>"end" {
+ appStringLower(g_PrevString,vhdlcodeYYtext);
+ QCString temp(vhdlcodeYYtext);
+ temp=temp.stripWhiteSpace();
+
+ writeColoredWord(temp);
+ BEGIN(End);
+ }
+<End>{ID} {
+ appStringLower(g_PrevString,vhdlcodeYYtext);
+ QCString temp(vhdlcodeYYtext);
+ temp=temp.stripWhiteSpace();
+
+ if (!writeColoredWord(temp))
+ {
+ generateClassOrGlobalLink(*g_code,temp.data());
+ }
+ }
+<End>";" {
+ codifyLines(vhdlcodeYYtext);
+ BEGIN(Bases);
+ }
<Bases>{KEYWORD} { // found keyword
QCString qcs(vhdlcodeYYtext);
if (!writeColoredWord(qcs))
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index dcf7f42..007c45f 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -61,7 +61,7 @@
#include "vhdlcode.h"
#include "plantuml.h"
//#define DEBUGFLOW
-#define theTranslator_vhdlType VhdlDocGen::trVhdlType
+#define theTranslator_vhdlType theTranslator->trVhdlType
static QDict<QCString> g_vhdlKeyDict0(17,FALSE);
static QDict<QCString> g_vhdlKeyDict1(17,FALSE);
@@ -968,7 +968,6 @@ QCString VhdlDocGen::getClassTitle(const ClassDef *cd)
int ii=cd->protection();
pageTitle+=" ";
pageTitle+=theTranslator_vhdlType(ii+2,TRUE);
- pageTitle+=" ";
return pageTitle;
} // getClassTitle
@@ -1241,42 +1240,6 @@ QCString VhdlDocGen::getProtectionName(int prot)
return "";
}
-QCString VhdlDocGen::trTypeString(uint64 type)
-{
- switch(type)
- {
- case VhdlDocGen::LIBRARY: return "Library";
- case VhdlDocGen::ENTITY: return "Entity";
- case VhdlDocGen::PACKAGE_BODY: return "Package Body";
- case VhdlDocGen::ATTRIBUTE: return "Attribute";
- case VhdlDocGen::PACKAGE: return "Package";
- case VhdlDocGen::SIGNAL: return "Signal";
- case VhdlDocGen::COMPONENT: return "Component";
- case VhdlDocGen::CONSTANT: return "Constant";
- case VhdlDocGen::TYPE: return "Type";
- case VhdlDocGen::SUBTYPE: return "Subtype";
- case VhdlDocGen::FUNCTION: return "Function";
- case VhdlDocGen::RECORD: return "Record";
- case VhdlDocGen::PROCEDURE: return "Procedure";
- case VhdlDocGen::ARCHITECTURE: return "Architecture";
- case VhdlDocGen::USE: return "Package";
- case VhdlDocGen::PROCESS: return "Process";
- case VhdlDocGen::PORT: return "Port";
- case VhdlDocGen::GENERIC: return "Generic";
- case VhdlDocGen::UNITS: return "Units";
- //case VhdlDocGen::PORTMAP: return "Port Map";
- case VhdlDocGen::SHAREDVARIABLE: return "Shared Variable";
- case VhdlDocGen::GROUP: return "Group";
- case VhdlDocGen::VFILE: return "File";
- case VhdlDocGen::INSTANTIATION: return "Instantiation";
- case VhdlDocGen::ALIAS: return "Alias";
- case VhdlDocGen::CONFIG: return "Configuration";
- case VhdlDocGen::MISCELLANEOUS: return "Miscellaneous";
- case VhdlDocGen::UCF_CONST: return "Constraints";
- default: return "";
- }
-} // convertType
-
/*!
* deletes a char backwards in a string
*/
@@ -1790,7 +1753,7 @@ void VhdlDocGen::writeVhdlDeclarations(MemberList* ml,
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::GROUP,FALSE),0,FALSE,VhdlDocGen::GROUP);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::INSTANTIATION,FALSE),0,FALSE,VhdlDocGen::INSTANTIATION);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::ALIAS,FALSE),0,FALSE,VhdlDocGen::ALIAS);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::MISCELLANEOUS),0,FALSE,VhdlDocGen::MISCELLANEOUS);
+ VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::MISCELLANEOUS,TRUE),0,FALSE,VhdlDocGen::MISCELLANEOUS);
// configurations must be added to global file definitions.
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::CONFIG,FALSE),0,FALSE,VhdlDocGen::CONFIG);
@@ -2096,19 +2059,21 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
writeLink(mdef,ol);
ol.docify(" ");
- ol.insertMemberAlign();
if (mm==VhdlDocGen::GENERIC)
{
+ ol.insertMemberAlign();
ol.startBold();
VhdlDocGen::formatString(largs,ol,mdef);
ol.endBold();
}
else
{
+ ol.insertMemberAlignLeft(isAnonymous, false);
ol.docify(" ");
ol.startBold();
VhdlDocGen::formatString(ltype,ol,mdef);
ol.endBold();
+ ol.insertMemberAlign();
ol.docify(" ");
VhdlDocGen::formatString(largs,ol,mdef);
}
@@ -2263,11 +2228,11 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ol.endMemberItem();
if (!mdef->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC) /* && !annMemb */)
{
- QCString s=mdef->briefDescription();
- ol.startMemberDescription(mdef->anchor());
+ QCString s=mdef->briefDescription();
+ ol.startMemberDescription(mdef->anchor(), NULL, mm == VhdlDocGen::PORT);
ol.generateDoc(mdef->briefFile(),mdef->briefLine(),
- mdef->getOuterScope()?mdef->getOuterScope():d,
- mdef,s.data(),TRUE,FALSE,0,TRUE,FALSE);
+ mdef->getOuterScope()?mdef->getOuterScope():d,
+ mdef,s.data(),TRUE,FALSE,0,TRUE,FALSE);
if (detailsVisible)
{
ol.pushGeneratorState();
@@ -2364,7 +2329,7 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol,
if (title)
{
- ol.startMemberHeader(title);
+ ol.startMemberHeader(title,type == VhdlDocGen::PORT ? 3 : 2);
ol.parseText(title);
ol.endMemberHeader();
ol.docify(" ");
@@ -2416,7 +2381,7 @@ bool VhdlDocGen::writeClassType( ClassDef *& cd,
OutputList &ol ,QCString & cname)
{
int id=cd->protection();
- QCString qcs = VhdlDocGen::trTypeString(id+2);
+ QCString qcs = theTranslator->trVhdlType(id+2,TRUE);
cname=VhdlDocGen::getClassName(cd);
ol.startBold();
ol.writeString(qcs.data());
@@ -2426,128 +2391,6 @@ bool VhdlDocGen::writeClassType( ClassDef *& cd,
return FALSE;
}// writeClassLink
-QCString VhdlDocGen::trVhdlType(uint64 type,bool sing)
-{
- switch(type)
- {
- case VhdlDocGen::LIBRARY:
- if (sing) return "Library";
- else return "Libraries";
- case VhdlDocGen::PACKAGE:
- if (sing) return "Package";
- else return "Packages";
- case VhdlDocGen::SIGNAL:
- if (sing) return "Signal";
- else return "Signals";
- case VhdlDocGen::COMPONENT:
- if (sing) return "Component";
- else return "Components";
- case VhdlDocGen::CONSTANT:
- if (sing) return "Constant";
- else return "Constants";
- case VhdlDocGen::ENTITY:
- if (sing) return "Entity";
- else return "Entities";
- case VhdlDocGen::TYPE:
- if (sing) return "Type";
- else return "Types";
- case VhdlDocGen::SUBTYPE:
- if (sing) return "Subtype";
- else return "Subtypes";
- case VhdlDocGen::FUNCTION:
- if (sing) return "Function";
- else return "Functions";
- case VhdlDocGen::RECORD:
- if (sing) return "Record";
- else return "Records";
- case VhdlDocGen::PROCEDURE:
- if (sing) return "Procedure";
- else return "Procedures";
- case VhdlDocGen::ARCHITECTURE:
- if (sing) return "Architecture";
- else return "Architectures";
- case VhdlDocGen::ATTRIBUTE:
- if (sing) return "Attribute";
- else return "Attributes";
- case VhdlDocGen::PROCESS:
- if (sing) return "Process";
- else return "Processes";
- case VhdlDocGen::PORT:
- if (sing) return "Port";
- else return "Ports";
- case VhdlDocGen::USE:
- if (sing) return "use clause";
- else return "Use Clauses";
- case VhdlDocGen::GENERIC:
- if (sing) return "Generic";
- else return "Generics";
- case VhdlDocGen::PACKAGE_BODY:
- return "Package Body";
- case VhdlDocGen::UNITS:
- return "Units";
- case VhdlDocGen::SHAREDVARIABLE:
- if (sing) return "Shared Variable";
- return "Shared Variables";
- case VhdlDocGen::VFILE:
- if (sing) return "File";
- return "Files";
- case VhdlDocGen::GROUP:
- if (sing) return "Group";
- return "Groups";
- case VhdlDocGen::INSTANTIATION:
- if (sing) return "Instantiation";
- else return "Instantiations";
- case VhdlDocGen::ALIAS:
- if (sing) return "Alias";
- return "Aliases";
- case VhdlDocGen::CONFIG:
- if (sing) return "Configuration";
- return "Configurations";
- case VhdlDocGen::MISCELLANEOUS:
- return "Miscellaneous";
- case VhdlDocGen::UCF_CONST:
- return "Constraints";
- default:
- return "Class";
- }
-}
-
-QCString VhdlDocGen::trDesignUnitHierarchy()
-{
- return "Design Unit Hierarchy";
-}
-
-QCString VhdlDocGen::trDesignUnitList()
-{
- return "Design Unit List";
-}
-
-QCString VhdlDocGen::trDesignUnitMembers()
-{
- return "Design Unit Members";
-}
-
-QCString VhdlDocGen::trDesignUnitListDescription()
-{
- return "Here is a list of all design unit members with links to "
- "the Entities they belong to:";
-}
-
-QCString VhdlDocGen::trDesignUnitIndex()
-{
- return "Design Unit Index";
-}
-
-QCString VhdlDocGen::trDesignUnits()
-{
- return "Design Units";
-}
-
-QCString VhdlDocGen::trFunctionAndProc()
-{
- return "Functions/Procedures/Processes";
-}
-
/*! writes a link if the string is linkable else a formatted string */
@@ -3993,7 +3836,7 @@ void FlowChart::createSVG()
//const MemberDef *m=VhdlDocGen::getFlowMember();
//if (m)
- // fprintf(stderr,"\n creating flowchart : %s %s in file %s \n",VhdlDocGen::trTypeString(m->getMemberSpecifiers()),m->name().data(),m->getFileDef()->name().data());
+ // fprintf(stderr,"\n creating flowchart : %s %s in file %s \n",theTranslator->trVhdlType(m->getMemberSpecifiers(),TRUE),m->name().data(),m->getFileDef()->name().data());
QCString dir=" -o \""+ov+qcs+"\"";
ov+="/flow_design.dot";
diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h
index bd190ca..9dd8417 100644
--- a/src/vhdldocgen.h
+++ b/src/vhdldocgen.h
@@ -150,33 +150,6 @@ class VhdlDocGen
static bool isMisc(const MemberDef *mdef);
//-----------------------------------------------------
- // translatable items
-
- static QCString trTypeString(uint64 type);
- static QCString trVhdlType(uint64 type,bool sing=true);
-
- // trClassHierarchy.
- static QCString trDesignUnitHierarchy();
-
- // trCompoundList
- static QCString trDesignUnitList();
-
- // trCompoundMembers.
- static QCString trDesignUnitMembers();
-
- // trCompoundListDescription
- static QCString trDesignUnitListDescription();
-
- // trCompounds
- static QCString trDesignUnits();
-
- // trCompoundIndex
- static QCString trDesignUnitIndex();
-
- // trFunctions
- static QCString trFunctionAndProc();
-
- //-----------------------------------------------------
static void prepareComment(QCString&);
static void formatString(const QCString&,OutputList& ol,const MemberDef*);
diff --git a/templates/html/doxygen.css b/templates/html/doxygen.css
index 1425dc1..8a1235a 100644
--- a/templates/html/doxygen.css
+++ b/templates/html/doxygen.css
@@ -167,6 +167,14 @@ ul {
overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
}
+#side-nav ul {
+ overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+ overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
.fragment {
text-align: left;
direction: ltr;
diff --git a/templates/html/dynsections.js b/templates/html/dynsections.js
index c1ce122..ea0a7b3 100644
--- a/templates/html/dynsections.js
+++ b/templates/html/dynsections.js
@@ -60,7 +60,7 @@ function toggleLevel(level)
$(this).show();
} else if (l==level+1) {
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
- a.html('&#9654;');
+ a.html('&#9658;');
$(this).show();
} else {
$(this).hide();
@@ -87,7 +87,7 @@ function toggleFolder(id)
// replace down arrow by right arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
- currentRowSpans.filter(".arrow").html('&#9654;');
+ currentRowSpans.filter(".arrow").html('&#9658;');
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
@@ -97,7 +97,7 @@ function toggleFolder(id)
// replace down arrows by right arrows for child rows
var childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
- childRowsSpans.filter(".arrow").html('&#9654;');
+ childRowsSpans.filter(".arrow").html('&#9658;');
childRows.show(); //show all children
}
updateStripes();
diff --git a/templates/html/htmldirtree.tpl b/templates/html/htmldirtree.tpl
index 6d3ef8c..a6b9b21 100644
--- a/templates/html/htmldirtree.tpl
+++ b/templates/html/htmldirtree.tpl
@@ -20,7 +20,7 @@
{% else %}
<span style="width:{{ (node.level)*16 }}px;display:inline-block;">&#160;</span>
<span id="arr_{{ node.id }}" class="arrow" onclick="toggleFolder('{{ node.id}}')">
- {%if node.level+1<tree.preferredDepth %}&#9660;{% else %}&#9654;{% endif %}
+ {%if node.level+1<tree.preferredDepth %}&#9660;{% else %}&#9658;{% endif %}
</span>
{% endif %}
{% if node.namespace %}
diff --git a/templates/html/navtree.js b/templates/html/navtree.js
index e310bc9..7ce2935 100644
--- a/templates/html/navtree.js
+++ b/templates/html/navtree.js
@@ -23,7 +23,7 @@
*/
var navTreeSubIndices = new Array();
var arrowDown = '&#9660;';
-var arrowRight = '&#9654;';
+var arrowRight = '&#9658;';
function getData(varName)
{
diff --git a/templates/latex/doxygen.sty b/templates/latex/doxygen.sty
index bee23c5..51e369b 100644
--- a/templates/latex/doxygen.sty
+++ b/templates/latex/doxygen.sty
@@ -97,7 +97,7 @@
}
% Used by @code ... @endcode
-\newenvironment{DoxyCode}{%
+\newenvironment{DoxyCode}[1]{%
\par%
\scriptsize%
\normalfont\ttfamily%
@@ -106,7 +106,13 @@
\settowidth{\CodeWidthChar}{?}%
\settoheight{\CodeHeightChar}{?}%
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
- {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
+ \ifthenelse{\equal{#1}{0}}
+ {
+ {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
+ }
+ {
+ {\lccode`~32 \lowercase{\global\let~}}\obeyspaces%
+ }
}{%
\normalfont%
@@ -128,8 +134,8 @@
\fi
% Used by @example, @include, @includelineno and @dontinclude
-\newenvironment{DoxyCodeInclude}{%
- \DoxyCode%
+\newenvironment{DoxyCodeInclude}[1]{%
+ \DoxyCode{#1}%
}{%
\endDoxyCode%
}
diff --git a/testing/015/015__cond_8c.xml b/testing/015/015__cond_8c.xml
index 43cf335..bcc18b5 100644
--- a/testing/015/015__cond_8c.xml
+++ b/testing/015/015__cond_8c.xml
@@ -11,15 +11,17 @@
<briefdescription>
</briefdescription>
<detaileddescription>
+ <para>Function to be shown. </para>
</detaileddescription>
<inbodydescription>
</inbodydescription>
- <location file="015_cond.c" line="20" column="1" bodyfile="015_cond.c" bodystart="20" bodyend="22"/>
+ <location file="015_cond.c" line="21" column="1" bodyfile="015_cond.c" bodystart="21" bodyend="23"/>
</memberdef>
</sectiondef>
<briefdescription>
</briefdescription>
<detaileddescription>
+ <para>Text <emphasis>argument</emphasis> more text. </para>
</detaileddescription>
<location file="015_cond.c"/>
</compounddef>
diff --git a/testing/015_cond.c b/testing/015_cond.c
index ab3044c..0ac209d 100644
--- a/testing/015_cond.c
+++ b/testing/015_cond.c
@@ -1,4 +1,4 @@
-// objective: test the \cond command
+// objective: test the `cond` command
// check: 015__cond_8c.xml
// config: ENABLED_SECTIONS = COND_ENABLED
@@ -17,12 +17,14 @@ void func();
/// \endcond
/// \cond COND_ENABLED
+/// Function to be shown.
void cond_enabled()
{
}
/// \endcond
/** \cond COND_DISABLED */
+ Function not to be shown.
void cond_disabled()
{
}