summaryrefslogtreecommitdiff
path: root/doc/tools/makerst.py
diff options
context:
space:
mode:
Diffstat (limited to 'doc/tools/makerst.py')
-rw-r--r--doc/tools/makerst.py916
1 files changed, 457 insertions, 459 deletions
diff --git a/doc/tools/makerst.py b/doc/tools/makerst.py
index 718cf4a275..6b6780ce1e 100644
--- a/doc/tools/makerst.py
+++ b/doc/tools/makerst.py
@@ -8,512 +8,510 @@ import xml.etree.ElementTree as ET
input_list = []
for arg in sys.argv[1:]:
- input_list.append(arg)
+ input_list.append(arg)
if len(input_list) < 1:
- print 'usage: makerst.py <classes.xml>'
- sys.exit(0)
+ print 'usage: makerst.py <classes.xml>'
+ sys.exit(0)
def validate_tag(elem, tag):
- if elem.tag != tag:
- print "Tag mismatch, expected '" + tag + "', got " + elem.tag
- sys.exit(255)
+ if elem.tag != tag:
+ print "Tag mismatch, expected '" + tag + "', got " + elem.tag
+ sys.exit(255)
class_names = []
classes = {}
-def ul_string(str,ul):
- str+="\n"
- for i in range(len(str)-1):
- str+=ul
- str+="\n"
- return str
+
+def ul_string(str, ul):
+ str += "\n"
+ for i in range(len(str) - 1):
+ str += ul
+ str += "\n"
+ return str
+
def make_class_list(class_list, columns):
- f = codecs.open('class_list.rst', 'wb', 'utf-8')
- prev = 0
- col_max = len(class_list) / columns + 1
- print ('col max is ', col_max)
- col_count = 0
- row_count = 0
- last_initial = ''
- fit_columns = []
-
- for n in range(0, columns):
- fit_columns += [[]]
-
- indexers = []
- last_initial = ''
-
- idx = 0
- for n in class_list:
- col = idx / col_max
- if col >= columns:
- col = columns - 1
- fit_columns[col] += [n]
- idx += 1
- if n[:1] != last_initial:
- indexers += [n]
- last_initial = n[:1]
-
- row_max = 0
- f.write("\n")
-
- for n in range(0, columns):
- if len(fit_columns[n]) > row_max:
- row_max = len(fit_columns[n])
-
- f.write("| ")
- for n in range(0, columns):
- f.write(" | |")
-
- f.write("\n")
- f.write("+")
- for n in range(0, columns):
- f.write("--+-------+")
- f.write("\n")
-
- for r in range(0, row_max):
- s = '+ '
- for c in range(0, columns):
- if r >= len(fit_columns[c]):
- continue
-
- classname = fit_columns[c][r]
- initial = classname[0]
- if classname in indexers:
- s += '**' + initial + '** | '
- else:
- s += ' | '
-
- s += '[' + classname + '](class_'+ classname.lower()+') | '
-
- s += '\n'
- f.write(s)
-
- for n in range(0, columns):
- f.write("--+-------+")
- f.write("\n")
-
-
-def rstize_text(text,cclass):
-
- # Linebreak + tabs in the XML should become two line breaks unless in a "codeblock"
- pos = 0
- while True:
- pos = text.find('\n', pos)
- if pos == -1:
- break
-
- pre_text = text[:pos]
- while text[pos+1] == '\t':
- pos += 1
- post_text = text[pos+1:]
-
- # Handle codeblocks
- if post_text.startswith("[codeblock]"):
- end_pos = post_text.find("[/codeblock]")
- if end_pos == -1:
- sys.exit("ERROR! [codeblock] without a closing tag!")
-
- code_text = post_text[len("[codeblock]"):end_pos]
- post_text = post_text[end_pos:]
-
- # Remove extraneous tabs
- code_pos = 0
- while True:
- code_pos = code_text.find('\n', code_pos)
- if code_pos == -1:
- break
-
- to_skip = 0
- while code_pos+to_skip+1 < len(code_text) and code_text[code_pos+to_skip+1] == '\t':
- to_skip += 1
-
- if len(code_text[code_pos+to_skip+1:])==0:
- code_text = code_text[:code_pos] + "\n"
- code_pos += 1
- else:
- code_text = code_text[:code_pos] + "\n " + code_text[code_pos+to_skip+1:]
- code_pos += 5 - to_skip
-
- text = pre_text + "\n[codeblock]" + code_text + post_text
- pos += len("\n[codeblock]" + code_text)
-
- # Handle normal text
- else:
- text = pre_text + "\n\n" + post_text
- pos += 2
-
- # Escape * character to avoid interpreting it as emphasis
- pos = 0
- while True:
- pos = text.find('*', pos)
- if pos == -1:
- break
- text = text[:pos] + "\*" + text[pos + 1:]
- pos += 2
-
- # Escape _ character at the end of a word to avoid interpreting it as an inline hyperlink
- pos = 0
- while True:
- pos = text.find('_', pos)
- if pos == -1:
- break
- if not text[pos + 1].isalnum(): # don't escape within a snake_case word
- text = text[:pos] + "\_" + text[pos + 1:]
- pos += 2
- else:
- pos += 1
-
- # Handle [tags]
- pos = 0
- while True:
- pos = text.find('[', pos)
- if pos == -1:
- break
-
- endq_pos = text.find(']', pos + 1)
- if endq_pos == -1:
- break
-
- pre_text = text[:pos]
- post_text = text[endq_pos + 1:]
- tag_text = text[pos + 1:endq_pos]
-
- if tag_text in class_names:
- tag_text = make_type(tag_text)
- else: # command
- cmd = tag_text
- space_pos = tag_text.find(' ')
- if cmd.find('html') == 0:
- cmd = tag_text[:space_pos]
- param = tag_text[space_pos + 1:]
- tag_text = param
- elif cmd.find('method') == 0:
- cmd = tag_text[:space_pos]
- param = tag_text[space_pos + 1:]
-
- if param.find('.') != -1:
- (class_param, method_param) = param.split('.')
- tag_text = ':ref:`'+class_param+'.'+method_param+'<class_' + class_param + '_' + method_param + '>`'
- else:
- tag_text = ':ref:`' + param + '<class_' + cclass +"_"+ param + '>`'
- elif cmd.find('image=') == 0:
- tag_text = "" #'![](' + cmd[6:] + ')'
- elif cmd.find('url=') == 0:
- tag_text = ':ref:`' + cmd[4:] + '<'+cmd[4:]+">`"
- elif cmd == '/url':
- tag_text = ')'
- elif cmd == 'center':
- tag_text = ''
- elif cmd == '/center':
- tag_text = ''
- elif cmd == 'codeblock':
- tag_text = '\n::\n'
- elif cmd == '/codeblock':
- tag_text = ''
- # Strip newline if the tag was alone on one
- if pre_text[-1] == '\n':
- pre_text = pre_text[:-1]
- elif cmd == 'br':
- # Make a new paragraph instead of a linebreak, rst is not so linebreak friendly
- tag_text = '\n\n'
- # Strip potential leading spaces
- while post_text[0] == ' ':
- post_text = post_text[1:]
- elif cmd == 'i' or cmd == '/i':
- tag_text = '*'
- elif cmd == 'b' or cmd == '/b':
- tag_text = '**'
- elif cmd == 'u' or cmd == '/u':
- tag_text = ''
- elif cmd == 'code' or cmd == '/code':
- tag_text = '``'
- else:
- tag_text = ':ref:`' + tag_text + '<class_'+tag_text.lower()+'>`'
-
- text = pre_text + tag_text + post_text
- pos = len(pre_text) + len(tag_text)
+ f = codecs.open('class_list.rst', 'wb', 'utf-8')
+ prev = 0
+ col_max = len(class_list) / columns + 1
+ print ('col max is ', col_max)
+ col_count = 0
+ row_count = 0
+ last_initial = ''
+ fit_columns = []
+
+ for n in range(0, columns):
+ fit_columns += [[]]
+
+ indexers = []
+ last_initial = ''
+
+ idx = 0
+ for n in class_list:
+ col = idx / col_max
+ if col >= columns:
+ col = columns - 1
+ fit_columns[col] += [n]
+ idx += 1
+ if n[:1] != last_initial:
+ indexers += [n]
+ last_initial = n[:1]
+
+ row_max = 0
+ f.write("\n")
+
+ for n in range(0, columns):
+ if len(fit_columns[n]) > row_max:
+ row_max = len(fit_columns[n])
+
+ f.write("| ")
+ for n in range(0, columns):
+ f.write(" | |")
+
+ f.write("\n")
+ f.write("+")
+ for n in range(0, columns):
+ f.write("--+-------+")
+ f.write("\n")
+
+ for r in range(0, row_max):
+ s = '+ '
+ for c in range(0, columns):
+ if r >= len(fit_columns[c]):
+ continue
+
+ classname = fit_columns[c][r]
+ initial = classname[0]
+ if classname in indexers:
+ s += '**' + initial + '** | '
+ else:
+ s += ' | '
+
+ s += '[' + classname + '](class_' + classname.lower() + ') | '
+
+ s += '\n'
+ f.write(s)
+
+ for n in range(0, columns):
+ f.write("--+-------+")
+ f.write("\n")
+
+
+def rstize_text(text, cclass):
+
+ # Linebreak + tabs in the XML should become two line breaks unless in a "codeblock"
+ pos = 0
+ while True:
+ pos = text.find('\n', pos)
+ if pos == -1:
+ break
+
+ pre_text = text[:pos]
+ while text[pos + 1] == '\t':
+ pos += 1
+ post_text = text[pos + 1:]
+
+ # Handle codeblocks
+ if post_text.startswith("[codeblock]"):
+ end_pos = post_text.find("[/codeblock]")
+ if end_pos == -1:
+ sys.exit("ERROR! [codeblock] without a closing tag!")
+
+ code_text = post_text[len("[codeblock]"):end_pos]
+ post_text = post_text[end_pos:]
+
+ # Remove extraneous tabs
+ code_pos = 0
+ while True:
+ code_pos = code_text.find('\n', code_pos)
+ if code_pos == -1:
+ break
+
+ to_skip = 0
+ while code_pos + to_skip + 1 < len(code_text) and code_text[code_pos + to_skip + 1] == '\t':
+ to_skip += 1
+
+ if len(code_text[code_pos + to_skip + 1:]) == 0:
+ code_text = code_text[:code_pos] + "\n"
+ code_pos += 1
+ else:
+ code_text = code_text[:code_pos] + "\n " + code_text[code_pos + to_skip + 1:]
+ code_pos += 5 - to_skip
+
+ text = pre_text + "\n[codeblock]" + code_text + post_text
+ pos += len("\n[codeblock]" + code_text)
+
+ # Handle normal text
+ else:
+ text = pre_text + "\n\n" + post_text
+ pos += 2
+
+ # Escape * character to avoid interpreting it as emphasis
+ pos = 0
+ while True:
+ pos = text.find('*', pos)
+ if pos == -1:
+ break
+ text = text[:pos] + "\*" + text[pos + 1:]
+ pos += 2
+
+ # Escape _ character at the end of a word to avoid interpreting it as an inline hyperlink
+ pos = 0
+ while True:
+ pos = text.find('_', pos)
+ if pos == -1:
+ break
+ if not text[pos + 1].isalnum(): # don't escape within a snake_case word
+ text = text[:pos] + "\_" + text[pos + 1:]
+ pos += 2
+ else:
+ pos += 1
+
+ # Handle [tags]
+ pos = 0
+ while True:
+ pos = text.find('[', pos)
+ if pos == -1:
+ break
+
+ endq_pos = text.find(']', pos + 1)
+ if endq_pos == -1:
+ break
+
+ pre_text = text[:pos]
+ post_text = text[endq_pos + 1:]
+ tag_text = text[pos + 1:endq_pos]
+
+ if tag_text in class_names:
+ tag_text = make_type(tag_text)
+ else: # command
+ cmd = tag_text
+ space_pos = tag_text.find(' ')
+ if cmd.find('html') == 0:
+ cmd = tag_text[:space_pos]
+ param = tag_text[space_pos + 1:]
+ tag_text = param
+ elif cmd.find('method') == 0:
+ cmd = tag_text[:space_pos]
+ param = tag_text[space_pos + 1:]
+
+ if param.find('.') != -1:
+ (class_param, method_param) = param.split('.')
+ tag_text = ':ref:`' + class_param + '.' + method_param + '<class_' + class_param + '_' + method_param + '>`'
+ else:
+ tag_text = ':ref:`' + param + '<class_' + cclass + "_" + param + '>`'
+ elif cmd.find('image=') == 0:
+ tag_text = "" # '![](' + cmd[6:] + ')'
+ elif cmd.find('url=') == 0:
+ tag_text = ':ref:`' + cmd[4:] + '<' + cmd[4:] + ">`"
+ elif cmd == '/url':
+ tag_text = ')'
+ elif cmd == 'center':
+ tag_text = ''
+ elif cmd == '/center':
+ tag_text = ''
+ elif cmd == 'codeblock':
+ tag_text = '\n::\n'
+ elif cmd == '/codeblock':
+ tag_text = ''
+ # Strip newline if the tag was alone on one
+ if pre_text[-1] == '\n':
+ pre_text = pre_text[:-1]
+ elif cmd == 'br':
+ # Make a new paragraph instead of a linebreak, rst is not so linebreak friendly
+ tag_text = '\n\n'
+ # Strip potential leading spaces
+ while post_text[0] == ' ':
+ post_text = post_text[1:]
+ elif cmd == 'i' or cmd == '/i':
+ tag_text = '*'
+ elif cmd == 'b' or cmd == '/b':
+ tag_text = '**'
+ elif cmd == 'u' or cmd == '/u':
+ tag_text = ''
+ elif cmd == 'code' or cmd == '/code':
+ tag_text = '``'
+ else:
+ tag_text = ':ref:`' + tag_text + '<class_' + tag_text.lower() + '>`'
+
+ text = pre_text + tag_text + post_text
+ pos = len(pre_text) + len(tag_text)
# tnode = ET.SubElement(parent,"div")
# tnode.text=text
- return text
+ return text
def make_type(t):
- global class_names
- if t in class_names:
- return ':ref:`'+t+'<class_' + t.lower()+'>`'
- return t
+ global class_names
+ if t in class_names:
+ return ':ref:`' + t + '<class_' + t.lower() + '>`'
+ return t
def make_method(
- f,
- name,
- m,
- declare,
- cname,
- event=False,
- pp=None
- ):
-
- if (declare or pp==None):
- t = '- '
- else:
- t = ""
-
- ret_type = 'void'
- args = list(m)
- mdata = {}
- mdata['argidx'] = []
- for a in args:
- if a.tag == 'return':
- idx = -1
- elif a.tag == 'argument':
- idx = int(a.attrib['index'])
- else:
- continue
-
- mdata['argidx'].append(idx)
- mdata[idx] = a
-
- if not event:
- if -1 in mdata['argidx']:
- t += make_type(mdata[-1].attrib['type'])
- else:
- t += 'void'
- t += ' '
-
- if declare or pp==None:
-
- # span.attrib["class"]="funcdecl"
- # a=ET.SubElement(span,"a")
- # a.attrib["name"]=name+"_"+m.attrib["name"]
- # a.text=name+"::"+m.attrib["name"]
-
- s = ' **'+m.attrib['name']+'** '
- else:
- s = ':ref:`'+ m.attrib['name']+'<class_' + cname+"_"+m.attrib['name'] + '>` '
-
- s += ' **(**'
- argfound = False
- for a in mdata['argidx']:
- arg = mdata[a]
- if a < 0:
- continue
- if a > 0:
- s += ', '
- else:
- s += ' '
-
- s += make_type(arg.attrib['type'])
- if 'name' in arg.attrib:
- s += ' ' + arg.attrib['name']
- else:
- s += ' arg' + str(a)
-
- if 'default' in arg.attrib:
- s += '=' + arg.attrib['default']
-
- argfound = True
-
- if argfound:
- s += ' '
- s += ' **)**'
-
- if 'qualifiers' in m.attrib:
- s += ' ' + m.attrib['qualifiers']
+ f,
+ name,
+ m,
+ declare,
+ cname,
+ event=False,
+ pp=None
+):
+
+ if (declare or pp == None):
+ t = '- '
+ else:
+ t = ""
+
+ ret_type = 'void'
+ args = list(m)
+ mdata = {}
+ mdata['argidx'] = []
+ for a in args:
+ if a.tag == 'return':
+ idx = -1
+ elif a.tag == 'argument':
+ idx = int(a.attrib['index'])
+ else:
+ continue
+
+ mdata['argidx'].append(idx)
+ mdata[idx] = a
+
+ if not event:
+ if -1 in mdata['argidx']:
+ t += make_type(mdata[-1].attrib['type'])
+ else:
+ t += 'void'
+ t += ' '
+
+ if declare or pp == None:
+
+ # span.attrib["class"]="funcdecl"
+ # a=ET.SubElement(span,"a")
+ # a.attrib["name"]=name+"_"+m.attrib["name"]
+ # a.text=name+"::"+m.attrib["name"]
+
+ s = ' **' + m.attrib['name'] + '** '
+ else:
+ s = ':ref:`' + m.attrib['name'] + '<class_' + cname + "_" + m.attrib['name'] + '>` '
+
+ s += ' **(**'
+ argfound = False
+ for a in mdata['argidx']:
+ arg = mdata[a]
+ if a < 0:
+ continue
+ if a > 0:
+ s += ', '
+ else:
+ s += ' '
+
+ s += make_type(arg.attrib['type'])
+ if 'name' in arg.attrib:
+ s += ' ' + arg.attrib['name']
+ else:
+ s += ' arg' + str(a)
+
+ if 'default' in arg.attrib:
+ s += '=' + arg.attrib['default']
+
+ argfound = True
+
+ if argfound:
+ s += ' '
+ s += ' **)**'
+
+ if 'qualifiers' in m.attrib:
+ s += ' ' + m.attrib['qualifiers']
# f.write(s)
- if (not declare):
- if (pp!=None):
- pp.append( (t,s) )
- else:
- f.write("- "+t+" "+s+"\n")
- else:
- f.write(t+s+"\n")
+ if (not declare):
+ if (pp != None):
+ pp.append((t, s))
+ else:
+ f.write("- " + t + " " + s + "\n")
+ else:
+ f.write(t + s + "\n")
def make_heading(title, underline):
- return title + '\n' + underline*len(title) + "\n\n"
-
+ return title + '\n' + underline * len(title) + "\n\n"
def make_rst_class(node):
- name = node.attrib['name']
+ name = node.attrib['name']
- f = codecs.open("class_"+name.lower() + '.rst', 'wb', 'utf-8')
+ f = codecs.open("class_" + name.lower() + '.rst', 'wb', 'utf-8')
- # Warn contributors not to edit this file directly
- f.write(".. Generated automatically by doc/tools/makerst.py in Godot's source tree.\n")
- f.write(".. DO NOT EDIT THIS FILE, but the doc/base/classes.xml source instead.\n\n")
+ # Warn contributors not to edit this file directly
+ f.write(".. Generated automatically by doc/tools/makerst.py in Godot's source tree.\n")
+ f.write(".. DO NOT EDIT THIS FILE, but the doc/base/classes.xml source instead.\n\n")
- f.write(".. _class_"+name+":\n\n")
- f.write(make_heading(name, '='))
+ f.write(".. _class_" + name + ":\n\n")
+ f.write(make_heading(name, '='))
- if 'inherits' in node.attrib:
- inh = node.attrib['inherits'].strip()
+ if 'inherits' in node.attrib:
+ inh = node.attrib['inherits'].strip()
# whle inh in classes[cn]
- f.write('**Inherits:** ')
- first=True
- while(inh in classes):
- if (not first):
- f.write(" **<** ")
- else:
- first=False
-
- f.write(make_type(inh))
- inode = classes[inh]
- if ('inherits' in inode.attrib):
- inh=inode.attrib['inherits'].strip()
- else:
- inh=None
-
-
- f.write("\n\n")
-
- inherited=[]
- for cn in classes:
- c=classes[cn]
- if 'inherits' in c.attrib:
- if (c.attrib['inherits'].strip()==name):
- inherited.append(c.attrib['name'])
-
- if (len(inherited)):
- f.write('**Inherited By:** ')
- for i in range(len(inherited)):
- if (i>0):
- f.write(", ")
- f.write(make_type(inherited[i]))
- f.write("\n\n")
- if 'category' in node.attrib:
- f.write('**Category:** ' + node.attrib['category'].strip() + "\n\n")
-
- f.write(make_heading('Brief Description', '-'))
- briefd = node.find('brief_description')
- if briefd != None:
- f.write(rstize_text(briefd.text.strip(),name) + "\n\n")
-
- methods = node.find('methods')
-
- if methods != None and len(list(methods)) > 0:
- f.write(make_heading('Member Functions', '-'))
- ml=[]
- for m in list(methods):
- make_method(f, node.attrib['name'], m, False,name,False,ml)
- longest_t = 0
- 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')
-
-
- events = node.find('signals')
- if events != None and len(list(events)) > 0:
- f.write(make_heading('Signals', '-'))
- for m in list(events):
- make_method(f, node.attrib['name'], m, True,name, True)
- f.write('\n')
-
- members = node.find('members')
- if members != None and len(list(members)) > 0:
- f.write(make_heading('Member Variables', '-'))
-
- for c in list(members):
- s = '- '
- s += make_type(c.attrib['type']) + ' '
- s += '**' + c.attrib['name'] + '**'
- if c.text.strip() != '':
- s += ' - ' + c.text.strip()
- f.write(s + '\n')
- f.write('\n')
-
- constants = node.find('constants')
- if constants != None and len(list(constants)) > 0:
- f.write(make_heading('Numeric Constants', '-'))
- for c in list(constants):
- s = '- '
- s += '**' + c.attrib['name'] + '**'
- if 'value' in c.attrib:
- s += ' = **' + c.attrib['value'] + '**'
- if c.text.strip() != '':
- s += ' --- ' + rstize_text(c.text.strip(),name)
- f.write(s + '\n')
- f.write('\n')
-
- descr = node.find('description')
- if descr != None and descr.text.strip() != '':
- f.write(make_heading('Description', '-'))
- f.write(rstize_text(descr.text.strip(),name) + "\n\n")
-
- methods = node.find('methods')
- if methods != None and len(list(methods)) > 0:
- f.write(make_heading('Member Function Description', '-'))
- for m in list(methods):
- f.write(".. _class_"+name+"_"+m.attrib['name']+":\n\n")
+ f.write('**Inherits:** ')
+ first = True
+ while(inh in classes):
+ if (not first):
+ f.write(" **<** ")
+ else:
+ first = False
+
+ f.write(make_type(inh))
+ inode = classes[inh]
+ if ('inherits' in inode.attrib):
+ inh = inode.attrib['inherits'].strip()
+ else:
+ inh = None
+
+ f.write("\n\n")
+
+ inherited = []
+ for cn in classes:
+ c = classes[cn]
+ if 'inherits' in c.attrib:
+ if (c.attrib['inherits'].strip() == name):
+ inherited.append(c.attrib['name'])
+
+ if (len(inherited)):
+ f.write('**Inherited By:** ')
+ for i in range(len(inherited)):
+ if (i > 0):
+ f.write(", ")
+ f.write(make_type(inherited[i]))
+ f.write("\n\n")
+ if 'category' in node.attrib:
+ f.write('**Category:** ' + node.attrib['category'].strip() + "\n\n")
+
+ f.write(make_heading('Brief Description', '-'))
+ briefd = node.find('brief_description')
+ if briefd != None:
+ f.write(rstize_text(briefd.text.strip(), name) + "\n\n")
+
+ methods = node.find('methods')
+
+ if methods != None and len(list(methods)) > 0:
+ f.write(make_heading('Member Functions', '-'))
+ ml = []
+ for m in list(methods):
+ make_method(f, node.attrib['name'], m, False, name, False, ml)
+ longest_t = 0
+ 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')
+
+ events = node.find('signals')
+ if events != None and len(list(events)) > 0:
+ f.write(make_heading('Signals', '-'))
+ for m in list(events):
+ make_method(f, node.attrib['name'], m, True, name, True)
+ f.write('\n')
+
+ members = node.find('members')
+ if members != None and len(list(members)) > 0:
+ f.write(make_heading('Member Variables', '-'))
+
+ for c in list(members):
+ s = '- '
+ s += make_type(c.attrib['type']) + ' '
+ s += '**' + c.attrib['name'] + '**'
+ if c.text.strip() != '':
+ s += ' - ' + c.text.strip()
+ f.write(s + '\n')
+ f.write('\n')
+
+ constants = node.find('constants')
+ if constants != None and len(list(constants)) > 0:
+ f.write(make_heading('Numeric Constants', '-'))
+ for c in list(constants):
+ s = '- '
+ s += '**' + c.attrib['name'] + '**'
+ if 'value' in c.attrib:
+ s += ' = **' + c.attrib['value'] + '**'
+ if c.text.strip() != '':
+ s += ' --- ' + rstize_text(c.text.strip(), name)
+ f.write(s + '\n')
+ f.write('\n')
+
+ descr = node.find('description')
+ if descr != None and descr.text.strip() != '':
+ f.write(make_heading('Description', '-'))
+ f.write(rstize_text(descr.text.strip(), name) + "\n\n")
+
+ methods = node.find('methods')
+ if methods != None and len(list(methods)) > 0:
+ f.write(make_heading('Member Function Description', '-'))
+ for m in list(methods):
+ f.write(".. _class_" + name + "_" + m.attrib['name'] + ":\n\n")
# f.write(ul_string(m.attrib['name'],"^"))
- #f.write('\n<a name="'+m.attrib['name']+'">' + m.attrib['name'] + '</a>\n------\n')
- make_method(f, node.attrib['name'], m, True,name)
- f.write('\n')
- d = m.find('description')
- if d == None or d.text.strip() == '':
- continue
- f.write(rstize_text(d.text.strip(),name))
- f.write("\n\n")
- f.write('\n')
+ #f.write('\n<a name="'+m.attrib['name']+'">' + m.attrib['name'] + '</a>\n------\n')
+ make_method(f, node.attrib['name'], m, True, name)
+ f.write('\n')
+ d = m.find('description')
+ if d == None or d.text.strip() == '':
+ continue
+ f.write(rstize_text(d.text.strip(), name))
+ f.write("\n\n")
+ f.write('\n')
for file in input_list:
- tree = ET.parse(file)
- doc = tree.getroot()
+ tree = ET.parse(file)
+ doc = tree.getroot()
- if 'version' not in doc.attrib:
- print "Version missing from 'doc'"
- sys.exit(255)
+ if 'version' not in doc.attrib:
+ print "Version missing from 'doc'"
+ sys.exit(255)
- version = doc.attrib['version']
+ version = doc.attrib['version']
- for c in list(doc):
- if c.attrib['name'] in class_names:
- continue
- class_names.append(c.attrib['name'])
- classes[c.attrib['name']] = c
+ for c in list(doc):
+ if c.attrib['name'] in class_names:
+ continue
+ class_names.append(c.attrib['name'])
+ classes[c.attrib['name']] = c
class_names.sort()
-#Don't make class list for Sphinx, :toctree: handles it
+# Don't make class list for Sphinx, :toctree: handles it
#make_class_list(class_names, 2)
for cn in class_names:
- c = classes[cn]
- make_rst_class(c)
-
+ c = classes[cn]
+ make_rst_class(c)