]> oss.titaniummirror.com Git - webber.git/blobdiff - plugins/toc.py
toc.py, hierarchy.py: add new "Hide: true" page attribute
[webber.git] / plugins / toc.py
index 9a7345360de06e2da787af3a64469d9ec03bd5ef..41d31dc7947e3a8d51ad85678d75b380b1edafdb 100644 (file)
@@ -4,8 +4,9 @@ import htmlentitydefs, re
 
 
 reHeader = re.compile(r'<h(\d)(.*)>(.*)</h\1>', re.IGNORECASE | re.MULTILINE)
-toc = []
-labels = {}
+_toc = []
+_labels = {}
+_first = -1
 
 toc_min_lines = 30
 
@@ -38,41 +39,52 @@ def slugify(text, separator):
 
 
 def repl(m):
-       global toc
+       """
+       Function used for re.sub() to find all header elements (h1, h2, ...).
+       Data from those elements (level, headline) are stored in the global
+       array `toc`.
+
+       This function also modifies the text by adding a anchor to the
+       header.
+       """
+       global _toc
+       global _first
        label = slugify(m.group(3), "_")
-       if labels.has_key(label):
+       if _labels.has_key(label):
                n = 0
                while True:
                        l = "%s_%d" % (label, n)
-                       if not labels.has_key(l):
+                       if not _labels.has_key(l):
                                label = l
                                break
                        n += 1
 
-       toc.append( (label, int(m.group(1))-1, m.group(3)) )
+       level = int(m.group(1))
+       if _first == -1:
+               _first = level
+       _toc.append( (level - _first, m.group(3), label) )
+       _labels[label] = 1
        return '<h%s%s>%s<a name="%s">&nbsp;</a></h%s>' % (
                m.group(1),
                m.group(2),
                m.group(3),
                label,
                m.group(1))
-       """
-       Function used for re.sub() to find all header elements (h1, h2, ...).
-       Data from those elements (level, headline) are stored in the global
-       array `toc`.
-
-       This function also modifies the text by adding a anchor to the
-       header.
-       """
 
 
 
 @set_hook("linkify")
 def linkify(params):
-       global toc
-       global labels
-       toc = []
-       labels = {}
+       global _toc
+       global _labels
+       global _first
+       _toc = []
+       _labels = {}
+       _first = -1
+
+       # Ignore hidden pages
+       if params.file.has_key("hide") and params.file.hide:
+               return
 
        # Very small pages don't need a table-of-contents
        if params.file.contents.count("\n") < toc_min_lines:
@@ -84,17 +96,4 @@ def linkify(params):
 
 @set_function("get_toc")
 def get_toc():
-       level = 1
-       res = []
-       for (label, lvl, txt) in toc:
-               while lvl > level:
-                       res.append("%s<ul>" % ("  "*level))
-                       level += 1
-               while lvl < level:
-                       level -= 1
-                       res.append("%s</ul>" % ("  "*level))
-               res.append('%s<li><a href="#%s">%s</a></li>' %
-                          ("  " * level, label, txt))
-       while level > 1:
-               level -= 1
-       return "\n".join(res)
+       return _toc