X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/fefdce4e24f9e397df5538fe6e7f54b5ece4d841..82c0860d1520489be56457829d49eb17f165b9cd:/src/librarian/functions.py diff --git a/src/librarian/functions.py b/src/librarian/functions.py index e5a47d6..cde6494 100644 --- a/src/librarian/functions.py +++ b/src/librarian/functions.py @@ -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,29 +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" """ @@ -108,28 +82,26 @@ 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): 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 @@ -137,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)