Render single docstring definition source.
(def_elem, name, names)
| 421 | # ----------------------------------------------------------------------------- |
| 422 | |
| 423 | def render_docstring(def_elem, name, names): |
| 424 | """ |
| 425 | Render single docstring definition source. |
| 426 | """ |
| 427 | unregistered_tags = set() |
| 428 | |
| 429 | # Handle brief and/or detailed description elements |
| 430 | value = "\n".join(filter(None, [ |
| 431 | ElementRenderer.render( |
| 432 | def_elem.find("briefdescription"), |
| 433 | unregistered_tags=unregistered_tags |
| 434 | ), |
| 435 | ElementRenderer.render( |
| 436 | def_elem.find("detaileddescription"), |
| 437 | unregistered_tags=unregistered_tags |
| 438 | ) |
| 439 | ])).lstrip("\n").rstrip() |
| 440 | |
| 441 | # Clean up excessive newlines |
| 442 | value = re.sub(r"\n{3,}", "\n\n", value) |
| 443 | |
| 444 | if unregistered_tags: |
| 445 | # Fail on unregistered tags with clear debug |
| 446 | raise RuntimeError( |
| 447 | "Unhandled Doxygen XML element(s) found: '{tags}'\n\n" |
| 448 | "XML:\n" |
| 449 | "{xml}\n\n" |
| 450 | "RST:\n" |
| 451 | "{rst}\n\n".format( |
| 452 | tags="', '".join(sorted(unregistered_tags)), |
| 453 | xml=ET.tostring(def_elem, encoding="utf-8", method="xml"), |
| 454 | rst=value |
| 455 | ) |
| 456 | ) |
| 457 | |
| 458 | # Increment duplicate names, accounting for overloaded functions |
| 459 | var_name = orig_var_name = sanitize_name(name) |
| 460 | i = 2 |
| 461 | while var_name in names: |
| 462 | var_name = "{var_name}_{i}".format(var_name=orig_var_name, i=i) |
| 463 | i += 1 |
| 464 | names.add(var_name) |
| 465 | |
| 466 | return "static const char *{name} ={sep}R\"doc({doc})doc\";".format( |
| 467 | name=var_name, |
| 468 | sep="\n" if "\n" in value else " ", |
| 469 | doc=value |
| 470 | ) |
| 471 | |
| 472 | |
| 473 | def extract_docstrings(args): |
no test coverage detected