X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/515398ba21b6ac3c0db230a465cfc8528db8d10e..b90a579e68c18d9fea2170fe38b61d44b8e1d4c3:/librarian/pyhtml.py diff --git a/librarian/pyhtml.py b/librarian/pyhtml.py index 1f1f3df..900d068 100644 --- a/librarian/pyhtml.py +++ b/librarian/pyhtml.py @@ -28,6 +28,7 @@ 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 @@ -36,7 +37,7 @@ class EduModule(Xmill): txt = txt.replace("/\n", "
\n") return txt self.register_text_filter(functions.substitute_entities) - self.register_text_filter(swap_endlines) + self.register_escaped_text_filter(swap_endlines) @tagged('div', 'stanza') def handle_strofa(self, element): @@ -58,7 +59,7 @@ class EduModule(Xmill): handle_podtytul = tag("span", "subtitle") handle_naglowek_akt = handle_naglowek_czesc = handle_srodtytul = tag("h2") handle_naglowek_scena = tag('h2') - handle_naglowek_osoba = handle_naglowek_podrozdzial = tag('h3') + handle_naglowek_osoba = tag('h3') handle_akap = handle_akap_dialog = handle_akap_cd = tag('p', 'paragraph') handle_wyroznienie = tag('em') @@ -82,6 +83,10 @@ class EduModule(Xmill): pre, post = tag_open_close("h2", id=naglowek_to_anchor(element)) return return_to_top + pre, post + def handle_naglowek_podrozdzial(self, element): + self.activity_counter = 0 + return tag('h3')(self, element) + def handle_uwaga(self, _e): return None @@ -93,7 +98,10 @@ class EduModule(Xmill): } submill = EduModule(dict(self.options.items() + {'sub_gen': True}.items())) - opis = submill.generate(element.xpath('opis')[0]) + if element.xpath('opis'): + opis = submill.generate(element.xpath('opis')[0]) + else: + opis = '' n = element.xpath('wskazowki') if n: wskazowki = submill.generate(n[0]) @@ -110,10 +118,17 @@ class EduModule(Xmill): counter = self.activity_counter + if element.getnext().tag == 'aktywnosc' or self.activity_last.getnext() == element: + counter_html = """%(counter)d.""" % locals() + else: + counter_html = '' + + self.activity_last = element + return u"""
- %(counter)d. + %(counter_html)s %(opis)s""" % locals(), \ u"""%(wskazowki)s
@@ -396,13 +411,13 @@ class Wybor(Exercise): if not pytania: pytania = [element] for p in pytania: - solutions = re.split(r"[, ]+", p.attrib['rozw']) + solutions = re.split(r"[, ]+", p.attrib.get('rozw', '')) if len(solutions) != 1: is_single_choice = False break choices = p.xpath(".//*[@nazwa]") uniq = set() - for n in choices: uniq.add(n.attrib['nazwa']) + for n in choices: uniq.add(n.attrib.get('nazwa', '')) if len(choices) != len(uniq): is_single_choice = False break @@ -496,7 +511,7 @@ class Zastap(Luki): return question.xpath(".//zastap") def solution_html(self, piece): - return piece.attrib['rozw'] + return piece.attrib.get('rozw', '') def handle_zastap(self, element): self.piece_counter += 1 @@ -551,16 +566,16 @@ class Przyporzadkuj(Exercise): if self.options['subject']: self.piece_counter += 1 if self.options['handles']: - return '
  • %s' % (element.attrib['rozw'], self.piece_counter, self.piece_counter), '
  • ' + return '
  • %s' % (element.attrib.get('rozw', ''), self.piece_counter, self.piece_counter), '
  • ' else: - return '
  • ' % (element.attrib['rozw'], self.piece_counter), '
  • ' + return '
  • ' % (element.attrib.get('rozw', ''), self.piece_counter), '
  • ' elif self.options['predicate']: if self.options['min']: placeholders = u'
  • ' * self.options['min'] else: placeholders = u'
  • ' - return '
  • ' % element.attrib, '
  • ' + return '
  • ' % element.attrib.get('nazwa', ''), '
  • ' else: return super(Przyporzadkuj, self).handle_punkt(element)