Basic biblical tools.
[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
10     def assign_id(self, document):
11         document.counters['_visible'] = int(self.get('start', 1))
12
13
14 class Rownolegle(WLElement):
15     def epub_build(self, builder):
16         for i, block in enumerate(self):
17             attr = {"class": "rownolegly-blok"}
18             if not i:
19                 attr['class'] += ' first'
20             if i == len(self) - 1:
21                 attr['class'] += ' last'
22             builder.start_element('div', attr)
23             block.epub_build(builder)
24             builder.end_element()
25
26     def html_build(self, builder):
27         for i, block in enumerate(self):
28             attr = {"class": "paralell-block"}
29             if not i:
30                 attr['class'] += ' paralell-block-first'
31             if i == len(self) - 1:
32                 attr['class'] += ' paralell-block-last'
33             builder.start_element('div', attr)
34             block.html_build(builder)
35             builder.end_element()
36
37
38
39 class Tab(WLElement):
40     EPUB_TAG = HTML_TAG = 'span'
41
42     def html_build(self, builder):
43         szer = self.get('szer', '1')
44         if szer == '*':
45             reopen = []
46             from lxml import etree
47             p = builder.cursor
48             while 'verse' not in p.attrib.get('class', ''):
49                 reopen.append(p)
50                 p = p.getparent()
51                 builder.end_element()
52             builder.start_element('span', {'class': 'verse-stretched-space'})
53             builder.end_element()
54             while reopen:
55                 p = reopen.pop()
56                 builder.start_element(p.tag, p.attrib)
57         else:
58             super().html_build(builder)
59
60     def get_html_attr(self, builder):
61         szer = self.get('szer', '1').strip()
62         if szer.endswith('em'):
63             szer = szer[:-2]
64         try:
65             szer = int(szer)
66         except:
67             szer = 1
68         return {
69             "display": "inline-block",
70             "width": f"{szer}em",
71         }
72
73     get_epub_attr = get_html_attr
74
75     def txt_build(self, builder):
76         szer = self.get('szer', '1').strip()
77         if szer.endswith('em'):
78             szer = szer[:-2]
79         try:
80             szer = int(szer)
81         except:
82             szer = 1
83         builder.push_text(' ' * 4 * szer)