2
defines a pickleable, recursive "table of contents" datastructure.
4
TOCElements define a name, a description, and also a uniquely-identifying "path" which is
5
used to generate hyperlinks between document sections.
13
class TOCElement(object):
14
def __init__(self, filename, name, description, parent=None, version=None, last_updated=None, doctitle=None, **kwargs):
15
self.filename = filename
16
self.name = re.sub(r'[<>&;%]', '', name)
17
self.description = description
20
self.filenames = filenames
21
self.toc_by_path = toc_by_path
22
self.toc_by_file = toc_by_file
23
self.last_updated = time.time()
24
self.version = version
25
self.doctitle = doctitle
26
(self.path, self.depth) = self._create_path()
27
#print "NEW TOC:", self.path
28
for key, value in kwargs.iteritems():
29
setattr(self, key, value)
31
toc_by_path[self.path] = self
33
self.is_top = (self.parent is not None and self.parent.filename != self.filename) or self.parent is None
35
toc_by_file[self.filename] = self
37
filenames.append(self.filename)
39
self.root = self.parent or self
46
if len(parent.children):
47
self.previous = parent.children[-1]
48
parent.children[-1].next = self
49
parent.children.append(self)
51
def get_page_root(self):
52
return self.toc_by_file[self.filename]
54
def get_by_path(self, path):
55
return self.toc_by_path.get(path)
57
def get_by_file(self, filename):
58
return self.toc_by_file[filename]
60
def get_link(self, extension='html', anchor=True, usefilename=True):
63
return "%s.%s#%s" % (self.filename, extension, self.path)
65
return "%s.%s" % (self.filename, extension)
67
return "#%s" % (self.path)
70
def _create_path(self):
74
while elem.parent is not None:
75
tokens.insert(0, elem.name)
78
return ('_'.join(tokens), depth)