#!/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
"""
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 += '- [%s]
' % name
ret += table_of_contents(o.entries)
ret += '
'
continue
except: pass
ret += '- [%s]
' % 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("""
"""%
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('
\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()