diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2017-08-22 16:47:45 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2017-08-22 17:47:09 +0200 |
commit | 15253417276d3239a57b37dfa608f5b8eab9912a (patch) | |
tree | c21064cb8fd1dcfcb9550f7cb6c03c1da8c24617 /external/libepubgen | |
parent | c187973d1713ef1ee3f81461c8aa14d924c8d2e5 (diff) |
EPUB export: fix validation error around as-char images
Matching testcase is in libepubgen.git only.
Change-Id: Iee00264894099ccafb7b2d7d3252e2c7cc48ab11
Reviewed-on: https://gerrit.libreoffice.org/41427
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'external/libepubgen')
-rw-r--r-- | external/libepubgen/libepubgen-epub3.patch.1 | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/external/libepubgen/libepubgen-epub3.patch.1 b/external/libepubgen/libepubgen-epub3.patch.1 index b7e5364f9073..14675692846c 100644 --- a/external/libepubgen/libepubgen-epub3.patch.1 +++ b/external/libepubgen/libepubgen-epub3.patch.1 @@ -1634,3 +1634,95 @@ index 5206b37..a39f266 100644 -- 2.12.3 +From 1376b91046ad50f3a443b6fd4887252c1922870c Mon Sep 17 00:00:00 2001 +From: Miklos Vajna <vmiklos@collabora.co.uk> +Date: Tue, 22 Aug 2017 16:23:55 +0200 +Subject: [PATCH] EPUBHTMLGenerator: fix validation problem with non-page + anchored images + +In most cases (except for at-page anchored images) there is a paragraph +already opened, and writing <p> inside <span> results in a validation +error. + +So just write <p> in case we're not in paragraph already. +--- + src/lib/EPUBHTMLGenerator.cpp | 35 +++++++++++++++++++++++++++++------ + 1 file changed, 29 insertions(+), 6 deletions(-) + +diff --git a/src/lib/EPUBHTMLGenerator.cpp b/src/lib/EPUBHTMLGenerator.cpp +index 40c507e..019404f 100644 +--- a/src/lib/EPUBHTMLGenerator.cpp ++++ b/src/lib/EPUBHTMLGenerator.cpp +@@ -360,6 +360,7 @@ struct EPUBHTMLGeneratorImpl + , m_stylesheetPath(stylesheetPath) + , m_actualPage(0) + , m_ignore(false) ++ , m_frameAnchorTypes() + , m_actualSink() + , m_sinkStack() + { +@@ -446,6 +447,8 @@ struct EPUBHTMLGeneratorImpl + int m_actualPage; + bool m_ignore; + ++ std::stack<std::string> m_frameAnchorTypes; ++ + protected: + std::unique_ptr<TextZoneSink> m_actualSink; + std::stack<std::unique_ptr<TextZoneSink>> m_sinkStack; +@@ -846,8 +849,32 @@ void EPUBHTMLGenerator::closeTable() + m_impl->m_tableManager.closeTable(); + } + +-void EPUBHTMLGenerator::openFrame(const RVNGPropertyList & /* propList */) {} +-void EPUBHTMLGenerator::closeFrame() {} ++void EPUBHTMLGenerator::openFrame(const RVNGPropertyList &propList) ++{ ++ librevenge::RVNGPropertyList::Iter i(propList); ++ std::string anchorType; ++ for (i.rewind(); i.next();) ++ { ++ if (std::string("text:anchor-type") == i.key()) ++ anchorType = i()->getStr().cstr(); ++ } ++ ++ if (anchorType == "page") ++ // Other anchor types are already inside a paragraph. ++ m_impl->output().openElement("p", RVNGPropertyList()); ++ m_impl->m_frameAnchorTypes.push(anchorType); ++} ++ ++void EPUBHTMLGenerator::closeFrame() ++{ ++ if (m_impl->m_frameAnchorTypes.empty()) ++ return; ++ ++ if (m_impl->m_frameAnchorTypes.top() == "page") ++ m_impl->output().closeElement("p"); ++ ++ m_impl->m_frameAnchorTypes.pop(); ++} + + void EPUBHTMLGenerator::openGroup(const librevenge::RVNGPropertyList & /* propList */) {} + void EPUBHTMLGenerator::closeGroup() {} +@@ -862,8 +889,6 @@ void EPUBHTMLGenerator::drawConnector(const librevenge::RVNGPropertyList & /* pr + + void EPUBHTMLGenerator::insertBinaryObject(const RVNGPropertyList &propList) + { +- m_impl->output().openElement("p", RVNGPropertyList()); +- + const EPUBPath &path = m_impl->m_imageManager.insert( + RVNGBinaryData(propList["office:binary-data"]->getStr()), + propList["librevenge:mime-type"]->getStr()); +@@ -873,8 +898,6 @@ void EPUBHTMLGenerator::insertBinaryObject(const RVNGPropertyList &propList) + // FIXME: use alternative repr. if available + attrs.insert("alt", path.str().c_str()); + m_impl->output().insertEmptyElement("img", attrs); +- +- m_impl->output().closeElement("p"); + } + + void EPUBHTMLGenerator::insertEquation(const RVNGPropertyList & /* propList */) {} +-- +2.12.3 + |