From 0aa101a847e4038aca15d51d53ce78b49caa533f Mon Sep 17 00:00:00 2001 From: Duy Dang Date: Mon, 1 Feb 2021 22:10:10 +0700 Subject: Support vertical alignment in multirow table --- src/docparser.cpp | 15 +++++++++++++++ src/docparser.h | 2 ++ src/latexdocvisitor.cpp | 15 ++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/docparser.cpp b/src/docparser.cpp index a179904..809d692 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -3398,6 +3398,21 @@ DocHtmlCell::Alignment DocHtmlCell::alignment() const return Left; } +DocHtmlCell::Valignment DocHtmlCell::valignment() const +{ + for (const auto &attr : attribs()) + { + if (attr.name.lower()=="valign") + { + if (attr.value.lower()=="top") + return Top; + else if (attr.value.lower()=="bottom") + return Bottom; + else return Middle; + } + } + return Middle; +} //--------------------------------------------------------------------------- diff --git a/src/docparser.h b/src/docparser.h index fa2b440..b309f66 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -1338,6 +1338,7 @@ class DocHtmlCell : public CompAccept friend class DocHtmlTable; public: enum Alignment { Left, Right, Center }; + enum Valignment {Top, Middle, Bottom}; DocHtmlCell(DocNode *parent,const HtmlAttribList &attribs,bool isHeading) : m_isHeading(isHeading), m_attribs(attribs) { m_parent = parent; } bool isHeading() const { return m_isHeading; } @@ -1354,6 +1355,7 @@ class DocHtmlCell : public CompAccept uint rowSpan() const; uint colSpan() const; Alignment alignment() const; + Valignment valignment() const; private: void setRowIndex(uint idx) { m_rowIdx = idx; } diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 019030d..965ec42 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -1270,14 +1270,27 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) } } int rs = c->rowSpan(); + int va = c->valignment(); if (rs>0) { setInRowSpan(TRUE); + m_t << "\\multirow"; + switch(va) + { + case DocHtmlCell::Top: + m_t << "[t]"; + break; + case DocHtmlCell::Bottom: + m_t << "[b]"; + break; + default: + break; + } //printf("adding row span: cell={r=%d c=%d rs=%d cs=%d} curCol=%d\n", // c->rowIndex(),c->columnIndex(),c->rowSpan(),c->colSpan(), // currentColumn()); addRowSpan(ActiveRowSpan(c,rs,cs,currentColumn())); - m_t << "\\multirow{" << rs << "}{*}{"; + m_t << "{" << rs << "}{*}{"; } if (a==DocHtmlCell::Center) { -- cgit v0.12 From c371558a5d31b4f0fa24db33732cf0fe390d3a08 Mon Sep 17 00:00:00 2001 From: Duy Dang Date: Tue, 2 Feb 2021 01:25:06 +0700 Subject: Add check for middle vertical alignment --- src/docparser.cpp | 2 ++ src/latexdocvisitor.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/docparser.cpp b/src/docparser.cpp index 809d692..095f0f7 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -3408,6 +3408,8 @@ DocHtmlCell::Valignment DocHtmlCell::valignment() const return Top; else if (attr.value.lower()=="bottom") return Bottom; + else if (attr.value.lower()=="middle") + return Middle; else return Middle; } } diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 965ec42..9aeb2ae 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -1283,6 +1283,8 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) case DocHtmlCell::Bottom: m_t << "[b]"; break; + case DocHtmlCell::Middle: + break; // No alignment option needed default: break; } -- cgit v0.12 From 6bce50a958860d1506daaf59f409bb27b93ec331 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 2 May 2021 12:58:52 +0200 Subject: Minor performance/code duplication tweaks --- src/docparser.cpp | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/docparser.cpp b/src/docparser.cpp index 7fdaf6b..e3187a0 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -3371,31 +3371,33 @@ DocHtmlCell::Alignment DocHtmlCell::alignment() const { for (const auto &attr : attribs()) { - if (attr.name.lower()=="align") + QCString attrName = attr.name.lower(); + QCString attrValue = attr.value.lower(); + if (attrName=="align") { - if (attr.value.lower()=="center") + if (attrValue=="center") return Center; - else if (attr.value.lower()=="right") + else if (attrValue=="right") return Right; else return Left; } - else if (attr.name.lower()=="class") + else if (attrName=="class" && attrValue.startsWith("markdowntable")) { - if (attr.value.lower()=="markdowntableheadcenter") + if (attrValue=="markdowntableheadcenter") return Center; - else if (attr.value.lower()=="markdowntableheadright") + else if (attrValue=="markdowntableheadright") return Right; - else if (attr.value.lower()=="markdowntableheadleft") + else if (attrValue=="markdowntableheadleft") return Left; - else if (attr.value.lower()=="markdowntableheadnone") + else if (attrValue=="markdowntableheadnone") return Center; - else if (attr.value.lower()=="markdowntablebodycenter") + else if (attrValue=="markdowntablebodycenter") return Center; - else if (attr.value.lower()=="markdowntablebodyright") + else if (attrValue=="markdowntablebodyright") return Right; - else if (attr.value.lower()=="markdowntablebodyleft") + else if (attrValue=="markdowntablebodyleft") return Left; - else if (attr.value.lower()=="markdowntablebodynone") + else if (attrValue=="markdowntablebodynone") return Left; else return Left; } @@ -3407,13 +3409,15 @@ DocHtmlCell::Valignment DocHtmlCell::valignment() const { for (const auto &attr : attribs()) { - if (attr.name.lower()=="valign") + QCString attrName = attr.name.lower(); + QCString attrValue = attr.value.lower(); + if (attrName=="valign") { - if (attr.value.lower()=="top") + if (attrValue=="top") return Top; - else if (attr.value.lower()=="bottom") + else if (attrValue=="bottom") return Bottom; - else if (attr.value.lower()=="middle") + else if (attrValue=="middle") return Middle; else return Middle; } -- cgit v0.12