X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/17a9ed3b7ef12e0786ddf46bf8a52b1087224762..a5178216e32b433b9be6311c2d5f7a6e6fa1b1c5:/librarian/pdf.py diff --git a/librarian/pdf.py b/librarian/pdf.py index b8aafdb..33886e8 100644 --- a/librarian/pdf.py +++ b/librarian/pdf.py @@ -35,6 +35,8 @@ functions.reg_strip() functions.reg_starts_white() functions.reg_ends_white() functions.reg_texcommand() +functions.reg_urlquote() +functions.reg_breakurl() STYLESHEETS = { 'wl2tex': 'pdf/wl2tex.xslt', @@ -83,7 +85,7 @@ def substitute_hyphens(doc): insert_tags(doc, re.compile("(?<=[^-\s])-(?=[^-\s])"), "dywiz", - exclude=[DCNS("identifier.url"), DCNS("rights.license")] + exclude=[DCNS("identifier.url"), DCNS("rights.license"), 'www'] ) @@ -94,6 +96,18 @@ def fix_hanging(doc): exclude=[DCNS("identifier.url"), DCNS("rights.license")] ) +def fix_tables(doc): + for kol in doc.iter(tag='kol'): + if kol.tail is not None: + if not kol.tail.strip(): + kol.tail = None + for table in doc.iter(tag='tabela'): + if table.get('ramka') == '1' or table.get('ramki') == '1': + table.set('_format', '|' + 'X|' * len(table[0])) + else: + table.set('_format', 'X' * len(table[0])) + + def move_motifs_inside(doc): """ moves motifs to be into block elements """ @@ -147,7 +161,8 @@ def parse_creator(doc): and adds *_parsed versions with forenames first. """ for person in doc.xpath("|".join('//dc:'+(tag) for tag in ( - 'creator', 'contributor.translator')), + 'creator', 'contributor.translator', + 'contributor.editor', 'contributor.technical_editor')), namespaces = {'dc': str(DCNS)})[::-1]: if not person.text: continue @@ -184,7 +199,7 @@ def package_available(package, args='', verbose=False): def transform(wldoc, verbose=False, save_tex=None, morefloats=None, - cover=None, flags=None, customizations=None): + cover=None, flags=None, customizations=None, ilustr_path='', latex_dir=False): """ produces a PDF file with XeLaTeX wldoc: a WLDocument @@ -198,21 +213,22 @@ def transform(wldoc, verbose=False, save_tex=None, morefloats=None, # Parse XSLT try: + book_info = wldoc.book_info document = load_including_children(wldoc) root = document.edoc.getroot() if cover: if cover is True: cover = WLCover - bound_cover = cover(document.book_info) + bound_cover = cover(book_info, width=2400) root.set('data-cover-width', str(bound_cover.width)) root.set('data-cover-height', str(bound_cover.height)) if bound_cover.uses_dc_cover: - if document.book_info.cover_by: - root.set('data-cover-by', document.book_info.cover_by) - if document.book_info.cover_source: + if book_info.cover_by: + root.set('data-cover-by', book_info.cover_by) + if book_info.cover_source: root.set('data-cover-source', - document.book_info.cover_source) + book_info.cover_source) if flags: for flag in flags: root.set('flag-' + flag, 'yes') @@ -237,6 +253,7 @@ def transform(wldoc, verbose=False, save_tex=None, morefloats=None, parse_creator(document.edoc) substitute_hyphens(document.edoc) fix_hanging(document.edoc) + fix_tables(document.edoc) # wl -> TeXML style_filename = get_stylesheet("wl2tex") @@ -247,6 +264,9 @@ def transform(wldoc, verbose=False, save_tex=None, morefloats=None, # TeXML -> LaTeX temp = mkdtemp('-wl2pdf') + for ilustr in document.edoc.findall("//ilustr"): + shutil.copy(os.path.join(ilustr_path, ilustr.get("src")), temp) + if cover: with open(os.path.join(temp, 'cover.png'), 'w') as f: bound_cover.save(f) @@ -265,6 +285,13 @@ def transform(wldoc, verbose=False, save_tex=None, morefloats=None, # LaTeX -> PDF shutil.copy(get_resource('pdf/wl.cls'), temp) shutil.copy(get_resource('res/wl-logo.png'), temp) + shutil.copy(get_resource('res/prawokultury-logo.png'), temp) + # shutil.copy(get_resource('res/trust-logo.eps'), temp) + shutil.copy(get_resource('res/fnp-logo.eps'), temp) + # shutil.copy(get_resource('res/koed-logo.eps'), temp) + + if latex_dir: + return temp try: cwd = os.getcwd()