[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdev-python] documentation_src/numpy: more complete version of the
From:       Sven Brauch <svenbrauch () googlemail ! com>
Date:       2011-09-30 21:54:32
Message-ID: 20110930215432.AC521A60A6 () git ! kde ! org
[Download RAW message or body]

Git commit a3a051a623266beee370178bcaa599a41554ef1f by Sven Brauch.
Committed on 30/09/2011 at 22:00.
Pushed by brauch into branch 'master'.

more complete version of the numpy doc generator

M  +56   -4    documentation_src/numpy/generate_numpy_doc.py

http://commits.kde.org/kdev-python/a3a051a623266beee370178bcaa599a41554ef1f

diff --git a/documentation_src/numpy/generate_numpy_doc.py \
b/documentation_src/numpy/generate_numpy_doc.py index 1c8fbe6..5dd43df 100644
--- a/documentation_src/numpy/generate_numpy_doc.py
+++ b/documentation_src/numpy/generate_numpy_doc.py
@@ -10,6 +10,30 @@ def indent(text):
         result += "    " + line + "\n"
     return result
 
+def get_indent(string):
+    string = string.split("\n")[0]
+    indent = 0
+    for char in string:
+        if char in [' ', '\t']:
+            indent += 1
+        else:
+            return indent
+    return 0
+
+def remove_indent(string):
+    if type(string) == types.StringType:
+        string = string.split("\n")
+        max_remove_indent = get_indent(string[0])
+        result = ""
+        for line in string:
+            for offset in xrange(0, len(line)):
+                if line[offset] not in [' ', '\t'] or offset > max_remove_indent:
+                    result += line[offset:] + "\n"
+                    break
+        return result
+    else:
+        return string
+
 def make_documentation(class_or_module):
     result = ""
     for item_name in dir(class_or_module):
@@ -21,8 +45,8 @@ def make_documentation(class_or_module):
         item = getattr(class_or_module, item_name)
         if type(item) in [types.FunctionType, types.BuiltinFunctionType, \
types.UnboundMethodType]:  parameters = try_parse_func_docstring(item.__doc__)
-            result += "def %s():\n" % item_name
-            result += indent('"""%s"""\n\n' % item.__doc__)
+            result += "def %s(%s):\n" % ( item_name, ','.join(parameters) )
+            result += indent('"""%s"""\n\n' % remove_indent(item.__doc__))
         elif type(item) == types.TypeType:
             result += "class %s:\n" % item_name
             result += indent(make_documentation(item)) + "\n"
@@ -38,9 +62,37 @@ def make_documentation(class_or_module):
 
 def try_parse_func_docstring(docstring):
     if type(docstring) == types.StringType:
-        params_found = re.search("\n[\\s]*Parameters[\\s]*\n", docstring, re.U)
+        indent = 0
+        atLineBeginning = True
+        paramListBegin = paramListEnd = 0
+        for offset in xrange(0, len(docstring)):
+            if docstring[offset] == "\n":
+                indent = 0
+            if docstring[offset] in [' ', '\t'] and atLineBeginning:
+                indent += 1
+            else:
+                atLineBeginning = False
+            if docstring[offset:offset+len("Parameters")] == "Parameters":
+                paramListBegin = offset
+            if docstring[offset:offset+len("Returns")] == "Returns":
+                paramListEnd = offset
+        relevantPart = docstring[paramListBegin:paramListEnd].split("\n")[2:]
+        if len(relevantPart):
+            firstIndent = get_indent(relevantPart[0])
+            parameter_name_list = []
+            for line_index in xrange(0, len(relevantPart)):
+                if get_indent(relevantPart[line_index]) == firstIndent:
+                    s = relevantPart[line_index].split(' : ')
+                    if len(s) == 2:
+                        name = s[0]
+                        type_string = s[1]
+                        doc_for_param = None # TODO extract this, and display it in \
some way... or not +                        parameter_name_list.append(name.replace(' \
', '').replace('\t', '')) +            return parameter_name_list
+        else:
+            return []
     else:
-        params_found = None
+        return []
 
 if __name__ == '__main__':
     print make_documentation(numpy)
\ No newline at end of file


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic