--- /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<name>[a-zA-Z0-9-_.]*)\[(?P<typ>[a-zA-Z0-9-_]*)\]:(?P<d>.*)$",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<keywords>(?P<whitespace>\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<ret>(?P<whitespace>\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()