Merge pull request #22013 from akien-mga/doc-unify-editor-rst

doc: Make property sections in rst similar to editor docs
This commit is contained in:
Rémi Verschelde 2018-09-13 11:05:02 +02:00 committed by GitHub
commit 89c34a39a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -309,6 +309,37 @@ def rstize_text(text, cclass):
return text return text
def format_table(f, pp):
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
sep = "+"
for i in range(longest_s + 2):
sep += "-"
sep += "+"
for i in range(longest_t + 2):
sep += "-"
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")
f.write(sep)
f.write('\n')
def make_type(t): def make_type(t):
global class_names global class_names
if t in class_names: if t in class_names:
@ -338,10 +369,9 @@ def make_enum(t):
def make_method( def make_method(
f, f,
name,
m,
declare,
cname, cname,
method_data,
declare,
event=False, event=False,
pp=None pp=None
): ):
@ -351,7 +381,7 @@ def make_method(
t = "" t = ""
ret_type = 'void' ret_type = 'void'
args = list(m) args = list(method_data)
mdata = {} mdata = {}
mdata['argidx'] = [] mdata['argidx'] = []
for a in args: for a in args:
@ -377,9 +407,9 @@ def make_method(
if declare or pp == None: if declare or pp == None:
s = '**' + m.attrib['name'] + '** ' s = '**' + method_data.attrib['name'] + '** '
else: else:
s = ':ref:`' + m.attrib['name'] + '<class_' + cname + "_" + m.attrib['name'] + '>` ' s = ':ref:`' + method_data.attrib['name'] + '<class_' + cname + "_" + method_data.attrib['name'] + '>` '
s += '**(**' s += '**(**'
argfound = False argfound = False
@ -406,8 +436,8 @@ def make_method(
s += ' **)**' s += ' **)**'
if 'qualifiers' in m.attrib: if 'qualifiers' in method_data.attrib:
s += ' ' + m.attrib['qualifiers'] s += ' ' + method_data.attrib['qualifiers']
if (not declare): if (not declare):
if (pp != None): if (pp != None):
@ -418,6 +448,37 @@ def make_method(
f.write(t + s + "\n") f.write(t + s + "\n")
def make_properties(
f,
cname,
prop_data,
description=False,
pp=None
):
t = ""
if 'enum' in prop_data.attrib:
t += make_enum(prop_data.attrib['enum'])
else:
t += make_type(prop_data.attrib['type'])
if description:
s = '**' + prop_data.attrib['name'] + '**'
setget = []
if 'setter' in prop_data.attrib and prop_data.attrib['setter'] != '' and not prop_data.attrib['setter'].startswith('_'):
setget.append(("*Setter*", prop_data.attrib['setter'] + '(value)'))
if 'getter' in prop_data.attrib and prop_data.attrib['getter'] != '' and not prop_data.attrib['getter'].startswith('_'):
setget.append(('*Getter*', prop_data.attrib['getter'] + '()'))
else:
s = ':ref:`' + prop_data.attrib['name'] + '<class_' + cname + "_" + prop_data.attrib['name'] + '>`'
if (pp != None):
pp.append((t, s))
elif description:
f.write('- ' + t + ' ' + s + '\n\n')
if len(setget) > 0:
format_table(f, setget)
def make_heading(title, underline): def make_heading(title, underline):
return title + '\n' + underline * len(title) + "\n\n" return title + '\n' + underline * len(title) + "\n\n"
@ -453,7 +514,7 @@ def make_rst_class(node):
inh = inode.attrib['inherits'].strip() inh = inode.attrib['inherits'].strip()
else: else:
inh = None inh = None
f.write("\n") f.write("\n\n")
# Descendents # Descendents
inherited = [] inherited = []
@ -468,7 +529,7 @@ def make_rst_class(node):
if (i > 0): if (i > 0):
f.write(", ") f.write(", ")
f.write(make_type(inherited[i])) f.write(make_type(inherited[i]))
f.write("\n") f.write("\n\n")
# Category # Category
if 'category' in node.attrib: if 'category' in node.attrib:
@ -481,7 +542,13 @@ def make_rst_class(node):
f.write(rstize_text(briefd.text.strip(), name) + "\n\n") f.write(rstize_text(briefd.text.strip(), name) + "\n\n")
# Properties overview # Properties overview
# TODO: Implement members = node.find('members')
if members != None and len(list(members)) > 0:
f.write(make_heading('Properties', '-'))
ml = []
for m in list(members):
make_properties(f, name, m, False, ml)
format_table(f, ml)
# Methods overview # Methods overview
methods = node.find('methods') methods = node.find('methods')
@ -489,38 +556,17 @@ def make_rst_class(node):
f.write(make_heading('Methods', '-')) f.write(make_heading('Methods', '-'))
ml = [] ml = []
for m in list(methods): for m in list(methods):
make_method(f, node.attrib['name'], m, False, name, False, ml) make_method(f, name, m, False, False, ml)
longest_t = 0 format_table(f, ml)
longest_s = 0
for s in ml:
sl = len(s[0])
if (sl > longest_s):
longest_s = sl
tl = len(s[1])
if (tl > longest_t):
longest_t = tl
sep = "+"
for i in range(longest_s + 2):
sep += "-"
sep += "+"
for i in range(longest_t + 2):
sep += "-"
sep += "+\n"
f.write(sep)
for s in ml:
rt = s[0]
while (len(rt) < longest_s):
rt += " "
st = s[1]
while (len(st) < longest_t):
st += " "
f.write("| " + rt + " | " + st + " |\n")
f.write(sep)
f.write('\n')
# Theme properties # Theme properties
# TODO: Implement theme_items = node.find('theme_items')
if theme_items != None and len(list(theme_items)) > 0:
f.write(make_heading('Theme Properties', '-'))
ml = []
for m in list(theme_items):
make_properties(f, name, m, False, ml)
format_table(f, ml)
# Signals # Signals
events = node.find('signals') events = node.find('signals')
@ -528,7 +574,7 @@ def make_rst_class(node):
f.write(make_heading('Signals', '-')) f.write(make_heading('Signals', '-'))
for m in list(events): for m in list(events):
f.write(" .. _class_" + name + "_" + m.attrib['name'] + ":\n\n") f.write(" .. _class_" + name + "_" + m.attrib['name'] + ":\n\n")
make_method(f, node.attrib['name'], m, True, name, True) make_method(f, name, m, True, True)
f.write('\n') f.write('\n')
d = m.find('description') d = m.find('description')
if d == None or d.text.strip() == '': if d == None or d.text.strip() == '':
@ -536,8 +582,6 @@ def make_rst_class(node):
f.write(rstize_text(d.text.strip(), name)) f.write(rstize_text(d.text.strip(), name))
f.write("\n\n") f.write("\n\n")
f.write('\n')
# Constants and enums # Constants and enums
constants = node.find('constants') constants = node.find('constants')
consts = [] consts = []
@ -556,7 +600,7 @@ def make_rst_class(node):
f.write(make_heading('Enumerations', '-')) f.write(make_heading('Enumerations', '-'))
for e in enum_names: for e in enum_names:
f.write(" .. _enum_" + name + "_" + e + ":\n\n") f.write(" .. _enum_" + name + "_" + e + ":\n\n")
f.write("enum **" + e + "**\n\n") f.write("enum **" + e + "**:\n\n")
for c in enums: for c in enums:
if c.attrib['enum'] != e: if c.attrib['enum'] != e:
continue continue
@ -568,7 +612,6 @@ def make_rst_class(node):
s += ' --- ' + rstize_text(c.text.strip(), name) s += ' --- ' + rstize_text(c.text.strip(), name)
f.write(s + '\n') f.write(s + '\n')
f.write('\n') f.write('\n')
f.write('\n')
# Constants # Constants
if len(consts) > 0: if len(consts) > 0:
@ -581,7 +624,6 @@ def make_rst_class(node):
if c.text.strip() != '': if c.text.strip() != '':
s += ' --- ' + rstize_text(c.text.strip(), name) s += ' --- ' + rstize_text(c.text.strip(), name)
f.write(s + '\n') f.write(s + '\n')
f.write('\n')
# Class description # Class description
descr = node.find('description') descr = node.find('description')
@ -614,27 +656,17 @@ def make_rst_class(node):
# External link, for example: # External link, for example:
# `http://enet.bespin.org/usergroup0.html` # `http://enet.bespin.org/usergroup0.html`
f.write("- `" + link + " <" + link + ">`_\n") f.write("- `" + link + " <" + link + ">`_\n")
f.write("\n")
# Property descriptions # Property descriptions
# TODO: Add setter and getter like in-editor help
members = node.find('members') members = node.find('members')
if members != None and len(list(members)) > 0: if members != None and len(list(members)) > 0:
f.write(make_heading('Property Descriptions', '-')) f.write(make_heading('Property Descriptions', '-'))
for m in list(members):
for c in list(members): f.write(" .. _class_" + name + "_" + m.attrib['name'] + ":\n\n")
# Leading two spaces necessary to prevent breaking the <ul> make_properties(f, name, m, True)
f.write(" .. _class_" + name + "_" + c.attrib['name'] + ":\n\n") if m.text.strip() != '':
s = '- ' f.write(rstize_text(m.text.strip(), name))
if 'enum' in c.attrib: f.write('\n\n')
s += make_enum(c.attrib['enum']) + ' '
else:
s += make_type(c.attrib['type']) + ' '
s += '**' + c.attrib['name'] + '**'
if c.text.strip() != '':
s += ' - ' + rstize_text(c.text.strip(), name)
f.write(s + '\n\n')
f.write('\n')
# Method descriptions # Method descriptions
methods = node.find('methods') methods = node.find('methods')
@ -642,16 +674,13 @@ def make_rst_class(node):
f.write(make_heading('Method Descriptions', '-')) f.write(make_heading('Method Descriptions', '-'))
for m in list(methods): for m in list(methods):
f.write(" .. _class_" + name + "_" + m.attrib['name'] + ":\n\n") f.write(" .. _class_" + name + "_" + m.attrib['name'] + ":\n\n")
make_method(f, node.attrib['name'], m, True, name) make_method(f, name, m, True)
f.write('\n') f.write('\n')
d = m.find('description') d = m.find('description')
if d == None or d.text.strip() == '': if d == None or d.text.strip() == '':
continue continue
f.write(rstize_text(d.text.strip(), name)) f.write(rstize_text(d.text.strip(), name))
f.write("\n\n") f.write("\n\n")
f.write('\n')
f.close()
file_list = [] file_list = []