#
from __future__ import with_statement
+from copy import deepcopy
import os
import os.path
import subprocess
from librarian import XMLNamespace, RDFNS, DCNS, WLNS, NCXNS, OPFNS, XHTMLNS, NoDublinCore
from librarian.dcparser import BookInfo
+from librarian.cover import ImageCover
from librarian import functions, get_resource
.replace(",,", u"\u201E")\
.replace('"', u"\u201D")\
.replace("'", u"\u2019")
- if node.tag == 'extra':
+ if node.tag in ('uwaga', 'extra'):
+ t = node.tail
node.clear()
- else:
- node.text = replace_chars(node.text)
- node.tail = replace_chars(node.tail)
- for child in node:
- replace_characters(child)
+ node.tail = t
+ node.text = replace_chars(node.text)
+ node.tail = replace_chars(node.tail)
+ for child in node:
+ replace_characters(child)
def find_annotations(annotations, source, part_no):
child.clear()
child.tail = tail
child.text = number
- if child.tag not in ('extra',):
+ if child.tag not in ('extra', 'uwaga'):
find_annotations(annotations, child, part_no)
make_dir: writes output to <output_dir>/<author>/<slug>.epub instead of <output_dir>/<slug>.epub
sample=n: generate sample e-book (with at least n paragraphs)
cover: a cover.Cover object
- flags: less-advertising,
+ flags: less-advertising, images, not-wl
"""
def transform_file(input_xml, chunk_counter=1, first=True, sample=None):
else:
output_file = open(os.path.join(output_dir, os.path.splitext(os.path.basename(file_path))[0] + '.epub'), 'w')
+ opf = xslt(metadata, get_resource('epub/xsltContent.xsl'))
+ manifest = opf.find('.//' + OPFNS('manifest'))
+ spine = opf.find('.//' + OPFNS('spine'))
+
zip = zipfile.ZipFile(output_file, 'w', zipfile.ZIP_DEFLATED)
# write static elements
'media-type="application/oebps-package+xml" />' \
'</rootfiles></container>')
zip.write(get_resource('epub/style.css'), os.path.join('OPS', 'style.css'))
- zip.write(get_resource('res/wl-logo-small.png'), os.path.join('OPS', 'logo_wolnelektury.png'))
-
- opf = xslt(metadata, get_resource('epub/xsltContent.xsl'))
- manifest = opf.find('.//' + OPFNS('manifest'))
- spine = opf.find('.//' + OPFNS('spine'))
+ if not flags or 'not-wl' not in flags:
+ manifest.append(etree.fromstring(
+ '<item id="logo_wolnelektury" href="logo_wolnelektury.png" media-type="image/png" />'))
+ zip.write(get_resource('res/wl-logo-small.png'), os.path.join('OPS', 'logo_wolnelektury.png'))
if cover:
cover_file = StringIO()
opf.getroot()[0].append(etree.fromstring('<meta name="cover" content="cover-image"/>'))
opf.getroot().append(etree.fromstring('<guide><reference href="cover.html" type="cover" title="Okładka"/></guide>'))
+ if flags and 'images' in flags:
+ for ilustr in input_xml.findall('//ilustr'):
+ src = ilustr.get('src')
+ mime = ImageCover(src)().mime_type()
+ zip.write(src, os.path.join('OPS', src))
+ manifest.append(etree.fromstring(
+ '<item id="%s" href="%s" media-type="%s" />' % (src, src, mime)))
+ # get it up to master
+ after = ilustr
+ while after.getparent().tag not in ['powiesc', 'opowiadanie', 'liryka_l', 'liryka_lp', 'dramat_wierszowany_l', 'dramat_wierszowany_lp', 'dramat_wspolczesny']:
+ after = after.getparent()
+ if not(after is ilustr):
+ moved = deepcopy(ilustr)
+ ilustr.tag = 'extra'
+ ilustr.text = None
+ moved.tail = None
+ after.addnext(moved)
+ else:
+ for ilustr in input_xml.findall('//ilustr'):
+ ilustr.tag = 'extra'
annotations = etree.Element('annotations')
'<item id="last" href="last.html" media-type="application/xhtml+xml" />'))
spine.append(etree.fromstring(
'<itemref idref="last" />'))
- html_tree = xslt(input_xml, get_resource('epub/xsltLast.xsl'))
+ stopka = input_xml.find('//stopka')
+ if stopka is not None:
+ stopka.tag = 'stopka_'
+ replace_by_verse(stopka)
+ html_tree = xslt(stopka, get_resource('epub/xsltScheme.xsl'))
+ else:
+ html_tree = xslt(input_xml, get_resource('epub/xsltLast.xsl'))
chars.update(used_chars(html_tree.getroot()))
zip.writestr('OPS/last.html', etree.tostring(
html_tree, method="html", pretty_print=True))