cleanup unused files
[librarian.git] / librarian / formats / pdf / __init__.py
index e8e936b..bc3d2f5 100644 (file)
@@ -11,7 +11,7 @@ from lxml import etree
 from urllib import urlretrieve
 from StringIO import StringIO
 from Texml.processor import process
-from librarian import DCNS, XMLNamespace
+from librarian import DCNS, XMLNamespace, BuildError
 from librarian.formats import Format
 from librarian.output import OutputFile
 from librarian.renderers import Register, TreeRenderer
@@ -52,7 +52,8 @@ class PdfFormat(Format):
 
     def add_file(self, ctx, filename, url=None, path=None, image=False):
         from subprocess import call
-        assert url or path
+        if not url and not path:
+            raise BuildError('No URL or path for image')
         save_as = os.path.join(ctx.workdir, filename)
         if path is not None:
             ext = path.rsplit('.', 1)[-1]
@@ -72,6 +73,8 @@ class PdfFormat(Format):
             if url.startswith('/'):
                 url = 'http://milpeer.eu' + url
 
+            if '.' not in url:
+                raise BuildError('Linked file without extension: %s' % url)
             ext = url.rsplit('.', 1)[-1]
             if image:
                 urlretrieve(url, save_as + '_.' + ext)
@@ -115,26 +118,6 @@ class PdfFormat(Format):
         doc = etree.SubElement(t, TexmlNS('env'), name="document")
         doc.append(texml_cmd("thispagestyle", "empty"))
 
-        # title page
-        height_left = 297
-        cover_url = self.doc.meta.get_one(DCNS('relation.coverimage.url'))
-        if cover_url:
-            self.add_file(build_ctx, 'cover.png', cover_url, image=True)
-            
-            img = Image.open(self.get_file(build_ctx, 'cover.png'))
-            size = img.size
-
-            if size[1] > size[0]:
-                img = img.crop((0, 0, size[0], size[0]))
-                img.save(self.get_file(build_ctx, 'cover.png'), format=img.format, quality=90)
-            size = img.size
-
-            # TODO: hardcoded paper size here
-            height = 210.0 * size[1] / size[0]
-            doc.append(texml_cmd("makecover", "%fmm" % height))
-        else:
-            doc.append(texml_cmd("vfill*"))
-
         # Wielkości!
         grp = etree.SubElement(doc, 'group')
         grp.append(texml_cmd("raggedright"))
@@ -154,8 +137,6 @@ class PdfFormat(Format):
             p[0].append(texml_cmd("noindent"))
             p[0].append(texml_cmd("nohyphens", title))
             # p[0][-1].tail = title
-        doc.append(texml_cmd("vfill"))
-        doc.append(texml_cmd("vfill"))
 
         # IOFile probably would be better
         cover_logo_url = getattr(build_ctx, 'cover_logo', None)
@@ -168,26 +149,24 @@ class PdfFormat(Format):
             p = texml_cmd("par", "")
             doc.append(p)
             p[0].append(texml_cmd("noindent"))
-            p[0].append(texml_cmd("insertimage", 'coverlogo.png', "%fcm" % (1.0 * size[0] / size[1]), "1cm"))
-            
-        # logo organizacji!
-        doc.append(texml_cmd("clearpage"))
+            p[0].append(texml_cmd("insertimage", 'coverlogo.png', "%fcm" % (2.0 * size[0] / size[1]), "2cm"))
+        doc.append(texml_cmd("vspace", "2em"))
 
         ctx = Context(build_ctx, format=self, img=1)
         doc.extend(self.render(self.doc.edoc.getroot(), ctx))
 
         # Redakcyjna na końcu.
-        doc.append(texml_cmd("clearpage"))
-
         doc.append(texml_cmd("section*", "Information about the resource"))
         doc.append(texml_cmd("vspace", "1em"))
 
-        for m, f in (
-                ('Publisher: ', DCNS('publisher')),
-                ('Rights: ', DCNS('rights')),
-                ('Intended audience: ', DCNS('audience')),
-                ('', DCNS('description'))):
-            v = self.doc.meta.get_one(f)
+        for m, f, multiple in (
+                ('Publisher: ', DCNS('publisher'), False),
+                ('Rights: ', DCNS('rights'), False),
+                ('', DCNS('description'), False)):
+            if multiple:
+                v = ', '.join(self.doc.meta.get(f))
+            else:
+                v = self.doc.meta.get_one(f)
             if v:
                 e = texml_cmd("par", "")
                 e[0].append(texml_cmd("noindent"))
@@ -332,8 +311,21 @@ class ImgRenderer(CmdRenderer):
 PdfFormat.renderers.register(core.Div, 'img', ImgRenderer('insertimage'))
 
 
+class VideoRenderer(CmdRenderer):
+    def render(self, element, ctx):
+        root = super(VideoRenderer, self).render(element, ctx)
+        url = 'https://www.youtube.com/watch?v=%s' % element.attrib.get('videoid')
+        link = texml_cmd('href', url, url)
+        root[0][0].text = None
+        root[0][0].append(link)
+        return root
+
+PdfFormat.renderers.register(core.Div, 'video', VideoRenderer('par'))
+
+
 PdfFormat.renderers.register(core.Div, 'defined', CmdRenderer('textbf'))
 PdfFormat.renderers.register(core.Div, 'item', CmdRenderer('item'))
+PdfFormat.renderers.register(core.Span, 'item', CmdRenderer('item'))
 PdfFormat.renderers.register(core.Div, 'list', EnvRenderer('itemize'))
 PdfFormat.renderers.register(core.Div, 'list.enum', EnvRenderer('enumerate'))