1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-14 13:41:12 +00:00

Add default values to the editor help, docs, and generated RST

Also, make spacing of "=" in the editor help a bit more consistent.
Closes #16086
This commit is contained in:
Bojidar Marinov
2019-06-01 16:42:22 +03:00
parent 2df8b5606b
commit 0c4c36d823
21 changed files with 232 additions and 80 deletions

View File

@@ -37,12 +37,13 @@ class TypeName:
class PropertyDef:
def __init__(self, name, type_name, setter, getter, text): # type: (str, TypeName, Optional[str], Optional[str], Optional[str]) -> None
def __init__(self, name, type_name, setter, getter, text, default_value): # type: (str, TypeName, Optional[str], Optional[str], Optional[str], Optional[str]) -> None
self.name = name
self.type_name = type_name
self.setter = setter
self.getter = getter
self.text = text
self.default_value = default_value
class ParameterDef:
def __init__(self, name, type_name, default_value): # type: (str, TypeName, Optional[str]) -> None
@@ -81,9 +82,10 @@ class EnumDef:
class ThemeItemDef:
def __init__(self, name, type_name): # type: (str, TypeName) -> None
def __init__(self, name, type_name, default_value): # type: (str, TypeName, Optional[str]) -> None
self.name = name
self.type_name = type_name
self.default_value = default_value
class ClassDef:
@@ -144,8 +146,9 @@ class State:
type_name = TypeName.from_element(property)
setter = property.get("setter") or None # Use or None so '' gets turned into None.
getter = property.get("getter") or None
default_value = property.get("default") or None
property_def = PropertyDef(property_name, type_name, setter, getter, property.text)
property_def = PropertyDef(property_name, type_name, setter, getter, property.text, default_value)
class_def.properties[property_name] = property_def
methods = class_root.find("methods")
@@ -230,7 +233,8 @@ class State:
assert theme_item.tag == "theme_item"
theme_item_name = theme_item.attrib["name"]
theme_item_def = ThemeItemDef(theme_item_name, TypeName.from_element(theme_item))
default_value = theme_item.get("default") or None
theme_item_def = ThemeItemDef(theme_item_name, TypeName.from_element(theme_item), default_value)
if theme_item_name not in class_def.theme_items:
class_def.theme_items[theme_item_name] = []
class_def.theme_items[theme_item_name].append(theme_item_def)
@@ -400,8 +404,9 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
for property_def in class_def.properties.values():
type_rst = property_def.type_name.to_rst(state)
ref = ":ref:`{0}<class_{1}_property_{0}>`".format(property_def.name, class_name)
ml.append((type_rst, ref))
format_table(f, ml)
default = property_def.default_value
ml.append((type_rst, ref, default))
format_table(f, ml, True)
# Methods overview
if len(class_def.methods) > 0:
@@ -415,11 +420,11 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
# Theme properties
if class_def.theme_items is not None and len(class_def.theme_items) > 0:
f.write(make_heading('Theme Properties', '-'))
ml = []
pl = []
for theme_item_list in class_def.theme_items.values():
for theme_item in theme_item_list:
ml.append((theme_item.type_name.to_rst(state), theme_item.name))
format_table(f, ml)
pl.append((theme_item.type_name.to_rst(state), theme_item.name, theme_item.default_value))
format_table(f, pl, True)
# Signals
if len(class_def.signals) > 0:
@@ -488,14 +493,16 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
f.write(".. _class_{}_property_{}:\n\n".format(class_name, property_def.name))
f.write('- {} **{}**\n\n'.format(property_def.type_name.to_rst(state), property_def.name))
setget = []
info = []
if property_def.default_value is not None:
info.append(("*Default*", property_def.default_value))
if property_def.setter is not None and not property_def.setter.startswith("_"):
setget.append(("*Setter*", property_def.setter + '(value)'))
info.append(("*Setter*", property_def.setter + '(value)'))
if property_def.getter is not None and not property_def.getter.startswith("_"):
setget.append(('*Getter*', property_def.getter + '()'))
info.append(('*Getter*', property_def.getter + '()'))
if len(setget) > 0:
format_table(f, setget)
if len(info) > 0:
format_table(f, info)
if property_def.text is not None and property_def.text.strip() != '':
f.write(rstize_text(property_def.text.strip(), state))
@@ -873,33 +880,33 @@ def rstize_text(text, state): # type: (str, State) -> str
return text
def format_table(f, pp): # type: (TextIO, Iterable[Tuple[str, ...]]) -> None
longest_t = 0
longest_s = 0
for s in pp:
sl = len(s[0])
if sl > longest_s:
longest_s = sl
tl = len(s[1])
if tl > longest_t:
longest_t = tl
def format_table(f, data, remove_empty_columns=False): # type: (TextIO, Iterable[Tuple[str, ...]]) -> None
if len(data) == 0:
return
column_sizes = [0] * len(data[0])
for row in data:
for i, text in enumerate(row):
text_length = len(text or '')
if text_length > column_sizes[i]:
column_sizes[i] = text_length
sep = "+"
for i in range(longest_s + 2):
sep += "-"
sep += "+"
for i in range(longest_t + 2):
sep += "-"
sep = ""
for size in column_sizes:
if size == 0 and remove_empty_columns:
continue
sep += "+" + "-" * (size + 2)
sep += "+\n"
f.write(sep)
for s in pp:
rt = s[0]
while len(rt) < longest_s:
rt += " "
st = s[1]
while len(st) < longest_t:
st += " "
f.write("| " + rt + " | " + st + " |\n")
for row in data:
row_text = "|"
for i, text in enumerate(row):
if column_sizes[i] == 0 and remove_empty_columns:
continue
row_text += " " + (text or '').ljust(column_sizes[i]) + " |"
row_text += "\n"
f.write(row_text)
f.write(sep)
f.write('\n')