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
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]
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)
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),
+ ('Intended audience: ', DCNS('audience'), True),
+ ('', 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"))
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'))