summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorALONSO Laurent <laurent.alonso@inria.fr>2021-09-09 15:47:17 +0200
committerALONSO Laurent <laurent.alonso@inria.fr>2021-09-09 15:47:17 +0200
commit87ae19225bd5e04d34d5a42a3aee47b19662bb7f (patch)
tree9ff26c6fd6990020a544902396a1ea66afe16813
parente3401ce8b6d952304b0079d16c408dd4aa86a596 (diff)
iwa[pages]: try to retrieve the page style correctly, ...
Change-Id: If59180863fd7af26a0b28c8c1490a0ccb18f6135
-rw-r--r--src/lib/IWAText.cpp13
-rw-r--r--src/lib/IWORKText.cpp7
-rw-r--r--src/lib/PAGCollector.cpp6
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();
}