Source

pygame / test / util / create_doc_from_py.py

Full commit
"""

For creating .doc documentation from .py files that include documentation.


"""



import sys, os, textwrap
#import pygame.sprite

#the_module = pygame.sprite
#the_doc = "sprite.doc"

try:
#if 1:
    the_module = __import__(sys.argv[-1])
    last_part = sys.argv[-1].split(".")[-1]
    the_module = getattr(the_module, last_part)

except:
    print "useage:\n  python create_doc_from_py.py pygame.sprite"
    raise



# put makeref.py in the path.
sys.path.append(os.path.join("..", ".."))
from makeref import Doc

out = []
out += [the_module.__doc__, "<SECTION>\n\n\n"]
#out += [the_module.__doc__]

if hasattr(the_module, "__all__"):
    all_attrs = the_module.__all__
else:
    all_attrs = dir(the_module)


def get_docs(the_object, all_attrs, find_children = 1):
    out = []

    for d in all_attrs:

        if d.startswith("_"):
            continue
        a = getattr(the_object, d)

        # skip constants.
        if type(a) == type(1):
            continue
        #print a
        #print d
        if not a.__doc__:
            raise Exception(repr(a))
        parts = a.__doc__.split("\n")

        # remove some parts at the end that are empty lines.
        while parts:
            #print "parts[-1] :%s:" % parts[-1]
            if not parts[-1].strip():
                #print "del!"
                del parts[-1]
            else:
                break

        text = parts[0] + "\n" + textwrap.dedent( "\n".join(parts[1:]))


        #out += [d, text , "<END>\n\n\n"]
        out += [d, text]


        # get any children...
        #if find_children:
        if hasattr(the_object, "__theclasses__"):
            if d in the_object.__theclasses__:
                out += ["<SECTION>\n\n\n"]
                children_attrs = dir(a)
                #print children_attrs
                out += get_docs(a, children_attrs, 0)
                out[-1] = out[-1][:-3]
                out += ["<END>\n\n\n"]
            else:
                pass
                #out += ["<END>\n\n\n"]
                out += ["<END>\n\n\n"]
        else:
            out += ["<END>\n\n\n"]


    return out


out += get_docs(the_module, all_attrs)


print "\n".join(out)