examples for autogenerated docs are now implicit and used when available.
This means adding the file "bpy.props.py" in the examples dir will automatically be used when generating docs, unused examples give warnings.
This commit is contained in:
@@ -43,6 +43,9 @@ import bpy
|
|||||||
import rna_info
|
import rna_info
|
||||||
reload(rna_info)
|
reload(rna_info)
|
||||||
|
|
||||||
|
EXAMPLE_SET = set()
|
||||||
|
EXAMPLE_SET_USED = set()
|
||||||
|
|
||||||
def range_str(val):
|
def range_str(val):
|
||||||
if val < -10000000: return '-inf'
|
if val < -10000000: return '-inf'
|
||||||
if val > 10000000: return 'inf'
|
if val > 10000000: return 'inf'
|
||||||
@@ -51,6 +54,16 @@ def range_str(val):
|
|||||||
else:
|
else:
|
||||||
return str(val)
|
return str(val)
|
||||||
|
|
||||||
|
|
||||||
|
def write_example_ref(ident, fw, example_id, ext=".py"):
|
||||||
|
if example_id in EXAMPLE_SET:
|
||||||
|
fw("%s.. literalinclude:: ../examples/%s%s\n\n" % (ident, example_id, ext))
|
||||||
|
EXAMPLE_SET_USED.add(example_id)
|
||||||
|
else:
|
||||||
|
if bpy.app.debug:
|
||||||
|
print("\tskipping example:", example_id)
|
||||||
|
|
||||||
|
|
||||||
def write_indented_lines(ident, fn, text, strip=True):
|
def write_indented_lines(ident, fn, text, strip=True):
|
||||||
if text is None:
|
if text is None:
|
||||||
return
|
return
|
||||||
@@ -152,6 +165,8 @@ def pymodule2sphinx(BASEPATH, module_name, module, title):
|
|||||||
# Note, may contain sphinx syntax, dont mangle!
|
# Note, may contain sphinx syntax, dont mangle!
|
||||||
fw(module.__doc__.strip())
|
fw(module.__doc__.strip())
|
||||||
fw("\n\n")
|
fw("\n\n")
|
||||||
|
|
||||||
|
write_example_ref("", fw, module_name)
|
||||||
|
|
||||||
# write members of the module
|
# write members of the module
|
||||||
# only tested with PyStructs which are not exactly modules
|
# only tested with PyStructs which are not exactly modules
|
||||||
@@ -188,6 +203,7 @@ def pymodule2sphinx(BASEPATH, module_name, module, title):
|
|||||||
if value.__doc__:
|
if value.__doc__:
|
||||||
write_indented_lines(" ", fw, value.__doc__, False)
|
write_indented_lines(" ", fw, value.__doc__, False)
|
||||||
fw("\n")
|
fw("\n")
|
||||||
|
write_example_ref(" ", fw, module_name + "." + attribute)
|
||||||
|
|
||||||
for key in sorted(value.__dict__.keys()):
|
for key in sorted(value.__dict__.keys()):
|
||||||
if key.startswith("__"):
|
if key.startswith("__"):
|
||||||
@@ -197,6 +213,7 @@ def pymodule2sphinx(BASEPATH, module_name, module, title):
|
|||||||
if descr.__doc__:
|
if descr.__doc__:
|
||||||
fw(" .. attribute:: %s\n\n" % key)
|
fw(" .. attribute:: %s\n\n" % key)
|
||||||
write_indented_lines(" ", fw, descr.__doc__, False)
|
write_indented_lines(" ", fw, descr.__doc__, False)
|
||||||
|
write_example_ref(" ", fw, module_name + "." + attribute + "." + key)
|
||||||
fw("\n")
|
fw("\n")
|
||||||
|
|
||||||
for key in sorted(value.__dict__.keys()):
|
for key in sorted(value.__dict__.keys()):
|
||||||
@@ -206,6 +223,7 @@ def pymodule2sphinx(BASEPATH, module_name, module, title):
|
|||||||
if type(descr) == MethodDescriptorType: # GetSetDescriptorType, GetSetDescriptorType's are not documented yet
|
if type(descr) == MethodDescriptorType: # GetSetDescriptorType, GetSetDescriptorType's are not documented yet
|
||||||
if descr.__doc__:
|
if descr.__doc__:
|
||||||
write_indented_lines(" ", fw, descr.__doc__, False)
|
write_indented_lines(" ", fw, descr.__doc__, False)
|
||||||
|
write_example_ref(" ", fw, module_name + "." + attribute + "." + key)
|
||||||
fw("\n")
|
fw("\n")
|
||||||
|
|
||||||
fw("\n\n")
|
fw("\n\n")
|
||||||
@@ -501,14 +519,27 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
path_in = 'source/blender/python/doc/sphinx-in'
|
path_in = 'source/blender/python/doc/sphinx-in'
|
||||||
path_out = 'source/blender/python/doc/sphinx-in'
|
path_out = 'source/blender/python/doc/sphinx-in'
|
||||||
|
path_examples = 'source/blender/python/doc/examples'
|
||||||
|
|
||||||
shutil.rmtree(path_in, True)
|
shutil.rmtree(path_in, True)
|
||||||
shutil.rmtree(path_out, True)
|
shutil.rmtree(path_out, True)
|
||||||
|
|
||||||
|
for f in os.listdir(path_examples):
|
||||||
|
if f.endswith(".py"):
|
||||||
|
EXAMPLE_SET.add(os.path.splitext(f)[0])
|
||||||
|
|
||||||
rna2sphinx(path_in)
|
rna2sphinx(path_in)
|
||||||
|
|
||||||
# for fast module testing
|
# for fast module testing
|
||||||
# os.system("rm source/blender/python/doc/sphinx-in/bpy.types.*.rst")
|
# os.system("rm source/blender/python/doc/sphinx-in/bpy.types.*.rst")
|
||||||
# os.system("rm source/blender/python/doc/sphinx-in/bpy.ops.*.rst")
|
# os.system("rm source/blender/python/doc/sphinx-in/bpy.ops.*.rst")
|
||||||
|
|
||||||
|
EXAMPLE_SET_UNUSED = EXAMPLE_SET - EXAMPLE_SET_USED
|
||||||
|
if EXAMPLE_SET_UNUSED:
|
||||||
|
print("\nUnused examples found in '%s'..." % path_examples)
|
||||||
|
for f in EXAMPLE_SET_UNUSED:
|
||||||
|
print(" %s.py" % f)
|
||||||
|
print(" %d total\n" % len(EXAMPLE_SET_UNUSED))
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
@@ -55,9 +55,7 @@
|
|||||||
|
|
||||||
//-------------------------DOC STRINGS ---------------------------
|
//-------------------------DOC STRINGS ---------------------------
|
||||||
static char M_Mathutils_doc[] =
|
static char M_Mathutils_doc[] =
|
||||||
"This module provides access to matrices, eulers, quaternions and vectors.\n"
|
"This module provides access to matrices, eulers, quaternions and vectors.";
|
||||||
"\n"
|
|
||||||
".. literalinclude:: ../examples/mathutils.py\n";
|
|
||||||
|
|
||||||
//-----------------------------METHODS----------------------------
|
//-----------------------------METHODS----------------------------
|
||||||
//-----------------quat_rotation (internal)-----------
|
//-----------------quat_rotation (internal)-----------
|
||||||
|
@@ -564,9 +564,7 @@ static struct PyMethodDef Euler_methods[] = {
|
|||||||
|
|
||||||
//------------------PY_OBECT DEFINITION--------------------------
|
//------------------PY_OBECT DEFINITION--------------------------
|
||||||
static char euler_doc[] =
|
static char euler_doc[] =
|
||||||
"This object gives access to Eulers in Blender.\n"
|
"This object gives access to Eulers in Blender.";
|
||||||
"\n"
|
|
||||||
".. literalinclude:: ../examples/mathutils_euler.py\n";
|
|
||||||
|
|
||||||
PyTypeObject euler_Type = {
|
PyTypeObject euler_Type = {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
|
@@ -1335,9 +1335,7 @@ static struct PyMethodDef Matrix_methods[] = {
|
|||||||
|
|
||||||
/*------------------PY_OBECT DEFINITION--------------------------*/
|
/*------------------PY_OBECT DEFINITION--------------------------*/
|
||||||
static char matrix_doc[] =
|
static char matrix_doc[] =
|
||||||
"This object gives access to Matrices in Blender.\n"
|
"This object gives access to Matrices in Blender.";
|
||||||
"\n"
|
|
||||||
".. literalinclude:: ../examples/mathutils_matrix.py\n";
|
|
||||||
|
|
||||||
PyTypeObject matrix_Type = {
|
PyTypeObject matrix_Type = {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
|
@@ -844,9 +844,7 @@ static PyGetSetDef Quaternion_getseters[] = {
|
|||||||
|
|
||||||
//------------------PY_OBECT DEFINITION--------------------------
|
//------------------PY_OBECT DEFINITION--------------------------
|
||||||
static char quaternion_doc[] =
|
static char quaternion_doc[] =
|
||||||
"This object gives access to Quaternions in Blender.\n"
|
"This object gives access to Quaternions in Blender.";
|
||||||
"\n"
|
|
||||||
".. literalinclude:: ../examples/mathutils_quat.py\n";
|
|
||||||
|
|
||||||
PyTypeObject quaternion_Type = {
|
PyTypeObject quaternion_Type = {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
|
@@ -2129,9 +2129,7 @@ static struct PyMethodDef Vector_methods[] = {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static char vector_doc[] =
|
static char vector_doc[] =
|
||||||
"This object gives access to Vectors in Blender.\n"
|
"This object gives access to Vectors in Blender.";
|
||||||
"\n"
|
|
||||||
".. literalinclude:: ../examples/mathutils_vector.py\n";
|
|
||||||
|
|
||||||
PyTypeObject vector_Type = {
|
PyTypeObject vector_Type = {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
|
Reference in New Issue
Block a user