69a26ea330e5af309ec41dbc13a6f2bf34597df5
[librarian.git] / src / librarian / elements / tools / __init__.py
1 # This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
2 # Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
3 #
4 from ..base import WLElement
5
6
7 class Numeracja(WLElement):
8     NUMBERING = True
9     def assign_id(self, builder):
10         builder.counters['_visible'] = int(self.get('start', 1))
11
12
13 class Rownolegle(WLElement):
14     def epub_build(self, builder):
15         for i, block in enumerate(self):
16             attr = {"class": "rownolegly-blok"}
17             if not i:
18                 attr['class'] += ' first'
19             if i == len(self) - 1:
20                 attr['class'] += ' last'
21             builder.start_element('div', attr)
22             block.epub_build(builder)
23             builder.end_element()
24
25     def html_build(self, builder):
26         for i, block in enumerate(self):
27             attr = {"class": "paralell-block"}
28             if not i:
29                 attr['class'] += ' paralell-block-first'
30             if i == len(self) - 1:
31                 attr['class'] += ' paralell-block-last'
32             builder.start_element('div', attr)
33             block.html_build(builder)
34             builder.end_element()
35
36
37
38 class Tab(WLElement):
39     EPUB_TAG = HTML_TAG = 'span'
40
41     def html_build(self, builder):
42         szer = self.get('szer', '1')
43         if szer == '*':
44             reopen = []
45             from lxml import etree
46             p = builder.cursor
47             while 'verse' not in p.attrib.get('class', ''):
48                 reopen.append(p)
49                 p = p.getparent()
50                 builder.end_element()
51             builder.start_element('span', {'class': 'verse-stretched-space'})
52             builder.end_element()
53             while reopen:
54                 p = reopen.pop()
55                 builder.start_element(p.tag, p.attrib)
56         else:
57             super().html_build(builder)
58
59     def get_html_attr(self, builder):
60         szer = self.get('szer', '1').strip()
61         if szer.endswith('em'):
62             szer = szer[:-2]
63         try:
64             szer = int(szer)
65         except:
66             szer = 1
67         return {
68             "display": "inline-block",
69             "width": f"{szer}em",
70         }
71
72     get_epub_attr = get_html_attr
73
74     def txt_build(self, builder):
75         szer = self.get('szer', '1').strip()
76         if szer.endswith('em'):
77             szer = szer[:-2]
78         try:
79             szer = int(szer)
80         except:
81             szer = 1
82         builder.push_text(' ' * 4 * szer)