"]
append = strings.append
- prev = None
+ previous = []
for node in nodes:
- nlevel = len(node.key) - 1
- if nlevel > level:
- if prev is None or node.key[level] != prev.key[level]:
- append("%s\n" % node.text[level])
- else:
- append("")
- level = nlevel
- elif nlevel < level:
- append("
" * (level - len(node.key) + 1))
- level = nlevel
- if prev is not None and node.key[level] != prev.key[level]:
- append("
")
- else:
- append("")
- elif level:
- if node.key[level-1] != prev.key[level-1]:
- append("
\n%s"
- % node.text[level-1])
- append("%s%s
" % (node.links[0], node.text[-1]))
+ current = node.text
+ count = 0
+ for i in range(min(len(current), len(previous))):
+ if previous[i] != current[i]:
+ break
+ count = i + 1
+ if count > level:
+ append("" * (count - level) + "\n")
+ level = count
+ elif level > count:
+ append("\n")
+ append(level * DL_LEVEL_INDENT)
+ append("
" * (level - count))
+ level = count
+ # else: level == count
+ for i in range(count, len(current) - 1):
+ term = node.text[i]
+ level = level + 1
+ append("\n- %s\n
- \n%s
"
+ % (term, level * DL_LEVEL_INDENT))
+ append("\n%s- %s%s"
+ % (level * DL_LEVEL_INDENT, node.links[0], node.text[-1]))
for link in node.links[1:]:
- strings[-1] = strings[-1][:-4] + ","
- append(link + "[Link]
")
- prev = node
- append("
" * (level + 1))
- append("")
- append("")
- return string.join(strings, "\n")
+ append(",\n%s %s[Link]" % (level * DL_LEVEL_INDENT, link))
+ previous = current
+ append("\n")
+ append("
" * (level + 1))
+ append("\n")
+ return string.join(strings, '')
def format_letter(letter):
@@ -158,7 +194,7 @@ def format_letter(letter):
lettername = "_ (underscore)"
else:
lettername = string.upper(letter)
- return "
\n\n\n" \
+ return "\n
\n\n\n" \
% (letter, lettername)
@@ -168,10 +204,11 @@ def format_html(nodes):
for letter, nodes in letter_groups:
s = "%s" % (letter, letter)
items.append(s)
- s = "
\n%s\n" % string.join(items, " |\n")
+ s = ["
\n%s\n" % string.join(items, " |\n")]
for letter, nodes in letter_groups:
- s = s + format_letter(letter) + format_nodes(nodes)
- return s
+ s.append(format_letter(letter))
+ s.append(format_nodes(nodes))
+ return string.join(s, '')
def collapse(nodes):
@@ -186,7 +223,6 @@ def collapse(nodes):
if not node.cmp_entry(prev):
prev.links.append(node.links[0])
del nodes[i]
-## sys.stderr.write("collapsing %s\n" % `node`)
else:
i = i + 1
prev = node
@@ -198,13 +234,25 @@ def dump(nodes, fp):
def main():
- fn = sys.argv[1]
- nodes = load(open(fn))
+ import getopt
+ ifn = "-"
+ ofn = "-"
+ opts, args = getopt.getopt(sys.argv[1:], "o:", ["output="])
+ for opt, val in opts:
+ if opt in ("-o", "--output"):
+ ofn = val
+ if not args:
+ args = [ifn]
+ nodes = []
+ for fn in args:
+ nodes = nodes + load(open(fn))
nodes.sort()
- dump(nodes, open(fn + ".dump-1", "w"))
collapse(nodes)
- dump(nodes, open(fn + ".dump-2", "w"))
- sys.stdout.write(format_html(nodes))
+ html = format_html(nodes)
+ if ofn == "-":
+ sys.stdout.write(html)
+ else:
+ open(ofn, "w").write(html)
if __name__ == "__main__":