pykd/snippets/pytowiki.py
SND\kernelnet_cp a6048b8783 [snippets] updated: pytowiki script
git-svn-id: https://pykd.svn.codeplex.com/svn@64253 9b283d60-5439-405e-af05-b73fd8c4d996
2011-04-20 08:12:47 +00:00

115 lines
3.1 KiB
Python

#
#
#
import sys
def usage():
print "python pytowiki.py module_name"
class CodeplexFormatter:
def endl( self ):
return "\n"
def header1( self, s ):
return "! " + s + self.endl()
def header2( self, s ):
return "!! " + s + self.endl()
def header3( self, s ):
return "!!! " + s + self.endl()
def header4( self, s ):
return "!!!! " + s + self.endl()
def bulletItem( self, s ):
return "* " + s + self.endl()
def escapeMarkup( self, s ):
return "{\"" + s + "\"}"
def link( self, text, link ):
return "[" + text + "|#" + link + "]"
def anchor( self, link ):
return "{anchor:" + link + "}" + self.endl()
class ModuleInfo:
def __init__ (self, module):
self.funcs = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "function" ], key=lambda x: x.__name__ )
self.classes = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "class" ], key=lambda x: x.__name__ )
for cls in self.classes:
cls.methods = sorted( [ item for item in cls.__dict__.values() if type(item).__name__ == "function" ], key=lambda x: x.__name__ )
def buildDoc( ioStream, formatter, apiInfo ):
ioStream.write( formatter.header2( "Functions" ) )
for func in apiInfo.funcs:
ioStream.write( formatter.bulletItem( formatter.link( func.__name__, func.__name__ ) ) )
ioStream.write( formatter.header2( "Classes" ) )
for cls in apiInfo.classes:
ioStream.write( formatter.bulletItem( formatter.link( cls.__name__, cls.__name__ ) ) )
for func in apiInfo.funcs:
ioStream.write( formatter.anchor( func.__name__ ) )
ioStream.write( formatter.header3( func.__name__ ) )
ioStream.write( formatter.escapeMarkup( func.__doc__) + formatter.endl() )
for cls in apiInfo.classes:
ioStream.write( formatter.anchor( cls.__name__ ) )
ioStream.write( formatter.header3( cls.__name__ ) )
ioStream.write( formatter.escapeMarkup( cls.__doc__) + formatter.endl() )
for m in cls.methods:
if m.__doc__ != None:
ioStream.write( formatter.bulletItem( formatter.escapeMarkup( m.__name__ ) ) )
for m in cls.methods:
if m.__doc__ != None:
ioStream.write( formatter.header4( formatter.escapeMarkup( m.__name__ ) ) )
ioStream.write( formatter.escapeMarkup( m.__doc__ ) + formatter.endl() )
def main():
if len(sys.argv) < 2:
usage()
return
moduleName = sys.argv[1]
try:
module = __import__( moduleName )
with file( "wiki.txt", "w" ) as wikiIo:
apiInfo = ModuleInfo( module )
formatter = CodeplexFormatter()
buildDoc( wikiIo, formatter, apiInfo )
except ImportWarning:
print "failed to import module " + moduleName
if __name__ == "__main__":
main()