From: Radek Czajka Date: Thu, 19 Sep 2013 11:13:36 +0000 (+0200) Subject: Add sponsor logos. X-Git-Url: https://git.mdrn.pl/librarian.git/commitdiff_plain/refs/heads/sponsor-logo Add sponsor logos. --- diff --git a/librarian/__init__.py b/librarian/__init__.py index c46d5d1..9b05fb5 100644 --- a/librarian/__init__.py +++ b/librarian/__init__.py @@ -39,6 +39,10 @@ class NoProvider(UnicodeException): """There's no DocProvider specified, and it's needed.""" pass +class NoSponsorProvider(UnicodeException): + """There's no DocProvider specified, and it's needed.""" + pass + class XMLNamespace(object): '''A handy structure to repsent names in an XML namespace.''' @@ -144,6 +148,26 @@ class DirDocProvider(DocProvider): fname = slug + '.xml' return open(os.path.join(self.dir, fname)) +class SponsorProvider(object): + class NoLogo(UnicodeException): pass + + def by_name(self, name): + raise NotImplementedError + +class DirSponsorProvider(SponsorProvider): + exts = ["png", "jpg", "jpeg", "gif"] + + def __init__(self, dir_): + self.dir = dir_ + + def by_name(self, name): + base = name.replace("/", "_") + fnames = ["%s.%s" % (base, ext) for ext in self.exts] + for fname in fnames: + fpath = os.path.join(self.dir, fname) + if os.path.exists(fpath): + return OutputFile.from_filename(fpath) + raise self.NoLogo('Missing sponsor logo: "%s.[%s]"' % (base, ",".join(self.exts))) import lxml.etree as etree import dcparser diff --git a/librarian/book2anything.py b/librarian/book2anything.py index b8b8d27..a0f0932 100755 --- a/librarian/book2anything.py +++ b/librarian/book2anything.py @@ -8,7 +8,7 @@ from collections import namedtuple import os.path import optparse -from librarian import DirDocProvider, ParseError +from librarian import DirDocProvider, DirSponsorProvider, ParseError from librarian.parser import WLDocument from librarian.cover import WLCover @@ -38,7 +38,6 @@ class Book2Anything(object): ext = None # Set file extension, like "pdf". uses_cover = False # Can it add a cover? cover_optional = True # Only relevant if uses_cover - uses_provider = False # Does it need a DocProvider? transform = None # Transform method. Uses WLDocument.as_{ext} by default. parser_options = [] # List of Option objects for additional parser args. transform_options = [] # List of Option objects for additional transform args. @@ -112,12 +111,10 @@ class Book2Anything(object): if options.verbose: print main_input + path, fname = os.path.realpath(main_input).rsplit('/', 1) # Where to find input? - if cls.uses_provider: - path, fname = os.path.realpath(main_input).rsplit('/', 1) - provider = DirDocProvider(path) - else: - provider = None + provider = DirDocProvider(path) + sponsor_provider = DirSponsorProvider(path) # Where to write output? if not (options.output_file or options.output_dir): @@ -126,7 +123,8 @@ class Book2Anything(object): output_file = None # Do the transformation. - doc = WLDocument.from_file(main_input, provider=provider, **parser_args) + doc = WLDocument.from_file(main_input, provider=provider, + sponsor_provider=sponsor_provider, **parser_args) transform = cls.transform if transform is None: transform = getattr(WLDocument, 'as_%s' % cls.ext) diff --git a/librarian/dcparser.py b/librarian/dcparser.py index abee11b..7c8b7af 100644 --- a/librarian/dcparser.py +++ b/librarian/dcparser.py @@ -174,6 +174,8 @@ class WorkInfo(object): Field( DCNS('contributor.funding'), 'funders', salias='funder', multiple=True, default=[]), + Field( DCNS('digitisationSponsor'), 'sponsors', multiple=True, default=[]), + Field( DCNS('date'), 'created_at', as_date), Field( DCNS('date.pd'), 'released_to_public_domain_at', as_date, required=False), Field( DCNS('publisher'), 'publisher'), diff --git a/librarian/parser.py b/librarian/parser.py index a9e8c65..41f4308 100644 --- a/librarian/parser.py +++ b/librarian/parser.py @@ -4,6 +4,7 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from librarian import ValidationError, NoDublinCore, ParseError, NoProvider +from librarian import NoSponsorProvider, DirSponsorProvider from librarian import RDFNS from librarian.cover import WLCover from librarian import dcparser @@ -21,9 +22,11 @@ class WLDocument(object): provider = None def __init__(self, edoc, parse_dublincore=True, provider=None, + sponsor_provider=None, strict=False, meta_fallbacks=None): self.edoc = edoc self.provider = provider + self.sponsor_provider = sponsor_provider root_elem = edoc.getroot() @@ -180,6 +183,11 @@ class WLDocument(object): persons.remove(None) return persons + def sponsor_by_name(self, name): + if self.sponsor_provider is None: + raise NoSponsorProvider + return self.sponsor_provider.by_name(name) + # Converters def as_html(self, *args, **kwargs): diff --git a/librarian/pdf.py b/librarian/pdf.py index 90e4dc2..2d49b61 100644 --- a/librarian/pdf.py +++ b/librarian/pdf.py @@ -245,11 +245,19 @@ def transform(wldoc, verbose=False, save_tex=None, morefloats=None, style_filename = get_stylesheet("wl2tex") style = etree.parse(style_filename) - texml = document.transform(style) - # TeXML -> LaTeX temp = mkdtemp('-wl2pdf') + for i, sponsor in enumerate(book_info.sponsors): + sponsor_logo = wldoc.sponsor_by_name(sponsor) + fname = 'sponsor%d.png' % i + with open(os.path.join(temp, fname), 'w') as f: + f.write(sponsor_logo.get_string()) + ins = etree.Element("data-sponsor", src=fname) + root.insert(0, ins) + + texml = document.transform(style) + if cover: with open(os.path.join(temp, 'cover.png'), 'w') as f: bound_cover.save(f) diff --git a/librarian/pdf/wl.cls b/librarian/pdf/wl.cls index 0de767c..50c4652 100644 --- a/librarian/pdf/wl.cls +++ b/librarian/pdf/wl.cls @@ -126,6 +126,7 @@ Letters={SmallCaps,UppercaseSmallCaps} \pagestyle{plain} \usepackage{fancyhdr} +\usepackage{marginnote} \makeatletter @@ -233,6 +234,13 @@ Letters={SmallCaps,UppercaseSmallCaps} \color{theme} \noindent \rule{\linewidth}{0.4pt} + \ifdefined\sponsors + \marginnote{% + \centering% + \sponsors% + } + \fi + \rightsinfo \vspace{.6em} @@ -269,14 +277,14 @@ Letters={SmallCaps,UppercaseSmallCaps} \vspace{.6em} \emph{Jak możesz pomóc?} - Przekaż 1\% podatku na rozwój Wolnych Lektur: - Fundacja Nowoczesna Polska, KRS 0000070056. + Przekaż 1\% podatku na rozwój Wolnych~Lektur: + Fundacja~Nowoczesna~Polska, KRS~0000070056. - Pomóż uwolnić konkretną książkę, wspierając - \href{http://www.wolnelektury.pl/wesprzyj/}{zbiórkę na stronie wolnelektury.pl}. + Pomóż uwolnić konkretną książkę, wspierając zbiórkę na stronie: + \href{http://wolnelektury.pl/wesprzyj/}{http://wolnelektury.pl/wesprzyj/} - Przekaż darowiznę na konto: - \href{http://nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/}{szczegóły na stronie Fundacji}. + Przekaż darowiznę na konto, szczegóły na stronie: + \href{http://nowoczesnapolska.org.pl/wesprzyj/}{http://nowoczesnapolska.org.pl/wesprzyj/} \color{black} } diff --git a/librarian/pdf/wl2tex.xslt b/librarian/pdf/wl2tex.xslt index 353ecf9..9ccd272 100644 --- a/librarian/pdf/wl2tex.xslt +++ b/librarian/pdf/wl2tex.xslt @@ -105,6 +105,15 @@ \def\funders{Publikację ufundowali i ufundowały: .} + + + \def\sponsors{ + \scriptsize Sfinansowano ze~środków:\\ + + \includegraphics[height=0.25\textwidth,width=0.25\textwidth,keepaspectratio]{} + + } + diff --git a/scripts/book2pdf b/scripts/book2pdf index 68e2d08..fb6f703 100755 --- a/scripts/book2pdf +++ b/scripts/book2pdf @@ -11,7 +11,6 @@ class Book2Pdf(Book2Anything): format_name = "PDF" ext = "pdf" uses_cover = True - uses_provider = True transform_args = [ Option('-t', '--save-tex', dest='save_tex', metavar='FILE', help='path to save the intermediary LaTeX file to'),