X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/c9a6042e37f3bb1fdd74a29ba2764ffe76944220..2094e2a2f3411be494edb9b53da8735815cd5aff:/librarian/html.py?ds=sidebyside diff --git a/librarian/html.py b/librarian/html.py index c1a5e5b..70fc6e5 100644 --- a/librarian/html.py +++ b/librarian/html.py @@ -57,6 +57,7 @@ def transform(wldoc, stylesheet='legacy', options=None, flags=None): if html_has_content(result): add_anchors(result.getroot()) + add_table_of_themes(result.getroot()) add_table_of_contents(result.getroot()) return OutputFile.from_string(etree.tostring(result, method='html', @@ -263,6 +264,34 @@ def add_table_of_contents(root): root.insert(0, toc) + +def add_table_of_themes(root): + try: + from sortify import sortify + except ImportError: + sortify = lambda x: x + + book_themes = {} + for fragment in root.findall('.//a[@class="theme-begin"]'): + if not fragment.text: + continue + theme_names = [s.strip() for s in fragment.text.split(',')] + for theme_name in theme_names: + book_themes.setdefault(theme_name, []).append(fragment.get('name')) + book_themes = book_themes.items() + book_themes.sort(key=lambda s: sortify(s[0])) + themes_div = etree.Element('div', id="themes") + themes_ol = etree.SubElement(themes_div, 'ol') + for theme_name, fragments in book_themes: + themes_li = etree.SubElement(themes_ol, 'li') + themes_li.text = "%s: " % theme_name + for i, fragment in enumerate(fragments): + item = etree.SubElement(themes_li, 'a', href="#%s" % fragment) + item.text = str(i + 1) + item.tail = ' ' + root.insert(0, themes_div) + + def extract_annotations(html_path): """For each annotation, yields a tuple: anchor, text, html."""