\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:]:
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):
if letter == '.':
lettername = ". (dot)"
elif letter == '_':
lettername = "_ (underscore)"
else:
lettername = string.upper(letter)
return "\n
\n\n\n" \
% (letter, lettername)
def format_html(nodes):
letter_groups = split_letters(nodes)
items = []
for letter, nodes in letter_groups:
s = "%s" % (letter, letter)
items.append(s)
s = ["
\n%s\n" % string.join(items, " |\n")]
for letter, nodes in letter_groups:
s.append(format_letter(letter))
s.append(format_nodes(nodes))
return string.join(s, '')
def collapse(nodes):
"""Collapse sequences of nodes with matching keys into a single node.
Destructive."""
if len(nodes) < 2:
return
prev = nodes[0]
i = 1
while i < len(nodes):
node = nodes[i]
if not node.cmp_entry(prev):
prev.links.append(node.links[0])
del nodes[i]
else:
i = i + 1
prev = node
def dump(nodes, fp):
for node in nodes:
fp.write(node.dump())
def main():
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()
collapse(nodes)
html = format_html(nodes)
if ofn == "-":
sys.stdout.write(html)
else:
open(ofn, "w").write(html)
if __name__ == "__main__":
main()