From 3cb963061343aa5b3b8a044cdfa62848723a02ee Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Fri, 8 Aug 2014 11:41:23 +0200 Subject: Bug 732768 - nested html tables cause pdflatex to hang (1.8.4 and 1.8.6) --- src/doxygen.sty | 10 ++++++++++ src/latexdocvisitor.cpp | 23 +++++++++++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/doxygen.sty b/src/doxygen.sty index 072104b..c423e12 100644 --- a/src/doxygen.sty +++ b/src/doxygen.sty @@ -434,6 +434,16 @@ }% {\end{xtabular*}\par}% +% Used by nested tables +\newenvironment{TabularNC}[1]% +{% +\setlength{\tmplength}% + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}% + \par\begin{tabular*}{\linewidth}% + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}% +}% +{\end{tabular*}\par}% + % Used for member group headers \newenvironment{Indent}{% \begin{list}{}{% diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 0edb459..dd23d60 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -809,21 +809,32 @@ void LatexDocVisitor::visitPost(DocHtmlDescData *) { } +static const char *getTableName(const DocNode *n) +{ + bool isNested=FALSE; + while (n && !isNested) + { + isNested = n->kind()==DocNode::Kind_HtmlTable; + n = n->parent(); + } + return isNested ? "TabularNC" : "TabularC"; +} + void LatexDocVisitor::visitPre(DocHtmlTable *t) { m_rowSpans.clear(); m_insideTable=TRUE; if (m_hide) return; - if (t->hasCaption()) + if (t->hasCaption()) { m_t << "\\begin{table}[h]"; } - m_t << "\\begin{TabularC}{" << t->numColumns() << "}\n"; + m_t << "\\begin{" << getTableName(t->parent()) << "}{" << t->numColumns() << "}\n"; m_numCols = t->numColumns(); m_t << "\\hline\n"; } -void LatexDocVisitor::visitPost(DocHtmlTable *t) +void LatexDocVisitor::visitPost(DocHtmlTable *t) { m_insideTable=FALSE; if (m_hide) return; @@ -833,14 +844,14 @@ void LatexDocVisitor::visitPost(DocHtmlTable *t) } else { - m_t << "\\end{TabularC}\n"; + m_t << "\\end{" << getTableName(t->parent()) << "}\n"; } } -void LatexDocVisitor::visitPre(DocHtmlCaption *) +void LatexDocVisitor::visitPre(DocHtmlCaption *c) { if (m_hide) return; - m_t << "\\end{TabularC}\n\\centering\n\\caption{"; + m_t << "\\end{" << getTableName(c->parent()) << "}\n\\centering\n\\caption{"; } void LatexDocVisitor::visitPost(DocHtmlCaption *) -- cgit v0.12