else:
func["method"] = section_name
+ capturing_seealso = False
skip_code_lines = False
expected_brief = True
fdecl = DeclarationParser()
self.add_new_fdecl(func, fdecl)
continue
- # skip lines if line-skipping mode is activated
- if skip_code_lines:
- if not l or l.startswith(" "):
+ # continue capture seealso
+ if capturing_seealso:
+ if l.startswith(" "):
+ seealso = func.get("seealso",[])
+ seealso.extend(l.split(","))
+ func["seealso"] = seealso
continue
else:
- skip_code_lines = False
-
- ll = l.strip()
- if ll == "..": #strange construction...
- continue
-
- # turn on line-skipping mode for code fragments
- if ll.endswith("::"):
- skip_code_lines = True
- ll = ll[:len(ll)-3]
-
- if ll.startswith(".. code-block::"):
- skip_code_lines = True
- continue
+ capturing_seealso = False
# continue param parsing
if pdecl.active:
self.add_new_pdecl(func, pdecl)
# do not continue - current line can contain next parameter definition
+ ll = l.strip()
+ if ll == "..":
+ expected_brief = False
+ skip_code_lines = False
+ continue
+
+ # skip lines if line-skipping mode is activated
+ if skip_code_lines:
+ if not l or l.startswith(" "):
+ continue
+ else:
+ skip_code_lines = False
+
+ if ll.startswith(".. "):
+ expected_brief = False
+ elif ll.endswith("::"):
+ # turn on line-skipping mode for code fragments
+ skip_code_lines = True
+ ll = ll[:len(ll)-2]
+
+ if ll.startswith(".. code-block::") or ll.startswith(".. math::") or ll.startswith(".. image::"):
+ skip_code_lines = True
+ continue
+
# todo: parse structure members; skip them for now
if ll.startswith(".. ocv:member::"):
skip_code_lines = True
continue
- # todo: parse ".. seealso::" sections
+ # parse ".. seealso::" blocks
+ if ll.startswith(".. seealso::"):
+ if ll.endswith(".. seealso::"):
+ capturing_seealso = True
+ else:
+ seealso = func.get("seealso",[])
+ seealso.extend(ll[ll.find("::")+2:].split(","))
+ func["seealso"] = seealso
+ continue
+
+ # skip ".. index::"
+ if ll.startswith(".. index::"):
+ continue
# parse class & struct definitions
if ll.startswith(".. ocv:class::"):
fdecl = DeclarationParser(ll)
if fdecl.isready():
self.add_new_fdecl(func, fdecl)
- expected_brief = False
continue
# parse parameters
if pdecl.hasDeclaration(l):
pdecl = ParamParser(l)
- expected_brief = False
continue
# record brief description
- if expected_brief and len(ll) == 0:
- if "brief" in func:
- expected_brief = False
- continue
-
if expected_brief:
func["brief"] = func.get("brief", "") + "\n" + ll
if skip_code_lines:
- expected_brief = False #force end brief if code block begins
+ expected_brief = False # force end brief if code block begins
continue
# record other lines as long description
print "declarations:"
for d in func["decls"]:
print " %7s: %s" % (d[0], re.sub(r"[ ]+", " ", d[1]))
+ if "seealso" in func:
+ print "seealso: ", func["seealso"]
if "params" in func:
print "parameters:"
for name, comment in func["params"].items():
if cmt:
params[name] = cmt
func["params"] = params
+ if "seealso" in func:
+ seealso = []
+ for see in func["seealso"]:
+ item = self.normalizeText(see.rstrip(".")).strip("\"")
+ if item:
+ seealso.append(item)
+ func["seealso"] = list(set(seealso))
# special case for old C functions - section name should omit "cv" prefix
if not func.get("isclass",False) and not func.get("isstruct",False):
s = re.sub(r"\n[ ]*([_,])\n", r"\1", s)
# remove extra line breaks after `
#s = re.sub(r"`\n", "` ", s)
+ # remove extra line breaks after ".. note::"
+ s = re.sub(r"\.\. note::\n+", ".. note:: ", s)
# remove extra line breaks before *
- s = re.sub(r"\n\n\*", "\n\*", s)
+ s = re.sub(r"\n\n\*", "\n*", s)
+ # remove extra line breaks after *
+ s = re.sub(r"\n\*\n+", "\n* ", s)
# remove extra line breaks before #.
s = re.sub(r"\n\n#\.", "\n#.", s)
# remove extra line breaks after #.
- s = re.sub(r"\n#\.\n", "\n#. ", s)
+ s = re.sub(r"\n#\.\n+", "\n#. ", s)
# remove extra line breaks before `
s = re.sub(r"\n[ ]*`", " `", s)
# remove trailing whitespaces
# unescape
s = re.sub(r"\\(.)", "\\1", s)
# compress whitespace
- s = re.sub(r"[ ]+", " ", s)
+ s = re.sub(r" +", " ", s)
+ # compress linebreaks
+ s = re.sub(r"\n\n+", "\n\n", s)
s = s.replace("**", "")
s = s.replace("``", "\"")
s = s.replace("`", "\"")
s = s.replace("\"\"", "\"")
s = s.replace(":ocv:cfunc:","")
+ s = s.replace(":ref:", "")
s = s.replace(":math:", "")
s = s.replace(":ocv:class:", "")
s = s.replace(":ocv:func:", "")
+ s = s.replace(":c:type:", "")
s = s.replace("]_", "]")
+ s = s.replace(".. note::", "Note:")
+ s = s.replace(".. ocv:function::", "")
+ s = s.replace(".. ocv:cfunction::", "")
+
s = s.strip()
return s