[gtk-doc] db2html: implement toc for main page



commit 968fa0f5d7170531dec89a5c39e3957043f688e1
Author: Stefan Sauer <ensonic users sf net>
Date:   Sun Dec 17 15:45:11 2017 +0100

    db2html: implement toc for main page

 tools/db2html.py          |   19 +++++++++++++------
 tools/templates/book.html |   10 ++++++++++
 2 files changed, 23 insertions(+), 6 deletions(-)
---
diff --git a/tools/db2html.py b/tools/db2html.py
index d1fe808..1e817ad 100644
--- a/tools/db2html.py
+++ b/tools/db2html.py
@@ -26,7 +26,7 @@ like the xsl-stylesheets would do. For that it resolves all the xml-includes.
 
 TODO: convert the docbook-xml to html
 - more templates
-- toc
+- refentry/index nav headers
 
 Requirements:
 sudo pip3 install anytree jinja2 lxml
@@ -95,10 +95,10 @@ CHUNK_PARAMS = {
 }
 
 TITLE_XPATH = {
-    'book': etree.XPath('//bookinfo/title/text()'),
-    'chapter': etree.XPath('//chapter/title/text()'),
-    'index': etree.XPath('//index/title/text()'),
-    'refentry': etree.XPath('//refentry/refmeta/refentrytitle/text()'),
+    'book': etree.XPath('./bookinfo/title/text()'),
+    'chapter': etree.XPath('./title/text()'),
+    'index': etree.XPath('./title/text()'),
+    'refentry': etree.XPath('./refmeta/refentrytitle/text()'),
 }
 
 # Jinja2 templates
@@ -163,8 +163,10 @@ def chunk(xml_node, parent=None):
         # TODO: do we need to remove the xml-node from the parent?
         #       we generate toc from the files tree
         # from copy import deepcopy
-        # ..., xml=deepcopy(xml_node), ...
+        # sub_tree = deepcopy(xml_node)
         # xml_node.getparent().remove(xml_node)
+        # # or:
+        # sub_tree = etree.ElementTree(xml_node).getroot()
         parent = Node(xml_node.tag, parent=parent, xml=xml_node,
                       filename=gen_chunk_name(xml_node) + '.html',
                       title=get_chunk_title(xml_node))
@@ -201,6 +203,11 @@ def convert(out_dir, files, node):
             if ix < len(files) - 1:
                 params['nav_next'] = files[ix + 1]
 
+            # page specific vars
+            # TODO: extract into functions?
+            if node.name == 'book':
+                params['toc'] = node.root
+
             html.write(template.render(**params))
         else:
             logging.warning('Add template for "%s"', node.name)
diff --git a/tools/templates/book.html b/tools/templates/book.html
index bc16c64..ce37a3f 100644
--- a/tools/templates/book.html
+++ b/tools/templates/book.html
@@ -13,6 +13,16 @@
 {{ navigation_main(title) }}
 <hr>
 </div>
+<div class="toc">
+  <dl class="toc">
+  {%- for item in toc.children recursive %}
+      <dt><a href="{{ item.filename|e }}">{{ item.title }}</a>
+      {%- if item.children -%}
+          <dd><dl>{{ loop(item.children) }}</dl></dd>
+      {%- endif %}</dt>
+  {%- endfor %}
+  </dl>
+</div>
 </div>
 </body>
 </html>
\ No newline at end of file


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]