diff -r 0f3063b5e96b -r e7b44716a564 createdoc.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/createdoc.py Tue Dec 06 19:46:00 2011 +0100 @@ -0,0 +1,128 @@ +#!/usr/bin/env python2.7 +# -*- coding: utf-8 -*- + +from genshi.template import TemplateLoader + +loader = TemplateLoader('doc/tmpl', auto_reload=True) + +import re +import inspect +from iro.user import User + + +user_methods = dict(inspect.getmembers(User(None,None))) + +class Link(): + def __init__(self,name,title): + self.name=name + self.title=title + + def getLink(self): + return self.name + + def __getitem__(self,name): + if name == "link": + return self.getLink() + return AttributeError(name) + +class Site(Link): + pass + + +class Keyword(): + def __init__(self,name,typ,description): + self.name=name + self.typ=typ + self.description=description + +def section(text): + ret={} + li=[] + kw=None + for line in text.split("\n"): + if re.match("^\s*$",line): + continue + + if line[0] not in (" ","\t"): + if kw: + ret[kw.name]=kw + li.append(kw) + l=re.match(r"^(?P[a-zA-Z0-9-_.]*)\[(?P[a-zA-Z0-9-_]*)\]:(?P.*)$",line) + kw=Keyword(name=l.group("name"),typ=l.group("typ"),description=l.group("d")) + else: + kw.description+="\n"+line.strip() + if kw: + ret[kw.name]=kw + li.append(kw) + return ret,li + + + +def keywords(f): + doc=f.__doc__ + kwds=re.search("Keywords:\n(?P(?P\s*)(.+\n)*)\n",doc) + k=kwds.group("keywords") + #get rid of beginning whitespaces + k=re.sub(re.compile(r"^"+kwds.group("whitespace"),re.M),"",k) + return section(k) + +def ret(f): + doc=f.__doc__ + kwds=re.search("Return:\n(?P(?P\s*)(.+\n)*)\n",doc) + k=kwds.group("ret") + #get rid of beginning whitespaces + k=re.sub(re.compile(r"^"+kwds.group("whitespace"),re.M),"",k) + return section(k) + + + +class Arg(): + def __init__(self,name,f): + self.name=name + k,_ = keywords(f) + kwd=k[name] + self.typ=kwd.typ + self.description=kwd.description + + + +class Method(Link): + def __init__(self,name,title): + Link.__init__(self,name,title) + m=user_methods[name] + self.description = m.__doc__.split("\n")[0] + a=inspect.getargspec(m) + self.args=[Arg(a,m) for a in a.args if a is not "self"] + _, self.rets=ret(m) + + +def main(): + sites=[Site("index.html","Iro"), + Site("current.html","API Documentation"), + Site("new.html","geplante API Documentation"), + Site("impressum.html","Impressum"), + ] + + methods=[ + Method("startSMS","StartSMS"), + Method("startFAX","StartFAX"), + Method("startMail","StartMail"), + + Method("status","Status"), + Method("stop","Stop"), + + Method("getProvider","GetProvider"), + Method("getDefaultProvider","GetDefaultProvider"), + ] + for site in sites: + print("generiere %s" % site.name) + tmpl = loader.load(site.name) + def a(s): + if s == site: + return {"class":"menu active"} + stream = tmpl.generate(sites=sites,active=a,methods=methods) + with open('doc/'+site.name, "w") as g: + g.write(stream.render('html', doctype='html')) + +if __name__ == '__main__': + main()