#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, re, string, sys
class Tree:
def __init__(self):
self.link = None
self.branches = {}
def html(self):
if not self.branches:
return ''
res = "
\n"
#for (k, v) in self.branches.iteritems():
for k in sorted(self.branches.keys()):
v = self.branches[k]
res += "- "
if v.link:
res += '%s' % (v.link, k)
else:
res += k
res += v.html()
res += "
\n"
res += "
\n"
return res
def __repr__(self):
res = ''
#for (k, v) in self.branches.iteritems():
for k in sorted(self.branches.keys()):
v = self.branches[k]
res += k
if v.link:
res += ' => ' + v.link
res += "\n"
res += "\n".join([' ' + l for l in repr(v).splitlines()]) + "\n"
return res
def setlink(self, p):
if self.link is None:
self.link = p
else:
raise RuntimeError(p)
def branch(self, p):
return self.branches.setdefault(p, Tree())
res = Tree()
def add(path, keywords, tree=res):
if len(keywords)==0:
tree.setlink(path)
else:
p = keywords[0]
add(path, keywords[1:], tree.branch(p))
def process(filename):
match = re.compile('^\s*', re.S|re.M).search(open(filename).read())
if match:
for line in match.group(1).splitlines():
# filename hat die Form './…' ⇒ also erstes Zeichen abschneiden
add(filename[1:], re.split('\s\|\s', line.strip()))
for root, dirs, files in os.walk('.'):
for f in files:
process(os.path.join(root, f))
try:
of = file('sitemap/sitemap.inc', 'w')
except RuntimeError, e:
print 'RuntimeError', e
sys.exit()
print >> of, res.html()
print res