summaryrefslogtreecommitdiffstats
path: root/external/libepubgen/0001-Support-writing-mode-for-reflowable-layout-method.patch.1
diff options
context:
space:
mode:
Diffstat (limited to 'external/libepubgen/0001-Support-writing-mode-for-reflowable-layout-method.patch.1')
-rw-r--r--external/libepubgen/0001-Support-writing-mode-for-reflowable-layout-method.patch.1264
1 files changed, 0 insertions, 264 deletions
diff --git a/external/libepubgen/0001-Support-writing-mode-for-reflowable-layout-method.patch.1 b/external/libepubgen/0001-Support-writing-mode-for-reflowable-layout-method.patch.1
deleted file mode 100644
index d3799d1d6e8b..000000000000
--- a/external/libepubgen/0001-Support-writing-mode-for-reflowable-layout-method.patch.1
+++ /dev/null
@@ -1,264 +0,0 @@
-From 9b1c3fd42fa256b58dfb4dedd070954406c25596 Mon Sep 17 00:00:00 2001
-From: Mark Hung <marklh9@gmail.com>
-Date: Mon, 19 Mar 2018 20:36:11 +0800
-Subject: [PATCH 1/3] Support writing-mode for reflowable layout method.
-
-Convert style:writing-mode in page properties to css style for
-HTML body element. The class names of body elements will be like
-"body0".
----
- src/lib/EPUBGenerator.cpp | 1 +
- src/lib/EPUBHTMLGenerator.cpp | 18 +++++++++++++--
- src/lib/EPUBSpanStyleManager.cpp | 45 ++++++++++++++++++++++++++++++++------
- src/lib/EPUBSpanStyleManager.h | 14 ++++++++----
- src/test/EPUBTextGeneratorTest.cpp | 25 +++++++++++++++++++++
- 5 files changed, 90 insertions(+), 13 deletions(-)
-
-diff --git a/src/lib/EPUBGenerator.cpp b/src/lib/EPUBGenerator.cpp
-index 83f3f40..56db4dc 100644
---- a/src/lib/EPUBGenerator.cpp
-+++ b/src/lib/EPUBGenerator.cpp
-@@ -122,6 +122,7 @@ void EPUBGenerator::startNewHtmlFile()
- if (m_layoutMethod == EPUB_LAYOUT_METHOD_FIXED && m_currentHtml)
- m_currentHtml->getPageProperties(pageProperties);
- m_currentHtml = m_htmlManager.create(m_imageManager, m_fontManager, m_listStyleManager, m_paragraphStyleManager, m_spanStyleManager, m_tableStyleManager, m_stylesheetPath, m_stylesMethod, m_layoutMethod, m_version);
-+
- if (m_layoutMethod == EPUB_LAYOUT_METHOD_FIXED)
- m_currentHtml->setPageProperties(pageProperties);
-
-diff --git a/src/lib/EPUBHTMLGenerator.cpp b/src/lib/EPUBHTMLGenerator.cpp
-index 342213e..d5cc0d2 100644
---- a/src/lib/EPUBHTMLGenerator.cpp
-+++ b/src/lib/EPUBHTMLGenerator.cpp
-@@ -600,6 +600,20 @@ void EPUBHTMLGenerator::endDocument()
- RVNGPropertyList bodyAttrs;
- if (m_impl->m_version >= 30)
- bodyAttrs.insert("xmlns:epub", "http://www.idpf.org/2007/ops");
-+
-+ if (m_impl->m_actualPageProperties["style:writing-mode"])
-+ {
-+ switch (m_impl->m_stylesMethod)
-+ {
-+ case EPUB_STYLES_METHOD_CSS:
-+ bodyAttrs.insert("class", m_impl->m_spanManager.getClass(m_impl->m_actualPageProperties, true).c_str());
-+ break;
-+ case EPUB_STYLES_METHOD_INLINE:
-+ bodyAttrs.insert("style", m_impl->m_spanManager.getStyle(m_impl->m_actualPageProperties, true).c_str());
-+ break;
-+ }
-+ }
-+
- m_impl->m_document.openElement("body", bodyAttrs);
- m_impl->flushUnsent(m_impl->m_document);
- m_impl->m_document.closeElement("body");
-@@ -710,10 +724,10 @@ void EPUBHTMLGenerator::openSpan(const RVNGPropertyList &propList)
- switch (m_impl->m_stylesMethod)
- {
- case EPUB_STYLES_METHOD_CSS:
-- attrs.insert("class", m_impl->m_spanManager.getClass(propList).c_str());
-+ attrs.insert("class", m_impl->m_spanManager.getClass(propList, false).c_str());
- break;
- case EPUB_STYLES_METHOD_INLINE:
-- attrs.insert("style", m_impl->m_spanManager.getStyle(propList).c_str());
-+ attrs.insert("style", m_impl->m_spanManager.getStyle(propList, false).c_str());
- break;
- }
- m_impl->output(false).openElement("span", attrs);
-diff --git a/src/lib/EPUBSpanStyleManager.cpp b/src/lib/EPUBSpanStyleManager.cpp
-index e25fa26..ded34ba 100644
---- a/src/lib/EPUBSpanStyleManager.cpp
-+++ b/src/lib/EPUBSpanStyleManager.cpp
-@@ -21,7 +21,7 @@ namespace libepubgen
-
- using librevenge::RVNGPropertyList;
-
--std::string EPUBSpanStyleManager::getClass(RVNGPropertyList const &pList)
-+std::string EPUBSpanStyleManager::getClass(RVNGPropertyList const &pList, bool bIsBody)
- {
- if (pList["librevenge:span-id"])
- {
-@@ -31,20 +31,31 @@ std::string EPUBSpanStyleManager::getClass(RVNGPropertyList const &pList)
- }
-
- EPUBCSSProperties content;
-- extractProperties(pList, content);
-+ if (bIsBody)
-+ extractBodyProperties(pList, content);
-+ else
-+ extractSpanProperties(pList, content);
-+
- ContentNameMap_t::const_iterator it = m_contentNameMap.find(content);
- if (it != m_contentNameMap.end())
- return it->second;
- std::stringstream s;
-- s << "span" << m_contentNameMap.size();
-+ if (bIsBody)
-+ s << "body" << (m_numberBody.next() - 1);
-+ else
-+ s << "span" << (m_numberSpan.next() - 1);
-+
- m_contentNameMap[content]=s.str();
- return s.str();
- }
-
--std::string EPUBSpanStyleManager::getStyle(RVNGPropertyList const &pList)
-+std::string EPUBSpanStyleManager::getStyle(RVNGPropertyList const &pList, bool bIsBody)
- {
- EPUBCSSProperties content;
-- extractProperties(pList, content);
-+ if (bIsBody)
-+ extractBodyProperties(pList, content);
-+ else
-+ extractSpanProperties(pList, content);
-
- std::stringstream s;
- for (const auto &property : content)
-@@ -62,7 +73,7 @@ void EPUBSpanStyleManager::defineSpan(RVNGPropertyList const &propList)
- int id=propList["librevenge:span-id"]->getInt();
- RVNGPropertyList pList(propList);
- pList.remove("librevenge:span-id");
-- m_idNameMap[id]=getClass(pList);
-+ m_idNameMap[id]=getClass(pList, false);
- }
-
- void EPUBSpanStyleManager::send(EPUBCSSSink &out)
-@@ -75,7 +86,7 @@ void EPUBSpanStyleManager::send(EPUBCSSSink &out)
- }
- }
-
--void EPUBSpanStyleManager::extractProperties(RVNGPropertyList const &pList, EPUBCSSProperties &cssProps) const
-+void EPUBSpanStyleManager::extractSpanProperties(RVNGPropertyList const &pList, EPUBCSSProperties &cssProps) const
- {
- if (pList["fo:background-color"])
- cssProps["background-color"] = pList["fo:background-color"]->getStr().cstr();
-@@ -227,6 +238,26 @@ void EPUBSpanStyleManager::extractTextPosition(char const *value, EPUBCSSPropert
- }
- }
-
-+void EPUBSpanStyleManager::extractBodyProperties(RVNGPropertyList const &pList, EPUBCSSProperties &cssProps) const
-+{
-+ if (pList["style:writing-mode"])
-+ {
-+ std::string mode = pList["style:writing-mode"]->getStr().cstr();
-+ if (mode == "tb-rl" || mode == "tb")
-+ mode = "vertical-rl";
-+ else if (mode == "tb-lr")
-+ mode = "vertical-lr";
-+ else // For the rest: lr, lr-tb, rl, rl-tb
-+ {
-+ mode = "horizontal-tb";
-+ cssProps["direction"] = (mode == "rl-tb" || mode == "rl")?"rtl":"ltr";
-+ }
-+
-+ cssProps["-epub-writing-mode"] = mode;
-+ cssProps["-webkit-writing-mode"] = mode;
-+ cssProps["writing-mode"] = mode;
-+ }
-+}
- }
-
- /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
-diff --git a/src/lib/EPUBSpanStyleManager.h b/src/lib/EPUBSpanStyleManager.h
-index ec9d0e5..6c18392 100644
---- a/src/lib/EPUBSpanStyleManager.h
-+++ b/src/lib/EPUBSpanStyleManager.h
-@@ -19,6 +19,7 @@
- #include <librevenge/librevenge.h>
-
- #include "EPUBCSSProperties.h"
-+#include "EPUBCounter.h"
-
- namespace libepubgen
- {
-@@ -32,7 +33,7 @@ class EPUBSpanStyleManager
-
- public:
- //! constructor
-- EPUBSpanStyleManager() : m_contentNameMap(), m_idNameMap()
-+ EPUBSpanStyleManager() : m_contentNameMap(), m_idNameMap(), m_numberSpan(), m_numberBody()
- {
- }
- //! destructor
-@@ -42,14 +43,16 @@ public:
- //! define a span style
- void defineSpan(librevenge::RVNGPropertyList const &pList);
- //! returns the class name corresponding to a propertylist
-- std::string getClass(librevenge::RVNGPropertyList const &pList);
-+ std::string getClass(librevenge::RVNGPropertyList const &pList, bool bIsBody);
- //! returns the style string corresponding to a propertylist
-- std::string getStyle(librevenge::RVNGPropertyList const &pList);
-+ std::string getStyle(librevenge::RVNGPropertyList const &pList, bool bIsBody);
- //! send the data to the sink
- void send(EPUBCSSSink &out);
- protected:
- //! convert a property list into a CSS property map
-- void extractProperties(librevenge::RVNGPropertyList const &pList, EPUBCSSProperties &cssProps) const;
-+ void extractSpanProperties(librevenge::RVNGPropertyList const &pList, EPUBCSSProperties &cssProps) const;
-+ //! Extract body styles from a property list into a CSS property map
-+ void extractBodyProperties(librevenge::RVNGPropertyList const &pList, EPUBCSSProperties &cssProps) const;
- //! add data corresponding to a text position into the map
- void extractTextPosition(char const *value, EPUBCSSProperties &cssProps) const;
- //! add data corresponding to the line decoration into the map
-@@ -59,6 +62,9 @@ protected:
- //! a map id -> name
- std::map<int, std::string> m_idNameMap;
-
-+ EPUBCounter m_numberSpan;
-+ EPUBCounter m_numberBody;
-+
- private:
- EPUBSpanStyleManager(EPUBSpanStyleManager const &orig);
- EPUBSpanStyleManager operator=(EPUBSpanStyleManager const &orig);
-diff --git a/src/test/EPUBTextGeneratorTest.cpp b/src/test/EPUBTextGeneratorTest.cpp
-index ddf0c90..cf5e35f 100644
---- a/src/test/EPUBTextGeneratorTest.cpp
-+++ b/src/test/EPUBTextGeneratorTest.cpp
-@@ -235,6 +235,7 @@ private:
- CPPUNIT_TEST(testFixedLayoutSpine);
- CPPUNIT_TEST(testPageBreak);
- CPPUNIT_TEST(testPageBreakImage);
-+ CPPUNIT_TEST(testWritingMode);
- CPPUNIT_TEST_SUITE_END();
-
- private:
-@@ -274,6 +275,7 @@ private:
- void testFixedLayoutSpine();
- void testPageBreak();
- void testPageBreakImage();
-+ void testWritingMode();
-
- /// 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);
-@@ -1350,6 +1352,29 @@ void EPUBTextGeneratorTest::testPageBreakImage()
- CPPUNIT_ASSERT(package.m_streams.find("OEBPS/sections/section0002.xhtml") != package.m_streams.end());
- }
-
-+void EPUBTextGeneratorTest::testWritingMode()
-+{
-+ 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();
-+ }
-+ generator.endDocument();
-+ assertCss(package.m_cssStreams["OEBPS/styles/stylesheet.css"], ".body0", "writing-mode: vertical-rl", true);
-+ assertXPath(package.m_streams["OEBPS/sections/section0001.xhtml"], "//xhtml:body", "class", "body0");
-+}
-+
- CPPUNIT_TEST_SUITE_REGISTRATION(EPUBTextGeneratorTest);
-
- }
---
-2.14.1
-