summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authoralbert-github <albert.tests@gmail.com>2017-05-28 11:14:50 (GMT)
committeralbert-github <albert.tests@gmail.com>2017-05-28 11:14:50 (GMT)
commitd59ed22f114398d74d5c3fd1445a7901d26ff93a (patch)
tree6b58e7037c64c4a14d07f907b05a6e2b18e26750 /src
parent9b7b33994f6443c26146837ba13dff94e5eba998 (diff)
downloadDoxygen-d59ed22f114398d74d5c3fd1445a7901d26ff93a.zip
Doxygen-d59ed22f114398d74d5c3fd1445a7901d26ff93a.tar.gz
Doxygen-d59ed22f114398d74d5c3fd1445a7901d26ff93a.tar.bz2
Bug 783134 - LaTeX output for \tparam block fails to compile when it contains a \code block
General problem regarding having a code / verbatim section inside a table. Besides handling of the $ some other characters need special handling as well as the \n.
Diffstat (limited to 'src')
-rw-r--r--src/latexdocvisitor.cpp3
-rw-r--r--src/latexdocvisitor.h1
-rw-r--r--src/latexgen.cpp6
-rw-r--r--src/util.cpp7
4 files changed, 16 insertions, 1 deletions
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 9016c25..5463830 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -35,6 +35,7 @@
#include "plantuml.h"
const int maxLevels=5;
+int usedTableLevels = 0;
static const char *secLabels[maxLevels] =
{ "section","subsection","subsubsection","paragraph","subparagraph" };
@@ -1391,6 +1392,7 @@ void LatexDocVisitor::visitPre(DocParamSect *s)
if (m_hide) return;
bool hasInOutSpecs = s->hasInOutSpecifier();
bool hasTypeSpecs = s->hasTypeSpecifier();
+ usedTableLevels++;
switch(s->type())
{
case DocParamSect::Param:
@@ -1424,6 +1426,7 @@ void LatexDocVisitor::visitPre(DocParamSect *s)
void LatexDocVisitor::visitPost(DocParamSect *s)
{
if (m_hide) return;
+ usedTableLevels--;
switch(s->type())
{
case DocParamSect::Param:
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 02df1ef..9ad162f 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -24,6 +24,7 @@
#include <qcstring.h>
#include <qlist.h>
//#include <qmap.h>
+extern int usedTableLevels;
class FTextStream;
class CodeOutputInterface;
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 8d338ae..84dd9c2 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -92,7 +92,7 @@ void LatexCodeGenerator::codify(const char *str)
m_col+=spacesToNextTabStop;
p++;
break;
- case '\n': m_t << '\n'; m_col=0; p++;
+ case '\n': (usedTableLevels>0) ? m_t << "\\newline\n" : m_t << '\n'; m_col=0; p++;
break;
default:
i=0;
@@ -1843,11 +1843,13 @@ void LatexGenerator::writeNonBreakableSpace(int)
void LatexGenerator::startDescTable(const char *title)
{
+ usedTableLevels++;
t << "\\begin{DoxyEnumFields}{" << title << "}" << endl;
}
void LatexGenerator::endDescTable()
{
+ usedTableLevels--;
t << "\\end{DoxyEnumFields}" << endl;
}
@@ -2190,6 +2192,7 @@ void LatexGenerator::lineBreak(const char *)
void LatexGenerator::startMemberDocSimple(bool isEnum)
{
+ usedTableLevels++;
if (isEnum)
{
t << "\\begin{DoxyEnumFields}{";
@@ -2205,6 +2208,7 @@ void LatexGenerator::startMemberDocSimple(bool isEnum)
void LatexGenerator::endMemberDocSimple(bool isEnum)
{
+ usedTableLevels--;
if (isEnum)
{
t << "\\end{DoxyEnumFields}" << endl;
diff --git a/src/util.cpp b/src/util.cpp
index e44f825..02be332 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -47,6 +47,7 @@
#include "searchindex.h"
#include "doxygen.h"
#include "textdocvisitor.h"
+#include "latexdocvisitor.h"
#include "portable.h"
#include "parserintf.h"
#include "bufstr.h"
@@ -6655,6 +6656,12 @@ void filterLatexString(FTextStream &t,const char *str,
case '{': t << "\\{"; break;
case '}': t << "\\}"; break;
case '_': t << "\\_"; break;
+ case '&': t << "\\&"; break;
+ case '%': t << "\\%"; break;
+ case '#': t << "\\#"; break;
+ case '$': t << "\\$"; break;
+ case '^': (usedTableLevels>0) ? t << "\\string^" : t << (char)c; break;
+ case '~': (usedTableLevels>0) ? t << "\\string~" : t << (char)c; break;
case ' ': if (keepSpaces) t << "~"; else t << ' ';
break;
default: