Fixed MathML in EPUB.
[librarian.git] / src / librarian / functions.py
index e5a47d6..2899808 100644 (file)
@@ -7,6 +7,7 @@ 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
@@ -69,7 +70,10 @@ def reg_ends_white():
 
 def reg_wrap_words():
     def wrap_words(context, text, wrapping):
-        """XPath extension function automatically wrapping words in passed text"""
+        """
+        XPath extension function automatically wrapping words
+        in passed text.
+        """
         if isinstance(text, list):
             text = ''.join(text)
         if not wrapping:
@@ -108,21 +112,19 @@ def reg_texcommand():
     _register_function(texcommand)
 
 
-def reg_lang_code_3to2():
-    def lang_code_3to2(context, text):
-        """Convert 3-letter language code to 2-letter code"""
-        result = ''
-        text = ''.join(text)
-        with open(get_resource('res/ISO-639-2_8859-1.txt'), 'rb') as f:
-            for line in f.read().decode('latin1').split('\n'):
-                list = line.strip().split('|')
-                if list[0] == text:
-                    result = list[2]
-        if result == '':
-            return text
-        else:
-            return result
-    _register_function(lang_code_3to2)
+def lang_code_3to2(text):
+    """Convert 3-letter language code to 2-letter code"""
+    result = ''
+    text = ''.join(text)
+    with open(get_resource('res/ISO-639-2_8859-1.txt'), 'rb') as f:
+        for line in f.read().decode('latin1').split('\n'):
+            codes = line.strip().split('|')
+            if codes[0] == text:
+                result = codes[2]
+    if result == '':
+        return text
+    else:
+        return result
 
 
 def mathml_latex(context, trees):
@@ -137,14 +139,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)