X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/e31846b5146f144013121af2112f1ce62c226bc8..77004f7537a472419bf9701c8522a774a0c29245:/src/librarian/builders/epub.py diff --git a/src/librarian/builders/epub.py b/src/librarian/builders/epub.py index 6fc0e74..e009d4a 100644 --- a/src/librarian/builders/epub.py +++ b/src/librarian/builders/epub.py @@ -1,18 +1,19 @@ +# This file is part of Librarian, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Wolne Lektury. See NOTICE for more information. +# from datetime import date +import io import os +import re import tempfile from ebooklib import epub from lxml import etree -import six from librarian import functions, OutputFile, get_resource, XHTMLNS from librarian.cover import make_cover from librarian.embeds.mathml import MathML -import librarian.epub from librarian.fonts import strip_font - - class Xhtml: def __init__(self): self.element = etree.XML('''WolneLektury.pl''') @@ -61,8 +62,6 @@ class Builder: def forget_fragment(self, name): del self.cursors[name] - - @property def base_url(self): if self._base_url is not None: @@ -80,10 +79,13 @@ class Builder: class EpubBuilder(Builder): file_extension = 'epub' isbn_field = 'isbn_epub' + orphans = True - def __init__(self, *args, **kwargs): + def __init__(self, *args, debug=False, **kwargs): self.chars = set() self.fundr = 0 + self.debug = debug + self.splits = [] super().__init__(*args, **kwargs) def build(self, document, **kwargs): @@ -238,7 +240,7 @@ class EpubBuilder(Builder): p = etree.XML("""

Ta lektura, podobnie jak tysiące innych, jest dostępna on-line na stronie - wolnelektury.pl. + wolnelektury.pl.

""") p[0].attrib['href'] = str(self.document.meta.url) tp.append(p) @@ -248,7 +250,7 @@ class EpubBuilder(Builder): tp.append(etree.XML("""

- Utwór opracowany został w ramach projektu Wolne Lektury przez fundację Nowoczesna Polska. + Utwór opracowany został w ramach projektu Wolne Lektury przez fundację Wolne Lektury.

""")) @@ -256,7 +258,7 @@ class EpubBuilder(Builder): etree.SubElement(tp, 'p', **{"class": "info"}).text = getattr(self.document.meta, self.isbn_field) tp.append(etree.XML("""""")) self.add_html( @@ -283,13 +285,13 @@ class EpubBuilder(Builder): for i, author in enumerate(self.document.meta.authors): self.output.add_author( author.readable(), - file_as=six.text_type(author), + file_as=str(author), uid='creator{}'.format(i) ) for translator in self.document.meta.translators: self.output.add_author( translator.readable(), - file_as=six.text_type(translator), + file_as=str(translator), role='trl', uid='translator{}'.format(i) ) @@ -303,6 +305,7 @@ class EpubBuilder(Builder): def add_toc(self): item = epub.EpubNav() + item.add_link(href='style.css', rel='stylesheet', type='text/css') self.output.add_item(item) self.output.spine.append(item) self.output.add_item(epub.EpubNcx()) @@ -319,7 +322,7 @@ class EpubBuilder(Builder): def add_support_page(self): self.add_file( - get_resource('epub/support.xhtml'), + get_resource('res/epub/support.xhtml'), spine=True, toc='Wesprzyj Wolne Lektury' ) @@ -329,7 +332,7 @@ class EpubBuilder(Builder): media_type='image/png' ) self.add_file( - get_resource('epub/style.css'), + get_resource('res/epub/style.css'), media_type='text/css' ) @@ -381,8 +384,6 @@ class EpubBuilder(Builder): doctype='' ) - html = librarian.epub.squeeze_whitespace(html) - self.add_file( content=html, **kwargs @@ -558,7 +559,7 @@ class EpubBuilder(Builder): p[-1].tail = '.' etree.SubElement(p, "br") p[-1].tail = ( - "Fundacja Nowoczesna Polska zastrzega sobie prawa do wydania " + "Fundacja Wolne Lektury zastrzega sobie prawa do wydania " "krytycznego zgodnie z art. Art.99(2) Ustawy o prawach autorskich " "i prawach pokrewnych. Wykorzystując zasoby z Wolnych Lektur, " "należy pamiętać o zapisach licencji oraz zasadach, które " @@ -589,9 +590,11 @@ class EpubBuilder(Builder): newp().text = m.description - if m.editors: + editors = self.document.editors() + if editors: newp().text = 'Opracowanie redakcyjne i przypisy: %s.' % ( - ', '.join(e.readable() for e in sorted(self.document.editors()))) + ', '.join(e.readable() for e in sorted(editors)) + ) if m.funders: etree.SubElement(d, 'p', {'class': 'minor-info'}).text = '''Publikację wsparli i wsparły: @@ -666,7 +669,7 @@ class EpubBuilder(Builder): cover_maker = self.make_cover - cover_file = six.BytesIO() + cover_file = io.BytesIO() cover = cover_maker(self.document.meta, width=600) cover.save(cover_file) cover_name = 'cover.%s' % cover.ext() @@ -707,3 +710,8 @@ class EpubBuilder(Builder): file_name=name ) return name + + def process_comment(self, comment): + m = re.match(r'TRIM:(\d+)', comment.text) + if m is not None: + self.splits.append(comment.sourceline - int(m.group(1)))