summaryrefslogtreecommitdiff
path: root/doc/build/lib/toc.py
diff options
context:
space:
mode:
Diffstat (limited to 'doc/build/lib/toc.py')
-rw-r--r--doc/build/lib/toc.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/doc/build/lib/toc.py b/doc/build/lib/toc.py
new file mode 100644
index 000000000..ebf7e9547
--- /dev/null
+++ b/doc/build/lib/toc.py
@@ -0,0 +1,70 @@
+"""
+defines a pickleable, recursive "table of contents" datastructure.
+
+TOCElements define a name, a description, and also a uniquely-identifying "path" which is
+used to generate hyperlinks between document sections.
+"""
+import time
+
+toc_by_file = {}
+toc_by_path = {}
+
+class TOCElement(object):
+ def __init__(self, filename, name, description, parent=None, version=None, last_updated=None, doctitle=None, **kwargs):
+ self.filename = filename
+ self.name = name
+ self.description = description
+ self.parent = parent
+ self.content = None
+ self.toc_by_path = toc_by_path
+ self.toc_by_file = toc_by_file
+ self.last_updated = time.time()
+ self.version = version
+ self.doctitle = doctitle
+ (self.path, self.depth) = self._create_path()
+ #print "NEW TOC:", self.path
+ for key, value in kwargs.iteritems():
+ setattr(self, key, value)
+
+ toc_by_path[self.path] = self
+
+ self.is_top = (self.parent is not None and self.parent.filename != self.filename) or self.parent is None
+ if self.is_top:
+ toc_by_file[self.filename] = self
+
+ self.root = self.parent or self
+
+ self.content = None
+ self.previous = None
+ self.next = None
+ self.children = []
+ if parent:
+ if len(parent.children):
+ self.previous = parent.children[-1]
+ parent.children[-1].next = self
+ parent.children.append(self)
+
+ def get_page_root(self):
+ return self.toc_by_file[self.filename]
+
+ def get_by_path(self, path):
+ return self.toc_by_path.get(path)
+
+ def get_by_file(self, filename):
+ return self.toc_by_file[filename]
+
+ def get_link(self, extension='html', anchor=True):
+ if anchor:
+ return "%s.%s#%s" % (self.filename, extension, self.path)
+ else:
+ return "%s.%s" % (self.filename, extension)
+
+ def _create_path(self):
+ elem = self
+ tokens = []
+ depth = 0
+ while elem.parent is not None:
+ tokens.insert(0, elem.name)
+ elem = elem.parent
+ depth +=1
+ return ('_'.join(tokens), depth)