Some prelim work on builder api.
[librarian.git] / src / librarian / functions.py
index 15e931c..cde6494 100644 (file)
@@ -1,12 +1,9 @@
-# -*- coding: utf-8 -*-
-#
 # This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
-# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+# Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
 #
-from __future__ import unicode_literals
-
 from lxml import etree
 import re
+from ebooklib import epub
 
 from librarian.dcparser import Person
 from librarian import get_resource
@@ -20,11 +17,11 @@ def _register_function(f):
 
 def reg_substitute_entities():
     entity_substitutions = [
-        (u'---', u'—'),
-        (u'--', u'–'),
-        (u'...', u'…'),
-        (u',,', u'„'),
-        (u'"', u'”'),
+        ('---', '—'),
+        ('--', '–'),
+        ('...', '…'),
+        (',,', '„'),
+        ('"', '”'),
     ]
 
     def substitute_entities(context, text):
@@ -67,32 +64,6 @@ def reg_ends_white():
     _register_function(ends_white)
 
 
-def reg_wrap_words():
-    def wrap_words(context, text, wrapping):
-        """
-        XPath extension function automatically wrapping words
-        in passed text.
-        """
-        if isinstance(text, list):
-            text = ''.join(text)
-        if not wrapping:
-            return text
-
-        words = re.split(r'\s', text)
-
-        line_length = 0
-        lines = [[]]
-        for word in words:
-            line_length += len(word) + 1
-            if line_length > wrapping:
-                # Max line length was exceeded. We create new line
-                lines.append([])
-                line_length = len(word)
-            lines[-1].append(word)
-        return '\n'.join(' '.join(line) for line in lines)
-    _register_function(wrap_words)
-
-
 def reg_person_name():
     def person_name(context, text):
         """ Converts "Name, Forename" to "Forename Name" """
@@ -130,7 +101,7 @@ def mathml_latex(context, trees):
     from librarian.embeds.mathml import MathML
     text = MathML(trees[0]).to_latex().data
     # Remove invisible multiplications, they produce unwanted spaces.
-    text = text.replace(u'\u2062', '')
+    text = text.replace('\u2062', '')
     return text
 
 
@@ -138,14 +109,22 @@ def reg_mathml_latex():
     _register_function(mathml_latex)
 
 
-def reg_mathml_epub(zipf):
+def reg_mathml_epub(output):
     from librarian.embeds.mathml import MathML
 
     def mathml(context, trees):
         data = MathML(trees[0]).to_latex().to_png().data
         name = "math%d.png" % mathml.count
         mathml.count += 1
-        zipf.writestr('OPS/' + name, data)
+        output.add_item(
+            epub.EpubItem(
+                uid='math%d' % mathml.count,
+                file_name=name,
+                media_type='image/png',
+                content=data
+            )
+        )
+
         return name
     mathml.count = 0
     _register_function(mathml)