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)) - 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)) + res.append('%s
  • %s
  • ' % + (" " * level, label, txt)) + while level > 1: + level -= 1 + return "\n".join(res)