Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorAndrew Hale <TrumanBlending@gmail.com>2018-08-27 16:51:27 +0300
committerAndrew Hale <TrumanBlending@gmail.com>2018-08-27 17:15:54 +0300
commit1e6a5eb0879119808fde8f002eed5ac7909944ec (patch)
tree599f852c269a9194606aa0b8754dfa4c885fd969 /doc
parent09e1e2b8ce48f7692b0b3f4425a7bcd7d0bec476 (diff)
Implement BMesh Operator string enumerators and docs generation.
Partial implementation of T56496 for review. Reviewers: campbellbarton Reviewed By: campbellbarton Differential Revision: https://developer.blender.org/D3635
Diffstat (limited to 'doc')
-rw-r--r--doc/python_api/rst_from_bmesh_opdefines.py49
1 files changed, 45 insertions, 4 deletions
diff --git a/doc/python_api/rst_from_bmesh_opdefines.py b/doc/python_api/rst_from_bmesh_opdefines.py
index d3e4b2a0cfd..8357d063429 100644
--- a/doc/python_api/rst_from_bmesh_opdefines.py
+++ b/doc/python_api/rst_from_bmesh_opdefines.py
@@ -31,6 +31,7 @@
# - campbell
import os
+import re
CURRENT_DIR = os.path.abspath(os.path.dirname(__file__))
SOURCE_DIR = os.path.normpath(os.path.abspath(os.path.normpath(os.path.join(CURRENT_DIR, "..", ".."))))
@@ -75,7 +76,8 @@ def main():
for l in fsrc:
l = l[:-1]
# weak but ok
- if ("BMOpDefine" in l and l.split()[1] == "BMOpDefine") and "bmo_opdefines[]" not in l:
+ if ((("BMOpDefine" in l and l.split()[1] == "BMOpDefine") and "bmo_opdefines[]" not in l) or
+ ("static BMO_FlagSet " in l)):
is_block = True
block_ctx = []
blocks.append((comment_ctx, block_ctx))
@@ -92,9 +94,12 @@ def main():
if cpp_comment != -1:
l = l[:cpp_comment]
+ # remove sentinel from enums
+ l = l.replace("{0, NULL}", "")
+
block_ctx.append(l)
- if l.strip() == "};":
+ if l.strip().endswith("};"):
is_block = False
comment_ctx = None
@@ -136,6 +141,9 @@ def main():
"BMO_OP_SLOT_SUBTYPE_PTR_MESH",
"BMO_OP_SLOT_SUBTYPE_PTR_BMESH",
+ "BMO_OP_SLOT_SUBTYPE_INT_ENUM",
+ "BMO_OP_SLOT_SUBTYPE_INT_FLAG",
+
"BMO_OP_SLOT_SUBTYPE_ELEM_IS_SINGLE",
"BM_VERT",
@@ -160,6 +168,7 @@ def main():
for comment, b in blocks:
# magic, translate into python
b[0] = b[0].replace("static BMOpDefine ", "")
+ is_enum = False
for i, l in enumerate(b):
l = l.strip()
@@ -178,11 +187,35 @@ def main():
# exec func. eg: bmo_rotate_edges_exec,
if l.startswith("bmo_") and l.endswith("_exec,"):
l = "None,"
+
+ # enums
+ if l.startswith("static BMO_FlagSet "):
+ is_enum = True
+
b[i] = l
# for l in b:
# print(l)
+ if is_enum:
+ text = "".join(b)
+ text = text.replace("static BMO_FlagSet ", "")
+ text = text.replace("[]", "")
+ text = text.strip(";")
+ text = text.replace("(", "[").replace(")", "]")
+ text = text.replace("\"", "'")
+
+ k, v = text.split("=", 1)
+
+ v = repr(re.findall(r"'([^']*)'", v))
+
+ k = k.strip()
+ v = v.strip()
+
+ vars_dict[k] = v
+
+ continue
+
text = "\n".join(b)
global_namespace = {
"__file__": "generated",
@@ -225,6 +258,7 @@ def main():
# -- wash the comment
comment_washed = []
+ comment = [] if comment is None else comment
for i, l in enumerate(comment):
assert((l.strip() == "") or
(l in {"/*", " *"}) or
@@ -246,7 +280,9 @@ def main():
args_wash = []
for i in args_index:
arg = args[i]
- if len(arg) == 3:
+ if len(arg) == 4:
+ name, tp, tp_sub, enums = arg
+ elif len(arg) == 3:
name, tp, tp_sub = arg
elif len(arg) == 2:
name, tp = arg
@@ -282,7 +318,12 @@ def main():
if tp == BMO_OP_SLOT_FLT:
tp_str = "float"
elif tp == BMO_OP_SLOT_INT:
- tp_str = "int"
+ if tp_sub == BMO_OP_SLOT_SUBTYPE_INT_ENUM:
+ tp_str = "enum in " + enums + ", default " + enums.split(",", 1)[0].strip("[")
+ elif tp_sub == BMO_OP_SLOT_SUBTYPE_INT_FLAG:
+ tp_str = "set of flags from " + enums + ", default {}"
+ else:
+ tp_str = "int"
elif tp == BMO_OP_SLOT_BOOL:
tp_str = "bool"
elif tp == BMO_OP_SLOT_MAT: