First commit
diff --git a/util/doxify.py b/util/doxify.py
new file mode 100644
index 0000000..f9f60ad
--- /dev/null
+++ b/util/doxify.py
@@ -0,0 +1,89 @@
+#!/usr/bin/python
+
+"""
+Convert simple documentation to epydoc/pydoctor-compatible markup
+"""
+
+from sys import stdin, stdout, argv
+import os
+from tempfile import mkstemp
+from subprocess import call
+
+import re
+
+spaces = re.compile( r'\s+' )
+singleLineExp = re.compile( r'\s+"([^"]+)"' )
+commentStartExp = re.compile( r'\s+"""' )
+commentEndExp = re.compile( r'"""$' )
+returnExp = re.compile( r'\s+(returns:.*)' )
+lastindent = ''
+
+
+comment = False
+
+def fixParam( line ):
+ "Change foo: bar to @foo bar"
+ result = re.sub( r'(\w+):', r'@param \1', line )
+ result = re.sub( r' @', r'@', result)
+ return result
+
+def fixReturns( line ):
+ "Change returns: foo to @return foo"
+ return re.sub( 'returns:', r'@returns', line )
+
+def fixLine( line ):
+ global comment
+ match = spaces.match( line )
+ if not match:
+ return line
+ else:
+ indent = match.group(0)
+ if singleLineExp.match( line ):
+ return re.sub( '"', '"""', line )
+ if commentStartExp.match( line ):
+ comment = True
+ if comment:
+ line = fixReturns( line )
+ line = fixParam( line )
+ if commentEndExp.search( line ):
+ comment = False
+ return line
+
+
+def test():
+ "Test transformations"
+ assert fixLine(' "foo"') == ' """foo"""'
+ assert fixParam( 'foo: bar' ) == '@param foo bar'
+ assert commentStartExp.match( ' """foo"""')
+
+def funTest():
+ testFun = (
+ 'def foo():\n'
+ ' "Single line comment"\n'
+ ' """This is a test"""\n'
+ ' bar: int\n'
+ ' baz: string\n'
+ ' returns: junk"""\n'
+ ' if True:\n'
+ ' print "OK"\n'
+ ).splitlines( True )
+
+ fixLines( testFun )
+
+def fixLines( lines, fid ):
+ for line in lines:
+ os.write( fid, fixLine( line ) )
+
+if __name__ == '__main__':
+ if False:
+ funTest()
+ infile = open( argv[1] )
+ outfid, outname = mkstemp()
+ fixLines( infile.readlines(), outfid )
+ infile.close()
+ os.close( outfid )
+ call( [ 'doxypy', outname ] )
+
+
+
+