diff options
author | ALONSO Laurent <laurent.alonso@inria.fr> | 2021-09-09 15:47:17 +0200 |
---|---|---|
committer | ALONSO Laurent <laurent.alonso@inria.fr> | 2021-09-09 15:47:17 +0200 |
commit | 87ae19225bd5e04d34d5a42a3aee47b19662bb7f (patch) | |
tree | 9ff26c6fd6990020a544902396a1ea66afe16813 | |
parent | e3401ce8b6d952304b0079d16c408dd4aa86a596 (diff) |
iwa[pages]: try to retrieve the page style correctly, ...
Change-Id: If59180863fd7af26a0b28c8c1490a0ccb18f6135
-rw-r--r-- | src/lib/IWAText.cpp | 13 | ||||
-rw-r--r-- | src/lib/IWORKText.cpp | 7 | ||||
-rw-r--r-- | src/lib/PAGCollector.cpp | 6 |
3 files changed, 24 insertions, 2 deletions
diff --git a/src/lib/IWAText.cpp b/src/lib/IWAText.cpp index 3bf2a60..de73e2e 100644 --- a/src/lib/IWAText.cpp +++ b/src/lib/IWAText.cpp @@ -137,7 +137,11 @@ void IWAText::parse(IWORKText &collector, const std::function<void(unsigned, IWO // first the page master change if ((pageMasterIt != m_pageMasters.end()) && (pageMasterIt->first == pos)) { - if (openPageSpan) openPageSpan(unsigned(pos), pageMasterIt->second); + if (openPageSpan) + { + flushText(curText, collector); + openPageSpan(unsigned(pos), pageMasterIt->second); + } ++pageMasterIt; } // first handle section change @@ -275,6 +279,13 @@ void IWAText::parse(IWORKText &collector, const std::function<void(unsigned, IWO switch (u8Char[0]) { case char(4): // new section(ok) + // be sure to send the last section, even if it has no content + if (openPageSpan && pos+1==size_t(m_text.len()) && (pageMasterIt != m_pageMasters.end()) && (pageMasterIt->first == pos+1)) + { + flushText(curText, collector); + openPageSpan(unsigned(pos), pageMasterIt->second); + } + break; case char(14): // footnote: normally already ignored break; case char(5): diff --git a/src/lib/IWORKText.cpp b/src/lib/IWORKText.cpp index 4f81cc1..6404cc1 100644 --- a/src/lib/IWORKText.cpp +++ b/src/lib/IWORKText.cpp @@ -91,7 +91,12 @@ void IWORKText::fillCharPropList(const IWORKStyleStack &style, const IWORKLangua if (style.has<Outline>() && style.get<Outline>()) props.insert("style:text-outline", true); if (style.has<Tracking>()) - props.insert("fo:letter-spacing", 1 + style.get<Tracking>(), librevenge::RVNG_PERCENT); + { + if (style.has<FontSize>()) // the unit is in percent => if we can convert it in point + props.insert("fo:letter-spacing", style.get<Tracking>()*style.get<FontSize>(), librevenge::RVNG_POINT); + else + props.insert("fo:letter-spacing", 1 + style.get<Tracking>(), librevenge::RVNG_PERCENT); + } if (style.has<Baseline>()) { diff --git a/src/lib/PAGCollector.cpp b/src/lib/PAGCollector.cpp index 5adc9c0..60f13bc 100644 --- a/src/lib/PAGCollector.cpp +++ b/src/lib/PAGCollector.cpp @@ -436,6 +436,12 @@ void PAGCollector::flushPageSpan(const bool writeEmpty) writeHeadersFooters(m_document, m_currentSectionStyle, m_footers, pickFooter, &IWORKDocumentInterface::openFooter, &IWORKDocumentInterface::closeFooter); } + if (text.empty()) + { + // let force an empty paragraph to be inserted + text.addOpenParagraph(librevenge::RVNGPropertyList()); + text.addCloseParagraph(); + } text.write(m_document); m_document->closePageSpan(); } |