X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/e4ffa9f5172b88a5a49ed832634105dd65b9727f..f5c1682d0da0aee458474ef5a9000dd3d62171f4:/librarian/weasy.py?ds=sidebyside diff --git a/librarian/weasy.py b/librarian/weasy.py deleted file mode 100644 index d2cd7e4..0000000 --- a/librarian/weasy.py +++ /dev/null @@ -1,729 +0,0 @@ -# -*- coding: utf-8 -*- -# -# This file is part of Librarian, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os -import shutil -from tempfile import mkdtemp, NamedTemporaryFile - -from lxml import etree -from subprocess import call - -from librarian import IOFile, Format, ParseError, get_resource -from xmlutils import Xmill, tag, tagged, ifoption, tag_open_close -from librarian import functions -import re -import random -from copy import deepcopy - -IMAGE_THUMB_WIDTH = 300 - - -class EduModule(Xmill): - def __init__(self, options=None): - super(EduModule, self).__init__(options) - self.activity_counter = 0 - self.activity_last = None - self.exercise_counter = 0 - - # text filters - def swap_endlines(txt): - if self.options['strofa']: - txt = txt.replace("/\n", "
\n") - return txt - self.register_text_filter(functions.substitute_entities) - self.register_escaped_text_filter(swap_endlines) - - @tagged('div', 'stanza') - def handle_strofa(self, element): - self.options = {'strofa': True} - return "", "" - - def handle_powiesc(self, element): - return u""" - - - - Edukacja medialna - - - - -
-""", u""" -
- -""" - - handle_autor_utworu = tag("span", "author") - handle_dzielo_nadrzedne = tag("span", "collection") - handle_podtytul = tag("span", "subtitle") - handle_naglowek_akt = handle_naglowek_czesc = handle_srodtytul = tag("h2") - handle_naglowek_scena = tag('h2') - handle_naglowek_osoba = tag('h3') - handle_akap = handle_akap_dialog = handle_akap_cd = tag('p', 'paragraph') - - handle_wyroznienie = tag('em') - handle_tytul_dziela = tag('em', 'title') - handle_slowo_obce = tag('em', 'foreign') - - def naglowek_to_anchor(self, naglowek): - return self.options['urlmapper'].naglowek_to_anchor(naglowek) - - def handle_nazwa_utworu(self, element): - return "

", "

" - - def handle_naglowek_rozdzial(self, element): - return tag_open_close("h2", id=self.naglowek_to_anchor(element)) - - def handle_naglowek_podrozdzial(self, element): - self.activity_counter = 0 - if element.text.strip() == u'Przebieg zajęć': - return tag('h3', 'activities-header')(self, element) - return tag('h3')(self, element) - - def handle_uwaga(self, _e): - return None - - def handle_aktywnosc(self, element): - self.activity_counter += 1 - parity = 'odd' if self.activity_counter % 2 == 1 else 'even' - if self.activity_counter == 1: - parity += ' first' - self.options = { - 'activity': True, - 'activity_counter': self.activity_counter, - } - submill = EduModule(dict(self.options.items() + {'sub_gen': True}.items())) - - if element.xpath('opis'): - opis = submill.generate(element.xpath('opis')[0]) - else: - opis = '' - - n = element.xpath('wskazowki') - if n: - wskazowki = submill.generate(n[0]) - else: - wskazowki = '' - - n = element.xpath('pomoce') - if n: - pomoce = submill.generate(n[0]) - else: - pomoce = '' - - forma = ''.join(element.xpath('forma/text()')) - get_forma_url = self.options['urlmapper'].get_forma_url - forms = [] - for form_name in forma.split(','): - name = form_name.strip() - url = get_forma_url(name) - if url: - forms.append("%s" % (url, name)) - else: - forms.append(name) - forma = ', '.join(forms) - if forma: - forma = 'Metoda

%s

' % forma - - czas = ''.join(element.xpath('czas/text()')) - if czas: - czas = 'Czas

%s min

' % czas - - counter = self.activity_counter - - if element.getnext().tag == 'aktywnosc' or (len(self.activity_last) and self.activity_last.getnext() == element): - counter_html = """%(counter)d.""" % {'counter': counter} - else: - counter_html = '' - - self.activity_last = element - - return ( - u""" -
-
-
- %(counter_html)s - %(opis)s""" % {'counter_html': counter_html, 'opis': opis, 'parity': parity}, - u"""%(wskazowki)s -
-
- - %(czas)s - %(forma)s - %(pomoce)s -
-
-
-""" % {'wskazowki': wskazowki, 'czas': czas, 'forma': forma, 'pomoce': pomoce}) - - handle_opis = ifoption(sub_gen=True)(tag('div', 'desc')) - handle_wskazowki = ifoption(sub_gen=True)(tag('div', ('hints', 'teacher'))) - - @ifoption(sub_gen=True) - @tagged('tr', 'infobox materials') - def handle_pomoce(self, _): - return """Pomoce""", "" - - def handle_czas(self, *_): - return - - def handle_forma(self, *_): - return - - def handle_cwiczenie(self, element): - exercise_handlers = { - 'wybor': Wybor, - 'uporzadkuj': Uporzadkuj, - 'luki': Luki, - 'zastap': Zastap, - 'przyporzadkuj': Przyporzadkuj, - 'prawdafalsz': PrawdaFalsz - } - - typ = element.attrib['typ'] - self.exercise_counter += 1 - self.options = {'exercise_counter': self.exercise_counter} - handler = exercise_handlers[typ](self.options) - return handler.generate(element) - - # Lists - def handle_lista(self, element, attrs=None): - if attrs is None: - attrs = {} - ltype = element.attrib.get('typ', 'punkt') - if not element.findall("punkt"): - if ltype == 'czytelnia': - return '

W przygotowaniu.

' - else: - return None - if ltype == 'slowniczek': - surl = element.attrib.get('src', None) - if surl is None: - # print '** missing src on , setting default' - surl = 'http://edukacjamedialna.edu.pl/lekcje/slowniczek/' - sxml = etree.fromstring(self.options['provider'].by_uri(surl).get_string()) - - self.options = {'slowniczek': True, 'slowniczek_xml': sxml} - return '
', '
' - - listtag = { - 'num': 'ol', - 'punkt': 'ul', - 'alfa': 'ul', - 'czytelnia': 'ul'}[ltype] - - classes = attrs.get('class', '') - if classes: - del attrs['class'] - - attrs_s = ' '.join(['%s="%s"' % kv for kv in attrs.items()]) - if attrs_s: - attrs_s = ' ' + attrs_s - - return '<%s class="lista %s %s"%s>' % (listtag, ltype, classes, attrs_s), '' % listtag - - def handle_punkt(self, element): - if self.options['slowniczek']: - return '', '' - else: - return '
  • ', '
  • ' - - def handle_definiendum(self, element): - nxt = element.getnext() - definiens_s = '' - - if not element.text: - print "!! Empty " - return None - - # let's pull definiens from another document - if self.options['slowniczek_xml'] is not None and (nxt is None or nxt.tag != 'definiens'): - sxml = self.options['slowniczek_xml'] - if "'" in (element.text or ''): - defloc = sxml.xpath("//definiendum[text()=\"%s\"]" % (element.text or '').strip()) - else: - defloc = sxml.xpath("//definiendum[text()='%s']" % (element.text or '').strip()) - if defloc: - definiens = defloc[0].getnext() - if definiens.tag == 'definiens': - subgen = EduModule(self.options) - definiens_s = subgen.generate(definiens) - else: - print ("!! Missing definiendum in source: '%s'" % element.text).encode('utf-8') - - return u"
    " % self.naglowek_to_anchor(element), u"
    " + definiens_s - - def handle_definiens(self, element): - return u"
    ", u"
    " - - def handle_podpis(self, element): - return u"""
    """, u"
    " - - def handle_tabela(self, element): - has_frames = int(element.attrib.get("ramki", "0")) - frames_c = "framed" if has_frames else "" - return u"""""" % frames_c, u"
    " - - def handle_wiersz(self, element): - return u"", u"" - - def handle_kol(self, element): - return u"", u"" - - def handle_rdf__RDF(self, _): - # ustal w opcjach rzeczy :D - return - - def handle_link(self, element): - if 'url' in element.attrib: - return tag('a', href=element.attrib['url'])(self, element) - elif 'material' in element.attrib: - material_err = u' [BRAKUJĄCY MATERIAŁ]' - slug = element.attrib['material'] - - def make_url(f): - return self.options['urlmapper'].url_for_material(slug, f) - - formats = self.options['urlmapper'].materials(slug) - - try: - def_href = make_url(formats[0][0]) - def_err = u"" - except (IndexError, self.options['urlmapper'].MaterialNotFound): - def_err = material_err - def_href = u"" - fmt_links = [] - for f in formats[1:]: - try: - fmt_links.append(u'%s' % (make_url(f[0]), f[0].upper())) - except self.options['urlmapper'].MaterialNotFound: - fmt_links.append(u'%s%s' % (f[0].upper(), material_err)) - more_links = u' (%s)' % u', '.join(fmt_links) if fmt_links else u'' - - return u"" % def_href, u'%s%s' % (def_err, more_links) - - def handle_obraz(self, element): - format = self.options['urlmapper'] - name = element.attrib.get('nazwa', '').strip() - if not name: - print '!! missing "nazwa"' - return - alt = element.attrib.get('alt', '') - if not alt: - print '** missing "alt"' - slug, ext = name.rsplit('.', 1) - image = format.image(slug, ext) - name = image.name.rsplit('/', 1)[-1] - e = etree.Element("a", attrib={"class": "image"}) - e.append(etree.Element("img", attrib={ - "src": name, - "alt": alt, - "width": str(IMAGE_THUMB_WIDTH)})) - format.attachments[name] = self.options['media_root'] + image.name - return etree.tostring(e, encoding=unicode), u"" - - def handle_video(self, element): - url = element.attrib.get('url') - if not url: - print '!!