"""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.'''
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
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
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.
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):
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)
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'),
# 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
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()
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):
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)
\pagestyle{plain}
\usepackage{fancyhdr}
+\usepackage{marginnote}
\makeatletter
\color{theme}
\noindent \rule{\linewidth}{0.4pt}
+ \ifdefined\sponsors
+ \marginnote{%
+ \centering%
+ \sponsors%
+ }
+ \fi
+
\rightsinfo
\vspace{.6em}
\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}
}
\def\funders{Publikację ufundowali i ufundowały:
<TeXML escape="1"><xsl:value-of select="@funders" /></TeXML>.}
</xsl:if>
+
+ <xsl:if test="data-sponsor">
+ \def\sponsors{
+ \scriptsize Sfinansowano ze~środków:\\
+ <xsl:for-each select="data-sponsor">
+ \includegraphics[height=0.25\textwidth,width=0.25\textwidth,keepaspectratio]{<xsl:value-of select="@src" />}
+ </xsl:for-each>
+ }
+ </xsl:if>
</TeXML>
<cmd name="editorialsection" />
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'),