X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=plugins%2Ftoc.py;h=9a7345360de06e2da787af3a64469d9ec03bd5ef;hb=fe5970b6817eca2a96df15e9d1818485a49b3a19;hp=5873e53dbd7d2ca7bb408f9a167a4daedfb8f787;hpb=be8c91275e22ac75d90aef2fa5f825c1d35c3492;p=webber.git
diff --git a/plugins/toc.py b/plugins/toc.py
index 5873e53..9a73453 100644
--- a/plugins/toc.py
+++ b/plugins/toc.py
@@ -25,37 +25,37 @@ def slugify(text, separator):
Based on http://snipplr.com/view/26266/create-slugs-in-python/
"""
- ret = ""
- for c in text.lower():
- try:
- ret += htmlentitydefs.codepoint2name[ord(c)]
- except:
- ret += c
- ret = re.sub("([a-zA-Z])(uml|acute|grave|circ|tilde|cedil)", r"\1", ret)
- ret = re.sub("\W", " ", ret)
- ret = re.sub(" +", separator, ret)
- return ret.strip()
+ ret = ""
+ for c in text.lower():
+ try:
+ ret += htmlentitydefs.codepoint2name[ord(c)]
+ except:
+ ret += c
+ ret = re.sub("([a-zA-Z])(uml|acute|grave|circ|tilde|cedil)", r"\1", ret)
+ ret = re.sub("\W", " ", ret)
+ ret = re.sub(" +", separator, ret)
+ return ret.strip()
def repl(m):
- global toc
- label = slugify(m.group(3), "_")
- if labels.has_key(label):
- n = 0
- while True:
- l = "%s_%d" % (label, n)
- if not labels.has_key(l):
- label = l
- break
- n += 1
-
- toc.append( (label, int(m.group(1))-1, m.group(3)) )
- return '%s ' % (
- m.group(1),
- m.group(2),
- m.group(3),
- label,
- m.group(1))
+ global toc
+ label = slugify(m.group(3), "_")
+ if labels.has_key(label):
+ n = 0
+ while True:
+ l = "%s_%d" % (label, n)
+ if not labels.has_key(l):
+ label = l
+ break
+ n += 1
+
+ toc.append( (label, int(m.group(1))-1, m.group(3)) )
+ return '%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
@@ -69,31 +69,32 @@ def repl(m):
@set_hook("linkify")
def linkify(params):
- global toc
- global labels
- toc = []
- labels = {}
+ global toc
+ global labels
+ toc = []
+ labels = {}
- # Very small pages don't need a table-of-contents
- if params.file.contents.count("\n") < toc_min_lines:
- return
+ # Very small pages don't need a table-of-contents
+ if params.file.contents.count("\n") < toc_min_lines:
+ return
- params.file.contents = reHeader.sub(repl, params.file.contents)
+ params.file.contents = reHeader.sub(repl, params.file.contents)
@set_function("get_toc")
def get_toc():
- level = 1
- res = []
- for (label, lvl, txt) in toc:
- while lvl > level:
- res.append("%s
" % (" "*level))
- level += 1
- while lvl < level:
- level -= 1
- res.append("%s
" % (" "*level))
- res.append('%s%s' % (" " * level, label, txt))
- while level > 1:
- level -= 1
- return "\n".join(res)
+ level = 1
+ res = []
+ for (label, lvl, txt) in toc:
+ while lvl > level:
+ res.append("%s" % (" "*level))
+ level += 1
+ while lvl < level:
+ level -= 1
+ res.append("%s
" % (" "*level))
+ res.append('%s%s' %
+ (" " * level, label, txt))
+ while level > 1:
+ level -= 1
+ return "\n".join(res)