#961: full info in all formats;
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 19 Jan 2011 15:47:33 +0000 (16:47 +0100)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 19 Jan 2011 15:47:33 +0000 (16:47 +0100)
epub: less-advertising flag
some fixes

13 files changed:
librarian/epub.py
librarian/epub/style.css
librarian/epub/xsltLast.xsl
librarian/epub/xsltScheme.xsl
librarian/epub/xsltTitle.xsl
librarian/html.py
librarian/pdf.py
librarian/pdf/wl.sty
librarian/pdf/wl2tex.xslt
librarian/text.py
librarian/xslt/book2html.xslt
librarian/xslt/book2txt.xslt
scripts/book2partner

index ad84ab0..527d050 100644 (file)
@@ -265,7 +265,8 @@ def transform_chunk(chunk_xml, chunk_no, annotations, empty=False, _empty_html_s
     return output_html, toc, chars
 
 
-def transform(provider, slug=None, file_path=None, output_file=None, output_dir=None, make_dir=False, verbose=False, sample=None, cover_fn=None):
+def transform(provider, slug=None, file_path=None, output_file=None, output_dir=None, make_dir=False, verbose=False,
+              sample=None, cover_fn=None, flags=None):
     """ produces a EPUB file
 
     provider: a DocProvider
@@ -275,6 +276,7 @@ def transform(provider, slug=None, file_path=None, output_file=None, output_dir=
     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_fn: function(author, title) -> cover image
+    flags: less-advertising,
     """
 
     def transform_file(input_xml, chunk_counter=1, first=True, sample=None):
@@ -355,6 +357,10 @@ def transform(provider, slug=None, file_path=None, output_file=None, output_dir=
             raise ValueError('either slug or file_path should be specified')
         input_xml = etree.parse(provider[slug])
 
+    if flags:
+        for flag in flags:
+            input_xml.getroot().set(flag, 'yes')
+
     metadata = input_xml.find('.//'+RDFNS('Description'))
     if metadata is None:
         raise NoDublinCore('Document has no DublinCore - which is required.')
index 55ac117..fd98f07 100644 (file)
@@ -183,6 +183,28 @@ p
     margin-bottom: 0.25em;\r
 }\r
 \r
+.intitle\r
+{\r
+    margin: 0;\r
+    text-align: center;\r
+    font-weight: bold;\r
+\r
+    font-size: 1.5em;\r
+    line-height: 1.5em;\r
+    margin-bottom: 0.25em;\r
+}\r
+\r
+.insubtitle\r
+{\r
+    margin: 0;\r
+    text-align: center;\r
+    font-weight: bold;\r
+\r
+    font-size: 1em;\r
+    line-height: 1.5em;\r
+    margin-bottom: 0.25em;\r
+}\r
+\r
 .collection\r
 {\r
     margin: 0;\r
index 6cb2748..3949878 100644 (file)
                   </xsl:when>\r
                   <xsl:otherwise>\r
                     Ten utwór nie jest chroniony prawem autorskim i znajduje się w domenie\r
-                    publicznej, co oznacza, że możesz go swobodnie wykorzystywać, publikować\r
+                    publicznej, co oznacza że możesz go swobodnie wykorzystywać, publikować\r
                     i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi materiałami\r
-                    (przypisy, motywy literackie etc.) które podlegają prawu autorskiemu, to\r
+                    (przypisy, motywy literackie etc.), które podlegają prawu autorskiemu, to\r
                     te dodatkowe materiały udostępnione są na licencji\r
                     <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons\r
-                    Uznanie Autorstwa - Na Tych Samych Warunkach 3.0 PL</a>.\r
+                    Uznanie Autorstwa  Na Tych Samych Warunkach 3.0 PL</a>.\r
                   </xsl:otherwise>\r
               </xsl:choose>\r
           </p>\r
           </a></p>\r
 \r
           <xsl:if test="//dc:source" >\r
-            <p class="info">Na podstawie: <xsl:value-of select="//dc:source" /></p>\r
+            <p class="info">Tekst opracowany na podstawie: <xsl:value-of select="//dc:source" /></p>\r
           </xsl:if>\r
 \r
-          <xsl:if test="//dc:contributor.editor|//dc:contributor.technical_editor">\r
-              <p class="info">\r
-                Opracowanie redakcyjne i przypisy:\r
-                <xsl:apply-templates select="//dc:contributor.editor|//dc:contributor.technical_editor" />\r
-              </p>\r
+          <xsl:if test="//dc:description" >\r
+            <p class="info"><xsl:value-of select="//dc:description" /></p>\r
           </xsl:if>\r
 \r
+          <xsl:call-template name="editors" />\r
+\r
           <p class="info">&#160;</p>\r
           <p class="minor info">\r
               Plik wygenerowany dnia <span id="file_date"><xsl:value-of select="substring(date:date(), 1, 10)" /></span>.\r
     <xsl:value-of select="." disable-output-escaping="yes" />\r
   </xsl:template>\r
 \r
+  <xsl:template name="editors">\r
+    <xsl:if test="//dc:contributor.editor|//dc:contributor.technical_editor">\r
+        <p class="info">\r
+            <xsl:text>Opracowanie redakcyjne i przypisy: </xsl:text>\r
+            <xsl:for-each select="//dc:contributor.editor|//dc:contributor.technical_editor">\r
+                <xsl:if test="position() != 1">, </xsl:if>\r
+                <xsl:apply-templates mode="person" />\r
+            </xsl:for-each>.\r
+        </p>\r
+    </xsl:if>\r
+  </xsl:template>\r
+\r
   <xsl:template match="dc:contributor.editor|dc:contributor.technical_editor">\r
       <br /><xsl:apply-templates mode='person' />\r
   </xsl:template>\r
index 8b384c3..1543268 100644 (file)
@@ -94,7 +94,7 @@
   <xsl:template match="dzielo_nadrzedne" />\r
 \r
   <xsl:template match="nazwa_utworu" mode="poczatek" >\r
-    <h2 class="author" xmlns="http://www.w3.org/1999/xhtml">\r
+    <h2 class="intitle" xmlns="http://www.w3.org/1999/xhtml">\r
       <xsl:apply-templates />\r
     </h2>\r
   </xsl:template>\r
   <xsl:template match="nazwa_utworu" />\r
 \r
   <xsl:template match="podtytul" mode="poczatek">\r
-    <h2 class="author" xmlns="http://www.w3.org/1999/xhtml">\r
+    <h2 class="insubtitle" xmlns="http://www.w3.org/1999/xhtml">\r
       <xsl:apply-templates />\r
     </h2>\r
   </xsl:template>\r
index 347f038..53bbb1a 100644 (file)
 \r
           <p class="info">&#160;</p>\r
 \r
-          <xsl:apply-templates select="//dc:contributor.translator" />\r
+          <xsl:call-template name="translators" />\r
 \r
-          <!--p class="info">\r
+          <xsl:if test="not(utwor/@less-advertising)">\r
+            <p class="info">\r
               <a>\r
                   <xsl:attribute name="href">\r
                       <xsl:value-of select="//dc:identifier.url" />\r
                   Ta lektura</a>,\r
               podobnie jak tysiące innych, jest dostępna on-line na stronie\r
               <a href="http://www.wolnelektury.pl/">wolnelektury.pl</a>.\r
-          </p-->\r
+            </p>\r
+          </xsl:if>\r
 \r
           <p class="info">\r
-            Utwór opracowany został w&#160;ramach projektu<a href="http://www.wolnelektury.pl/"> Wolne Lektury</a> przez<a href="http://www.nowoczesnapolska.org.pl/"> Fundację Nowoczesna Polska</a>.\r
+            Utwór opracowany został w&#160;ramach projektu<a href="http://www.wolnelektury.pl/"> Wolne Lektury</a> przez<a href="http://www.nowoczesnapolska.org.pl/"> fundację Nowoczesna Polska</a>.\r
           </p>\r
 \r
           <p class="footer info">\r
     </h2>\r
   </xsl:template>\r
 \r
-  <xsl:template match="dc:contributor.translator">\r
-    <p class="info">\r
-      tłum. <xsl:apply-templates mode="person" />\r
-    </p>\r
+  <xsl:template name="translators">\r
+    <xsl:if test="//dc:contributor.translator">\r
+        <p class="info">\r
+            <xsl:text>tłum. </xsl:text>\r
+            <xsl:for-each select="//dc:contributor.translator">\r
+                <xsl:if test="position() != 1">, </xsl:if>\r
+                <xsl:apply-templates mode="person" />\r
+            </xsl:for-each>\r
+        </p>\r
+    </xsl:if>\r
   </xsl:template>\r
 \r
   <xsl:template match="text()" mode="person">\r
index 4e9abd0..1f0615f 100644 (file)
@@ -16,6 +16,7 @@ from librarian import functions
 from lxml.etree import XMLSyntaxError, XSLTApplyError
 
 functions.reg_substitute_entities()
+functions.reg_person_name()
 
 STYLESHEETS = {
     'legacy': 'xslt/book2html.xslt',
index baf7be4..f8a4d73 100644 (file)
@@ -128,13 +128,15 @@ def hack_motifs(doc):
 
 
 def parse_creator(doc):
-    """ find all dc:creator tags and add dc:creator_parsed with forenames first """
-    for creator in doc.findall('//'+DCNS('creator')):
-        p = Person.from_text(creator.text)
-        creator_parsed = deepcopy(creator)
-        creator_parsed.tag = DCNS('creator_parsed')
-        creator_parsed.text = ' '.join(p.first_names + (p.last_name,))
-        creator.getparent().insert(0, creator_parsed)
+    """ find all dc:creator and dc.contributor tags and add *_parsed versions with forenames first """
+    for person in doc.xpath("|".join('//dc:'+(tag) for tag in (
+                    'creator', 'contributor.translator', 'contributor.editor', 'contributor.technical_editor')),
+                    namespaces = {'dc': str(DCNS)})[::-1]:
+        p = Person.from_text(person.text)
+        person_parsed = deepcopy(person)
+        person_parsed.tag = person.tag + '_parsed'
+        person_parsed.text = p.readable()
+        person.getparent().insert(0, person_parsed)
 
 
 def get_stylesheet(name):
@@ -286,9 +288,9 @@ def load_including_children(provider, slug=None, uri=None, file_path=None):
         parse_dublincore=True)
 
     f.close()
-
+    print document.book_info
     for child_uri in document.book_info.parts:
+        print child_uri
         child = load_including_children(provider, uri=child_uri)
         document.edoc.getroot().append(child.edoc.getroot())
-
     return document
index a7a97ba..3a8016f 100644 (file)
@@ -111,36 +111,45 @@ Letters={SmallCaps,UppercaseSmallCaps}
         \href{http://www.wolnelektury.pl}{\xbox{\includegraphics[width=\textwidth]{wl-logo.png}}}
     \end{minipage}
     \begin{minipage}[t]{.65\textwidth}\vspace{0pt}
-        Na podstawie: \sourceinfo
 
+        \href{\bookurl}{Ta lektura}, podobnie jak tysiące innych, jest dostępna on-line na stronie
+        \href{http://www.wolnelektury.pl/}{wolnelektury.pl}.
         \vspace{.5em}
 
-        Wersja lektury on-line dostępna jest \href{\bookurl}{na stronie wolnelektury.pl}.
-        \vspace{.5em}
-
-        \rightsinfo
-
-        \vspace{.6em}
+        Utwór opracowany został w ramach projektu \href{http://www.wolnelektury.pl/}{Wolne Lektury}
+        przez \href{http://nowoczesnapolska.org.pl}{fundację Nowoczesna Polska}.
 
     \end{minipage}
     \noindent \rule{\linewidth}{0.4pt}
 
     \vspace{.6em}
     \color{black}
+    }
+}
+
+\newcommand{\editorialsection}{
+  \begin{figure}[b!]
+  {
+    \footnotesize
+    \color{theme}
+    \noindent \rule{\linewidth}{0.4pt}
 
-%    \begin{figure}[b!]
-%        \footnotesize
-%        \color{theme}
-%        \noindent \rule{\linewidth}{0.4pt}
+    \rightsinfo
+    \vspace{.6em}
 
-%        Szkolna biblioteka internetowa Wolne Lektury tworzona jest dzięki pracy Wolontariuszy, ale to osoby
-%        zatrudnione w~FNP będą musiały wymyślić, co powinno zostać napisane w~tym miejscu. Można zupełnie usunąć
-%        tę sekcję, ale autor konwertera chciał się popisać, że umie coś takiego zrobić.
-%        \color{black}
-%    \end{figure}
-    }
+    \sourceinfo
+
+    \description
+    \vspace{.6em}
+
+    Opracowanie redakcyjne i przypisy: \editors.
+
+    \color{black}
+  }
+  \end{figure}
 }
 
+
 \newcommand{\typosubsubsection}[1]{%
 {\textsc{#1}}
 }
@@ -162,6 +171,12 @@ Letters={Uppercase}
 %{\addfontfeature{Scale=2.0, FakeStretch=0.98, LetterSpace=-2.0}\emph{#1}}
 }
 
+
+\newcommand{\tytul}[1]{%
+#1%
+\vspace{1em}%
+}
+
 \newcommand{\nazwapodutworu}[1]{%
 \section*{\typosection{#1}}%
 }
@@ -170,14 +185,23 @@ Letters={Uppercase}
 \subsection*{\typosubsection{#1}}%
 }
 
+\newcommand{\dzielonadrzedne}[1]{%
+\subsection*{\typosubsubsection{#1}}%
+}
+
 \newcommand{\nazwautworu}[1]{%
 \section*{\typosection{#1}}%
 }
 
 \newcommand{\podtytul}[1]{%
-\subsection*{\typosubsection{#1}}%
+\subsection*{\typosubsubsection{#1}}%
 }
 
+\newcommand{\translator}[1]{%
+\subsection*{\typosubsubsection{tłum. #1}}%
+}
+
+
 \newcommand{\powiesc}[1]{#1}
 \newcommand{\opowiadanie}[1]{#1}
 \newcommand{\lirykal}[1]{#1}
index c3abdd6..4ca109e 100644 (file)
         <env name="document">
             <cmd name="maketitle" />
 
-            <xsl:choose>
+            <cmd name="tytul"><parm>
+              <xsl:choose>
                 <xsl:when test="(powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny)/nazwa_utworu">
-                    <xsl:apply-templates select="(powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny)/autor_utworu" mode="title" />
                     <!-- title in master -->
+                    <xsl:apply-templates select="(powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny)/autor_utworu" mode="title" />
+                    <xsl:apply-templates select="(powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny)/dzielo_nadrzedne" mode="title" />
+                    <xsl:apply-templates select="(powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny)/nazwa_utworu" mode="title" />
+                    <xsl:apply-templates select="(powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny)/podtytul" mode="title" />
+                    <!-- dc in master or not -->
+                    <cmd name="translatorsline" />
                 </xsl:when>
                 <xsl:otherwise>
                     <!-- look for author title in dc -->
                     <xsl:apply-templates select="rdf:RDF" mode="firstdctitle" />
                     <xsl:apply-templates select="powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny" mode='firstdctitle' />
                 </xsl:otherwise>
-            </xsl:choose>
+              </xsl:choose>
+            </parm></cmd>
             <xsl:apply-templates select="powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny" />
             <xsl:apply-templates select="utwor" mode="part" />
+            <cmd name="editorialsection" />
         </env>
     </TeXML>
 </xsl:template>
 
 <xsl:template match="utwor" mode="part">
-    <!-- title for empty dc -->
-    <xsl:choose>
+    <cmd name="tytul"><parm>
+      <xsl:choose>
         <xsl:when test="(powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny)/nazwa_utworu">
             <!-- title in master -->
+            <xsl:apply-templates select="(powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny)/nazwa_utworu" mode="title" />
+            <xsl:apply-templates select="(powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny)/podtytul" mode="title" />
         </xsl:when>
         <xsl:otherwise>
             <!-- look for title in dc -->
             <xsl:apply-templates select="rdf:RDF" mode="dctitle" />
             <xsl:apply-templates select="powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny" mode='dctitle' />
         </xsl:otherwise>
-    </xsl:choose>
+      </xsl:choose>
+    </parm></cmd>
 
     <xsl:apply-templates select="powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny" />
     <xsl:apply-templates select="utwor" mode="part" />
 </xsl:template>
 
 <xsl:template match="rdf:RDF" mode="titlepage">
-    <cmd name='title'><parm>
-        <xsl:apply-templates select=".//dc:title/node()" mode="inline" />
-    </parm></cmd>
-    <cmd name='author'><parm>
-        <xsl:apply-templates select=".//dc:creator_parsed/node()" mode="inline" />
-    </parm></cmd>
     <TeXML escape="0">
-        \def\sourceinfo{<xsl:apply-templates select=".//dc:source" mode="inline" />}
+        \def\authors{<xsl:call-template name="authors" />}
+        \author{\authors}
+        \title{<xsl:apply-templates select=".//dc:title" />}
+        \def\translatorsline{<xsl:call-template name="translators" />}
+
         \def\bookurl{<xsl:value-of select=".//dc:identifier.url" />}
-        \def\rightsinfo{Ten utwór nie jest chroniony prawem autorskim i~znajduje się w~domenie publicznej,
-            co oznacza, że możesz go swobodnie wykorzystywać, publikować i~rozpowszechniać.}
+
+        \def\rightsinfo{Ten utwór nie jest chroniony prawem autorskim i~znajduje się w~domenie
+            publicznej, co oznacza że możesz go swobodnie wykorzystywać, publikować
+            i~rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi materiałami
+            (przypisy, motywy literackie etc.), które podlegają prawu autorskiemu, to
+            te dodatkowe materiały udostępnione są na licencji
+            \href{http://creativecommons.org/licenses/by-sa/3.0/}{Creative Commons
+            Uznanie Autorstwa – Na Tych Samych Warunkach 3.0 PL}.}
         <xsl:if test=".//dc:rights.license">
             \def\rightsinfo{Ten utwór jest udostepniony na licencji
             \href{<xsl:value-of select=".//dc:rights.license" />}{<xsl:value-of select=".//dc:rights" />}.}
         </xsl:if>
+
+        \def\sourceinfo{
+            <xsl:if test=".//dc:source">
+                Tekst opracowany na podstawie: <xsl:apply-templates select=".//dc:source" mode="inline" />
+                \vspace{.6em}
+            </xsl:if>}
+        \def\description{<xsl:apply-templates select=".//dc:description" mode="inline" />}
+        \def\editors{<xsl:call-template name="editors" />}
     </TeXML>
 </xsl:template>
 
 </xsl:template>
 
 <xsl:template match="rdf:RDF" mode="firstdctitle">
-    <cmd name="autorutworu"><parm>
-        <xsl:apply-templates select=".//dc:creator_parsed/node()" mode="inline" />
-    </parm></cmd>
+    <cmd name="autorutworu"><parm><cmd name="authors"/></parm></cmd>
     <cmd name="nazwautworu"><parm>
         <xsl:apply-templates select=".//dc:title/node()" mode="inline" />
     </parm></cmd>
+    <cmd name="translatorsline" />
 </xsl:template>
 
 
 <!-- ========================================== -->
 
 <!-- only in root -->
-<xsl:template match="autor_utworu" mode="title">
-    <cmd name="autorutworu"><parm>
-        <xsl:apply-templates mode="inline" />
-    </parm></cmd>
+<xsl:template 
+    match="autor_utworu|dzielo_nadrzedne|nazwa_utworu|podtytul"
+    mode="title">
+    <cmd>
+        <xsl:attribute name="name">
+            <xsl:value-of select="wl:texcommand(name())" />
+        </xsl:attribute>
+        <parm><xsl:apply-templates mode="inline"/></parm>
+    </cmd>
 </xsl:template>
 
 
 <xsl:template 
-    match="nazwa_utworu|podtytul|naglowek_akt|naglowek_czesc|srodtytul|naglowek_osoba|naglowek_podrozdzial|naglowek_scena|naglowek_rozdzial|miejsce_czas|didaskalia|lista_osoba|akap|akap_dialog|akap_cd|motto_podpis|naglowek_listy">
+    match="naglowek_akt|naglowek_czesc|srodtytul|naglowek_osoba|naglowek_podrozdzial|naglowek_scena|naglowek_rozdzial|miejsce_czas|didaskalia|lista_osoba|akap|akap_dialog|akap_cd|motto_podpis|naglowek_listy">
     <cmd>
         <xsl:attribute name="name">
             <xsl:value-of select="wl:texcommand(name())" />
     </cmd>
 </xsl:template>
 
+<xsl:template name="authors">
+    <xsl:for-each select=".//dc:creator_parsed">
+        <xsl:if test="position() != 1">, </xsl:if>
+        <xsl:apply-templates mode="inline" />
+    </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="editors">
+    <xsl:for-each select=".//dc:contributor.editor_parsed|.//dc:contributor.technical_editor_parsed">
+        <xsl:if test="position() != 1">, </xsl:if>
+        <xsl:apply-templates mode="inline" />
+    </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="translators">
+    <xsl:if test=".//dc:contributor.translator_parsed">
+        <cmd name='translator'><parm>
+            <xsl:for-each select=".//dc:contributor.translator_parsed">
+                <xsl:if test="position() != 1">, </xsl:if>
+                <xsl:apply-templates mode="inline" />
+            </xsl:for-each>
+        </parm></cmd>
+    </xsl:if>
+</xsl:template>
+
 
 <!-- ============== -->
 <!-- = ADDED TAGS = -->
index e1ca26b..64c956e 100644 (file)
@@ -11,20 +11,23 @@ import os
 functions.reg_substitute_entities()
 functions.reg_wrap_words()
 functions.reg_strip()
+functions.reg_person_name()
 
 TEMPLATE = u"""\
-Kodowanie znaków w dokumencie: UTF-8.
------
-%(description)s 
+%(text)s
 
-%(license_description)s.%(source)s
 
-Wersja lektury w opracowaniu merytorycznym i krytycznym (przypisy i motywy) dostępna jest na stronie %(url)s.
 -----
+Ta lektura, podobnie jak tysiące innych, dostępna jest na stronie wolnelektury.pl.
+Wersja lektury w opracowaniu merytorycznym i krytycznym (przypisy i motywy) dostępna jest na stronie %(url)s.
 
+Utwór opracowany został w ramach projektu Wolne Lektury przez fundację Nowoczesna Polska.
 
+%(license_description)s.%(source)s
 
-%(text)s
+%(description)s
+
+Opracowanie redakcyjne i przypisy: %(contributors)s
 """
 
 def transform(input_file, output_file, parse_dublincore=True, **options):
@@ -40,28 +43,34 @@ def transform(input_file, output_file, parse_dublincore=True, **options):
         parsed_dc = dcparser.BookInfo.from_element(document.edoc)
         description = parsed_dc.description
         url = parsed_dc.url
+
         license_description = parsed_dc.license_description
         license = parsed_dc.license
         if license:
             license_description = u"Ten utwór jest udostepniony na licencji %s: \n%s" % (license_description, license)        
         else:
-            license_description = u"Ten utwór nie jest chroniony prawem autorskim i znajduje się w domenie publicznej, co oznacza, że możesz go swobodnie wykorzystywać, publikować i rozpowszechniać"
+            license_description = u"Ten utwór nie jest chroniony prawem autorskim i znajduje się w domenie publicznej, co oznacza że możesz go swobodnie wykorzystywać, publikować i rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi materiałami (przypisy, motywy literackie etc.), które podlegają prawu autorskiemu, to te dodatkowe materiały udostępnione są na licencji Creative Commons Uznanie Autorstwa – Na Tych Samych Warunkach 3.0 PL (http://creativecommons.org/licenses/by-sa/3.0/)"
+
         source = parsed_dc.source_name
         if source:
-            source = "\n\nNa podstawie: " + source
+            source = "\n\nTekst opracowany na podstawie: " + source
         else:
             source = ''
+
+        contributors = ', '.join(person.readable() for person in (parsed_dc.technical_editors + parsed_dc.editors))
     else:
         description = 'Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl).'
         url = '*' * 10
         license = ""
         license_description = ""
         source = ""
+        contributors = ""
     output_file.write((TEMPLATE % {
         'description': description,
         'url': url,
         'license_description': license_description,
         'text': unicode(result),
         'source': source,
+        'contributors': contributors,
     }).encode('utf-8'))
 
index 0f9b665..682ed9b 100755 (executable)
@@ -6,7 +6,8 @@
 
 -->
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:wl="http://wolnelektury.pl/functions" >
+    xmlns:wl="http://wolnelektury.pl/functions"
+    xmlns:dc="http://purl.org/dc/elements/1.1/" >
 
 <xsl:output encoding="utf-8" indent="yes" omit-xml-declaration = "yes" version="2.0" />
 <xsl:template match="utwor">
                 }
 
 
-                #toc, #themes, #nota_red {
+                #toc, #themes, #nota_red, #info {
                     position: fixed;
                     left: 0em;
                     top: 1.5em;
                     position: inherit;
                 }
 
+                #info p {
+                    text-align: justify;
+                    margin: 1.5em 0 0;
+                }
+
                 /* =================================================== */
                 /* = Common elements: headings, paragraphs and lines = */
                 /* =================================================== */
                     margin-top: -0.25em;
                 }
 
+                span.translator {
+                    font-size: 0.375em;
+                    display: block;
+                    line-height: 1.5em;
+                    margin-top: 0.25em;
+                }
+
                 div.didaskalia {
                     font-style: italic;
                     margin: 0.5em 0 0 1.5em;
     <xsl:if test="nazwa_utworu">
         <h1>
             <xsl:apply-templates select="autor_utworu|dzielo_nadrzedne|nazwa_utworu|podtytul" mode="header" />
+            <xsl:call-template name="translators" />
         </h1>
     </xsl:if>
     <xsl:apply-templates />
 </xsl:template>
 
 
+<xsl:template name="translators">
+    <xsl:if test="//dc:contributor.translator">
+        <span class="translator">
+            <xsl:text>tłum. </xsl:text>
+            <xsl:for-each select="//dc:contributor.translator">
+                <xsl:if test="position() != 1">, </xsl:if>
+                <xsl:apply-templates mode="person" />
+            </xsl:for-each>
+        </span>
+    </xsl:if>
+</xsl:template>
+
+<xsl:template match="text()" mode="person">
+    <xsl:value-of select="wl:person_name(.)" />
+</xsl:template>
+
+
 <!-- ================ -->
 <!-- = IGNORED TAGS = -->
 <!-- ================ -->
index 15438a5..604b8bd 100755 (executable)
@@ -6,7 +6,8 @@
   
 -->
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:wl="http://wolnelektury.pl/functions" >
+    xmlns:wl="http://wolnelektury.pl/functions"
+    xmlns:dc="http://purl.org/dc/elements/1.1/" >
 
 <xsl:output encoding="utf-8" method="text" />
 
 <!-- = (can contain block tags, paragraph tags, standalone tags and special tags) = -->
 <!-- ============================================================================== -->
 <xsl:template match="powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny">
-<xsl:if test="nazwa_utworu"><xsl:apply-templates select="autor_utworu|dzielo_nadrzedne|nazwa_utworu|podtytul" mode="header" /></xsl:if>
+<xsl:if test="nazwa_utworu">
+    <xsl:apply-templates select="autor_utworu|dzielo_nadrzedne|nazwa_utworu|podtytul" mode="header" />
+    <xsl:call-template name="translators" />
+    <xsl:text>
+</xsl:text>
+</xsl:if>
+<xsl:apply-templates />
 <xsl:text>
 
 </xsl:text>
-<xsl:apply-templates />
 </xsl:template>
 
 
 <!-- ========================================== -->
 <!-- Title page -->
 <xsl:template match="autor_utworu" mode="header">
+<xsl:apply-templates mode="inline" />
 <xsl:text>
 
 </xsl:text>
-<xsl:apply-templates mode="inline" />
 </xsl:template>
 
 <xsl:template match="nazwa_utworu" mode="header">
+<xsl:apply-templates mode="inline" />
 <xsl:text>
-
 </xsl:text>
-<xsl:apply-templates mode="inline" />
 </xsl:template>
 
 <xsl:template match="dzielo_nadrzedne" mode="header">
+<xsl:apply-templates mode="inline" />
 <xsl:text>
-    
 </xsl:text>
-<xsl:apply-templates mode="inline" />
 </xsl:template>
 
 <xsl:template match="podtytul" mode="header">
+<xsl:apply-templates mode="inline" />
 <xsl:text>
 </xsl:text>
-<xsl:apply-templates mode="inline" />
 </xsl:template>
 
 <!-- Section headers (included in index)-->
 
 <xsl:template match="motyw" mode="inline" />
 
+<xsl:template name="translators">
+    <xsl:if test="//dc:contributor.translator">
+        <text>tłum. </text>
+        <xsl:for-each select="//dc:contributor.translator/text()">
+            <xsl:if test="position() != 1">
+                <xsl:text>, </xsl:text>
+            </xsl:if>
+            <xsl:value-of select="wl:person_name(.)" />
+        </xsl:for-each>
+        <xsl:text>
+</xsl:text>
+    </xsl:if>
+</xsl:template>
+
 
 <!-- ================ -->
 <!-- = IGNORED TAGS = -->
index 6f2beac..786c2c2 100755 (executable)
@@ -101,7 +101,8 @@ def asbis(filenames, output_dir, verbose):
                 except:
                     pass
             outfile = os.path.join(output_dir, slug + '.epub')
-            epub.transform(provider, file_path=main_input, output_file=outfile, cover_fn=cover.asbis_cover)
+            epub.transform(provider, file_path=main_input, output_file=outfile,
+                    cover_fn=cover.asbis_cover, flags=('less-advertising',))
     except ParseError, e:
         print '%(file)s:%(name)s:%(message)s' % {
             'file': main_input,