diff options
Diffstat (limited to 'external/libepubgen/0003-Ensure-page-properties-in-the-page-span-works.patch.1')
-rw-r--r-- | external/libepubgen/0003-Ensure-page-properties-in-the-page-span-works.patch.1 | 225 |
1 files changed, 0 insertions, 225 deletions
diff --git a/external/libepubgen/0003-Ensure-page-properties-in-the-page-span-works.patch.1 b/external/libepubgen/0003-Ensure-page-properties-in-the-page-span-works.patch.1 deleted file mode 100644 index 62dd2cbab5dd..000000000000 --- a/external/libepubgen/0003-Ensure-page-properties-in-the-page-span-works.patch.1 +++ /dev/null @@ -1,225 +0,0 @@ -From 715786e10deaa6849a6e46b5a9884edde44e194b Mon Sep 17 00:00:00 2001 -From: Mark Hung <marklh9@gmail.com> -Date: Sun, 25 Mar 2018 10:27:07 +0800 -Subject: [PATCH 3/3] Ensure page properties in the page span works. - -As the page properties are converted to CSS styles of the -body element, this patch force it to start a new HTML file -when openPageSpan is invoked to open the second page span. - -This ensures that page properties in every page span works, -even there are multiple page spans between intentional HTML -page splits such as on size, on headings, or on page breaks. ---- - src/lib/EPUBGenerator.cpp | 4 +++- - src/lib/EPUBSplitGuard.cpp | 19 ++++++++++++++++++- - src/lib/EPUBSplitGuard.h | 7 ++++++- - src/lib/EPUBTextGenerator.cpp | 5 +++++ - src/test/EPUBTextGeneratorTest.cpp | 38 ++++++++++++++++++++++++++++++++++++++ - 5 files changed, 70 insertions(+), 3 deletions(-) - -diff --git a/src/lib/EPUBGenerator.cpp b/src/lib/EPUBGenerator.cpp -index 110667f..9e0c972 100644 ---- a/src/lib/EPUBGenerator.cpp -+++ b/src/lib/EPUBGenerator.cpp -@@ -44,7 +44,7 @@ EPUBGenerator::EPUBGenerator(EPUBPackage *const package, int version) - , m_documentProps() - , m_metadata() - , m_currentHtml() -- , m_splitGuard(EPUB_SPLIT_METHOD_PAGE_BREAK) -+ , m_splitGuard(EPUB_SPLIT_METHOD_PAGE_BREAK,true) - , m_version(version) - , m_stylesMethod(EPUB_STYLES_METHOD_CSS) - , m_layoutMethod(EPUB_LAYOUT_METHOD_REFLOWABLE) -@@ -173,6 +173,8 @@ void EPUBGenerator::setLayoutMethod(EPUBLayoutMethod layout) - if (m_layoutMethod == EPUB_LAYOUT_METHOD_FIXED) - // Fixed layout implies split on page break. - m_splitGuard.setSplitMethod(EPUB_SPLIT_METHOD_PAGE_BREAK); -+ -+ m_splitGuard.setSplitOnSecondPageSpan(m_layoutMethod == EPUB_LAYOUT_METHOD_REFLOWABLE); - } - - void EPUBGenerator::writeContainer() -diff --git a/src/lib/EPUBSplitGuard.cpp b/src/lib/EPUBSplitGuard.cpp -index 4f7531d..5bee515 100644 ---- a/src/lib/EPUBSplitGuard.cpp -+++ b/src/lib/EPUBSplitGuard.cpp -@@ -15,8 +15,10 @@ namespace libepubgen - static const unsigned DEFAULT_SPLIT_HEADING_LEVEL = 1; - static const unsigned DEFAULT_SPLIT_SIZE = 1 << 16; - --EPUBSplitGuard::EPUBSplitGuard(const EPUBSplitMethod method) -+EPUBSplitGuard::EPUBSplitGuard(const EPUBSplitMethod method,bool splitOnSecondPageSpan) - : m_method(method) -+ , m_splitOnSecondPageSpan(splitOnSecondPageSpan) -+ , m_htmlEverInPageSpan(false) - , m_headingLevel(DEFAULT_SPLIT_HEADING_LEVEL) - , m_currentHeadingLevel(0) - , m_size(DEFAULT_SPLIT_SIZE) -@@ -25,6 +27,11 @@ EPUBSplitGuard::EPUBSplitGuard(const EPUBSplitMethod method) - { - } - -+void EPUBSplitGuard::setHtmlEverInPageSpan(bool value) -+{ -+ m_htmlEverInPageSpan = value; -+} -+ - void EPUBSplitGuard::setSplitHeadingLevel(const unsigned level) - { - m_headingLevel = level; -@@ -45,6 +52,11 @@ void EPUBSplitGuard::setSplitMethod(EPUBSplitMethod method) - m_method = method; - } - -+void EPUBSplitGuard::setSplitOnSecondPageSpan(bool value) -+{ -+ m_splitOnSecondPageSpan = value; -+} -+ - void EPUBSplitGuard::openLevel() - { - ++m_nestingLevel; -@@ -70,6 +82,11 @@ bool EPUBSplitGuard::splitOnHeading(const unsigned level) const - return canSplit(EPUB_SPLIT_METHOD_HEADING) && (m_headingLevel >= level); - } - -+bool EPUBSplitGuard::splitOnSecondPageSpan() const -+{ -+ return m_splitOnSecondPageSpan && m_htmlEverInPageSpan; -+} -+ - bool EPUBSplitGuard::inHeading(bool any) const - { - if (!m_currentHeadingLevel) -diff --git a/src/lib/EPUBSplitGuard.h b/src/lib/EPUBSplitGuard.h -index ff55846..a55bad3 100644 ---- a/src/lib/EPUBSplitGuard.h -+++ b/src/lib/EPUBSplitGuard.h -@@ -18,13 +18,15 @@ namespace libepubgen - class EPUBSplitGuard - { - public: -- explicit EPUBSplitGuard(EPUBSplitMethod method); -+ explicit EPUBSplitGuard(EPUBSplitMethod method,bool splitOnSecondPageSpan); - - void setSplitHeadingLevel(unsigned level); - void setCurrentHeadingLevel(unsigned level); - void setSplitSize(unsigned size); -+ void setHtmlEverInPageSpan(bool value); - /// Allows overwriting the value given in the constructor. - void setSplitMethod(EPUBSplitMethod method); -+ void setSplitOnSecondPageSpan(bool value); - - void openLevel(); - void closeLevel(); -@@ -32,6 +34,7 @@ public: - - bool splitOnPageBreak() const; - bool splitOnHeading(unsigned level) const; -+ bool splitOnSecondPageSpan() const; - bool inHeading(bool any) const; - bool splitOnSize() const; - -@@ -42,6 +45,8 @@ private: - - private: - EPUBSplitMethod m_method; -+ bool m_splitOnSecondPageSpan; -+ bool m_htmlEverInPageSpan; - unsigned m_headingLevel; - unsigned m_currentHeadingLevel; - unsigned m_size; -diff --git a/src/lib/EPUBTextGenerator.cpp b/src/lib/EPUBTextGenerator.cpp -index 8e88adb..db9d360 100644 ---- a/src/lib/EPUBTextGenerator.cpp -+++ b/src/lib/EPUBTextGenerator.cpp -@@ -110,6 +110,7 @@ void EPUBTextGenerator::Impl::startHtmlFile() - - void EPUBTextGenerator::Impl::endHtmlFile() - { -+ getSplitGuard().setHtmlEverInPageSpan(false); - if (m_inPageSpan) - getHtml()->openPageSpan(m_pageSpanProps); - if (bool(m_currentHeader)) -@@ -206,10 +207,14 @@ void EPUBTextGenerator::openPageSpan(const librevenge::RVNGPropertyList &propLis - { - assert(!m_impl->m_inPageSpan); - -+ if (m_impl->getSplitGuard().splitOnSecondPageSpan()) -+ m_impl->startNewHtmlFile(); -+ - m_impl->m_inPageSpan = true; - m_impl->m_pageSpanProps = propList; - - m_impl->getHtml()->openPageSpan(propList); -+ m_impl->getSplitGuard().setHtmlEverInPageSpan(true); - } - - void EPUBTextGenerator::closePageSpan() -diff --git a/src/test/EPUBTextGeneratorTest.cpp b/src/test/EPUBTextGeneratorTest.cpp -index 0946408..b5e43a5 100644 ---- a/src/test/EPUBTextGeneratorTest.cpp -+++ b/src/test/EPUBTextGeneratorTest.cpp -@@ -239,6 +239,7 @@ private: - CPPUNIT_TEST(testSplitOnPageBreakInPageSpan); - CPPUNIT_TEST(testSplitOnHeadingInPageSpan); - CPPUNIT_TEST(testSplitOnSizeInPageSpan); -+ CPPUNIT_TEST(testManyWritingModes); - CPPUNIT_TEST_SUITE_END(); - - private: -@@ -282,6 +283,7 @@ private: - void testSplitOnPageBreakInPageSpan(); - void testSplitOnHeadingInPageSpan(); - void testSplitOnSizeInPageSpan(); -+ void testManyWritingModes(); - - /// Asserts that exactly one xpath exists in buffer, and its content equals content. - void assertXPathContent(xmlBufferPtr buffer, const std::string &xpath, const std::string &content); -@@ -1467,6 +1469,42 @@ void EPUBTextGeneratorTest::testSplitOnSizeInPageSpan() - assertXPath(package.m_streams["OEBPS/sections/section0002.xhtml"], "//xhtml:body", "class", "body0"); - } - -+void EPUBTextGeneratorTest::testManyWritingModes() -+{ -+ StringEPUBPackage package; -+ libepubgen::EPUBTextGenerator generator(&package); -+ generator.setOption(libepubgen::EPUB_GENERATOR_OPTION_SPLIT, libepubgen::EPUB_SPLIT_METHOD_PAGE_BREAK); -+ generator.startDocument(librevenge::RVNGPropertyList()); -+ -+ { -+ librevenge::RVNGPropertyList page; -+ page.insert("style:writing-mode", "tb"); -+ generator.openPageSpan(page); -+ -+ librevenge::RVNGPropertyList para; -+ generator.openParagraph(para); -+ generator.insertText("Para1"); -+ generator.closeParagraph(); -+ generator.closePageSpan(); -+ } -+ { -+ librevenge::RVNGPropertyList page; -+ page.insert("style:writing-mode", "lr"); -+ generator.openPageSpan(page); -+ -+ librevenge::RVNGPropertyList para; -+ generator.openParagraph(para); -+ generator.insertText("Para1"); -+ generator.closeParagraph(); -+ generator.closePageSpan(); -+ } -+ generator.endDocument(); -+ assertCss(package.m_cssStreams["OEBPS/styles/stylesheet.css"], ".body0", "writing-mode: vertical-rl", true); -+ assertCss(package.m_cssStreams["OEBPS/styles/stylesheet.css"], ".body1", "writing-mode: horizontal-tb", true); -+ assertXPath(package.m_streams["OEBPS/sections/section0001.xhtml"], "//xhtml:body", "class", "body0"); -+ assertXPath(package.m_streams["OEBPS/sections/section0002.xhtml"], "//xhtml:body", "class", "body1"); -+} -+ - CPPUNIT_TEST_SUITE_REGISTRATION(EPUBTextGeneratorTest); - - } --- -2.14.1 - |