added markdown formatter for auto created documentation

This commit is contained in:
ussrhero 2017-12-28 12:01:03 +03:00
parent e44c85414d
commit 34c9190bdb

View File

@ -38,6 +38,46 @@ class CodeplexFormatter:
def anchor( self, link ): def anchor( self, link ):
return "{anchor:" + link + "}" + self.endl() return "{anchor:" + link + "}" + self.endl()
class MarkdownFormatter:
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 self.endl() + "```" + self.endl() + s + self.endl() + "```" + self.endl()
def link( self, text, link ):
return "[" + text + "](#" + link + ")"
def anchor( self, link ):
return "<a name=\"" + link + "\"></a>" + self.endl()
def escapeSymbols(self, text):
output = ""
escapeSyms = ['_']
for s in text:
if s in escapeSyms:
output += "\\" + s
else:
output += s
return output
class ModuleInfo: class ModuleInfo:
@ -59,11 +99,14 @@ def buildDoc( ioStream, formatter, apiInfo ):
for func in apiInfo.funcs: for func in apiInfo.funcs:
ioStream.write( formatter.bulletItem( formatter.link( func.__name__, func.__name__ ) ) ) ioStream.write( formatter.bulletItem( formatter.link( func.__name__, func.__name__ ) ) )
ioStream.write( formatter.endl() )
ioStream.write( formatter.header2( "Classes" ) ) ioStream.write( formatter.header2( "Classes" ) )
for cls in apiInfo.classes: for cls in apiInfo.classes:
ioStream.write( formatter.bulletItem( formatter.link( cls.__name__, cls.__name__ ) ) ) ioStream.write( formatter.bulletItem( formatter.link( cls.__name__, cls.__name__ ) ) )
ioStream.write( formatter.endl() )
for func in apiInfo.funcs: for func in apiInfo.funcs:
ioStream.write( formatter.anchor( func.__name__ ) ) ioStream.write( formatter.anchor( func.__name__ ) )
@ -89,32 +132,34 @@ def buildDoc( ioStream, formatter, apiInfo ):
ioStream.write( formatter.header4( "Properties:") ) ioStream.write( formatter.header4( "Properties:") )
for p in cls.properties: for p in cls.properties:
ioStream.write( formatter.bulletItem( formatter.link( p[0], cls.__name__ + "." + p[0]) ) ) ioStream.write( formatter.bulletItem( formatter.link( p[0], cls.__name__ + "." + p[0]) ) )
ioStream.write( formatter.endl() )
if cls.methods: methods = filter( lambda m: m.__doc__ != None, cls.methods )
if methods:
ioStream.write( formatter.header4( "Methods:") ) ioStream.write( formatter.header4( "Methods:") )
for m in cls.methods: for m in methods:
if m.__doc__ != None: ioStream.write( formatter.bulletItem( formatter.link( formatter.escapeSymbols(m.__name__), cls.__name__ + "." + m.__name__)) )
ioStream.write( formatter.bulletItem( formatter.link( m.__name__, cls.__name__ + "." + m.__name__) ) ) ioStream.write( formatter.endl() )
if cls.enum: if cls.enum:
ioStream.write( formatter.header4( "Values:") ) ioStream.write( formatter.header4( "Values:") )
for v in cls.enum.items(): for v in cls.enum.items():
ioStream.write( formatter.bulletItem( "%s: %d" % v ) ) ioStream.write( formatter.bulletItem( "%s: %d" % v ) )
ioStream.write( formatter.endl() )
if cls.properties: if cls.properties:
for p in cls.properties: for p in cls.properties:
if p[1].__doc__ != None: if p[1].__doc__ != None:
ioStream.write( formatter.anchor( cls.__name__ + "." + p[0] ) ) ioStream.write( formatter.anchor( cls.__name__ + "." + p[0] ) )
ioStream.write( formatter.header4( formatter.escapeMarkup( "Property " + cls.__name__ + "." + p[0] ) ) ) ioStream.write( formatter.header4( "Property " + cls.__name__ + "." + p[0] ) )
ioStream.write( formatter.escapeMarkup( p[1].__doc__ ) + formatter.endl() ) ioStream.write( formatter.escapeMarkup( p[1].__doc__ ) + formatter.endl() )
if cls.methods: if methods:
for m in cls.methods: for m in methods:
if m.__doc__ != None: ioStream.write( formatter.anchor( cls.__name__ + "." + m.__name__ ) )
ioStream.write( formatter.anchor( cls.__name__ + "." + m.__name__ ) ) ioStream.write( formatter.header4( formatter.escapeSymbols("Method " + cls.__name__ + "." + m.__name__ )) )
ioStream.write( formatter.header4( formatter.escapeMarkup( "Method " + cls.__name__ + "." + m.__name__ ) ) ) ioStream.write( formatter.escapeMarkup( m.__doc__ ) + formatter.endl() )
ioStream.write( formatter.escapeMarkup( m.__doc__ ) + formatter.endl() )
def main(): def main():
@ -133,7 +178,8 @@ def main():
apiInfo = ModuleInfo( module ) apiInfo = ModuleInfo( module )
formatter = CodeplexFormatter() #formatter = CodeplexFormatter()
formatter = MarkdownFormatter()
buildDoc( wikiIo, formatter, apiInfo ) buildDoc( wikiIo, formatter, apiInfo )