doc: Make property sections in rst similar to editor docs
There is now an overview table with hyperlinks, and further down a detailed list of properties with their setter/getter and description. Theme items are now also included in the rst output. Refactored make_method() a bit.
This commit is contained in:
parent
f438d311ae
commit
4e0f415c83
1 changed files with 98 additions and 69 deletions
|
@ -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,46 +556,25 @@ 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')
|
||||||
if events != None and len(list(events)) > 0:
|
if events != None and len(list(events)) > 0:
|
||||||
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,44 +656,31 @@ 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')
|
||||||
if methods != None and len(list(methods)) > 0:
|
if methods != None and len(list(methods)) > 0:
|
||||||
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 = []
|
||||||
|
|
Loading…
Reference in a new issue