#!/usr/bin/python from sys import argv entries_text = open(argv[1]).read().split("(*"); if len(argv) > 2: target = argv[2] else: target = 'guide.html' target_fmt = target.replace('.html', '_%s.html') stripped_target_fmt = target.split('/')[-1].replace('.html', '_%s.html') SECTION_TEMPLATE = """
%s
""" class Section: name = None entries = None def __init__(self,name): self.name = name; self.entries = {}; def out(self): return SECTION_TEMPLATE%(name.replace(' ', '_'), name) ENTRY_TEMPLATE = """

%s: %s



%s
%s %s """ class Entry: def __init__(self, name, section, illustration, caption, data): self.name = name; self.section = section; self.illustration = illustration; self.caption = caption; self.data = data def out(self): return process_text(ENTRY_TEMPLATE%( self.name.replace(' ', '_'), self.section, self.name, self.illustration, self.caption, self.caption, self.caption, self.data)) entries = {} for entry in entries_text: if not entry: continue meta, text = entry.split("*)"); name, illustration, caption = meta.split("*"); section, name = name.split("."); entries[name.strip()] = Entry(name.strip(), section.strip(), illustration.strip(), caption.strip(), text) sections = {} for name, entry in entries.items(): if not sections.has_key(entry.section): sections[entry.section] = Section(entry.section) sections[entry.section].entries[name] = entry def process_text(text): i = 0 p = 0 k = 0 new_text = [] while True: i = text.find("[", i) if i == -1: break k = text.find("]", i) new_text.append(text[p+1:i]) try: entry = entries[text[i+1:k]] except KeyError, e: print "Section referenced near \"%s\" doesn't exit: %s"%( text[p+1:i], e) new_text.append('
%s' %(stripped_target_fmt % entry.section.replace(' ','_'), entry.name.replace(' ','_'), entry.name )) p = k i = k new_text.append(text[k+1:]) return ''.join(new_text).replace('\n', '
\n') def table_of_contents(d): ret = '
    ' for name, o in d.items(): try: o.entries ret += '
  1. [%s]
      ' % name ret += table_of_contents(o.entries) ret += '
  2. ' continue except: pass ret += '
  3. [%s]
  4. ' % name ret += '
' return process_text(ret) INDEX_TEMPLATE = """
The Definative Guide to TunnelHack

The Definative Guide to TunnelHack


By Bryce Schroeder et al



""" index_file = open(target, "w") index_file.write(INDEX_TEMPLATE) for name, section in sections.items(): index_file.write(section.out()) file = open(target_fmt%name.replace(' ', '_'), "w") file.write("""
The TunnelHack Guide: %s
"""% name) file.write("\n") file.write(table_of_contents(section.entries)) file.write("

%s




\n"%name) section_heading = section.entries[section.name] if section_heading.illustration: file.write('%s\n'% (section_heading.caption, section_heading.caption)) file.write("

%s



"%process_text(section_heading.data)) for name, entry in section.entries.items(): if entry.name == section.name: continue file.write(entry.out()) file.write("") file.close() index_file.write('


') index_file.write(table_of_contents(sections)) index_file.write("") index_file.close()