~jonas-drange/ubuntu-start-page/1252899-mobile-friendly

« back to all changes in this revision

Viewing changes to src/Mako-0.1.9/doc/build/lib/toc.py

  • Committer: Matthew Nuzum
  • Date: 2008-04-18 01:58:53 UTC
  • Revision ID: matthew.nuzum@canonical.com-20080418015853-2b8rf979z2c2exxl
adding files

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
defines a pickleable, recursive "table of contents" datastructure.
 
3
 
 
4
TOCElements define a name, a description, and also a uniquely-identifying "path" which is
 
5
used to generate hyperlinks between document sections.
 
6
"""
 
7
import time, re
 
8
 
 
9
toc_by_file = {}
 
10
toc_by_path = {}
 
11
filenames = []
 
12
 
 
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
 
18
        self.parent = parent
 
19
        self.content = None
 
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)
 
30
 
 
31
        toc_by_path[self.path] = self
 
32
            
 
33
        self.is_top = (self.parent is not None and self.parent.filename != self.filename) or self.parent is None
 
34
        if self.is_top:
 
35
            toc_by_file[self.filename] = self
 
36
            if self.filename:
 
37
                filenames.append(self.filename)
 
38
                
 
39
        self.root = self.parent or self
 
40
 
 
41
        self.content = None
 
42
        self.previous = None
 
43
        self.next = None
 
44
        self.children = []
 
45
        if parent:
 
46
            if len(parent.children):
 
47
                self.previous = parent.children[-1]
 
48
                parent.children[-1].next = self
 
49
            parent.children.append(self)
 
50
 
 
51
    def get_page_root(self):
 
52
        return self.toc_by_file[self.filename]
 
53
        
 
54
    def get_by_path(self, path):
 
55
        return self.toc_by_path.get(path)
 
56
 
 
57
    def get_by_file(self, filename):
 
58
        return self.toc_by_file[filename]
 
59
 
 
60
    def get_link(self, extension='html', anchor=True, usefilename=True):
 
61
        if usefilename:
 
62
            if anchor:
 
63
                return "%s.%s#%s" % (self.filename, extension, self.path) 
 
64
            else:
 
65
                return "%s.%s" % (self.filename, extension)
 
66
        else:
 
67
            return "#%s" % (self.path) 
 
68
 
 
69
 
 
70
    def _create_path(self):
 
71
        elem = self
 
72
        tokens = []
 
73
        depth = 0
 
74
        while elem.parent is not None:
 
75
            tokens.insert(0, elem.name)
 
76
            elem = elem.parent
 
77
            depth +=1
 
78
        return ('_'.join(tokens), depth)