Merge branch 'vadz-doxygen'

This is the Doxygen work begun in Google Summer of Code projects 2008
and 2012 and subsequently improved by numerous contributors.

* vadz-doxygen: (314 commits)
  Add changes entry for Doxygen support
  Add some missing doctype tyemaps
  Doxygen warnings cleanup
  Move doxygen warning numbers
  Add Python doxygen example
  Doxygen example
  Add Doxygen to include paths
  Doxygen source rename
  More merge fixes from doxygen branches
  Correct python example headers
  Correct source code headers
  Another merge fix from doxygen branches
  Java enums output format fixes
  Add omitted doxygen_parsing_enums testcase
  PEP8 conformance for comment verifier module
  Clean up merge problem
  Doxygen html tweaks
  Update html chapter numbering for added Doxygen chapter
  Fixes to makechap.py to detect ill-formed headers
  html fixes for Doxygen
  Add missing CPlusPlus17.html file
  Format files to unix format
  Doxygen testcase tweak to match that in the html docs
  Doxygen html documentation updates and corrections
  Remove doxygen Examples subdirectory
  Beautify doxygen source code
  Code formatting fixes in doxygen code
  Remove unused doxygen code
  new_node refactor
  Various merge fixes in doxygen branches
  Unused variable warning fix
  Fix wrongly resetting indent after formulae in Doxygen comments
  Add support for doxygen:alias feature
  Get rid of meaningless return type of DoxygenParser methods
  Return enum, not untyped int, when classifying Doxygen commands
  Get rid of unnecessary "typedef enum" in C++ code
  Use slash, not backslash, in "C/C++" in the documentation
  Replace literal "<" with "&lt;" in HTML documentation
  Fix broken link to java.sun.com in Doxygen documentation
  Fix using com.sun.tools.javadoc package under macOS
  Fix error reporting for special characters in Doxygen parsing code
  Switch Python Doxygen unit tests to use inspect.getdoc()
  Use correct separator in Java class path under Windows.
  Remove executable permission from appveyor.yml.
  Use JAVA_HOME value in configure to detect Java.
  Display JAVA_HOME value in "make java_version".
  Fix harmless MSVC warning in DoxygenTranslator code.
  Reset "_last" for all but first enum elements.
  Don't duplicate Javadoc from global enum Doxygen comments twice.
  Move Doxygen comments concatenation from the parser to the lexer.
  Fix shift/reduce conflicts in Doxygen pre/post comment parsing.
  Rewrote part of the grammar dealing with Doxygen comments for enums.
  No changes, just remove spurious white space only differences.
  Move Doxygen comment mangling from the parser to the lexer.
  Merge "-builtin" autodoc bugs workarounds from master into test.
  Quote JAVA_HOME variable value in Java test suite makefile.
  Remove unused C_COMMENT_STRING terminal from the grammar.
  Fix missing returns in the Doxygen test suite code.
  Fix trimming whitespace from Doxygen comments.
  Remove code not doing anything from PyDocConverter.
  Remove unused <sstream> header.
  Remove unreferenced struct declaration.
  Remove unused Swig_warn() function.
  Remove any whitespace before ignored Doxygen commands.
  Remove trailing space from one of Doxygen tests.
  Fix autodoc strings generated in Python builtin case and the test.
  Fix Doxygen unit test in Python "-builtin" case.
  Use class docstrings in "-builtin" Python case.
  Don't indent Doxygen doc strings in generated Python code.
  Add a possibility to flexibly ignore custom Doxygen tags.
  Stop completely ignoring many Doxygen comments.
  Fix structural Doxygen comment recognition in the parser.
  No changes, just make checking for Doxygen structural tags more sane.
  Use "//", not "#", for comments in SWIG input.
  Allow upper case letters and digits in Doxygen words.
  Pass the node the Doxygen comment is attached to to DoxygenParser.
  Get rid of findCommand() which duplicaed commandBelongs().
  Recognize unknown Doxygen tags correctly.
  No real changes, just pass original command to commandBelongs().
  Describe Doxygen-specific %features in a single place.
  Give warnings for unknown Doxygen commands in Doxygen parser.
  Document the return type when translating Doxygen @return to Python.
  Fix translated Doxygen comments for overloaded functions in Python.
  Also merge Doxygen comments for overloaded constructors in Python.
  Allow using enum elements as default values for Python functions.
  Don't always use "*args" for all Python wrapper functions.
  No real changes, just make PYTHON::check_kwargs() const.
  Refactor: move makeParameterName() to common Language base class.
  Remove long line wrapping from Python parameter list generation code.
  Simplify and make more efficient building Python docstrings.
  Translate Doxygen code blocks to Sphinx code blocks.
  Add a simple test of multiple parameters to Doxygen test suite.
  Make Python parameters types hyperlinks in the doc strings.
  Make Language::classLookup() and enumLookup() static.
  Fix arguments of @param, @return etc translations to Python.
  Remove unused method from PyDocConverter.
  No real changes, just remove an unnecessary variable.
  Preserve relative indentation when parsing Doxygen comments.
  Use Sphinx-friendly formatting for overloaded functions documentation.
  Add poor man trailing white space detection to Doxygen Python tests.
  ...
This commit is contained in:
William S Fulton 2018-06-07 08:13:10 +01:00
commit 33921666a1
123 changed files with 12964 additions and 1344 deletions

View file

@ -7,7 +7,7 @@
</head>
<body bgcolor="#ffffff">
<H1><a name="Python">37 SWIG and Python</a></H1>
<H1><a name="Python">38 SWIG and Python</a></H1>
<!-- INDEX -->
<div class="sectiontoc">
<ul>
@ -162,7 +162,7 @@ very least, make sure you read the "<a href="SWIG.html#SWIG">SWIG
Basics</a>" chapter.
</p>
<H2><a name="Python_nn2">37.1 Overview</a></H2>
<H2><a name="Python_nn2">38.1 Overview</a></H2>
<p>
@ -189,10 +189,10 @@ described followed by a discussion of low-level implementation
details.
</p>
<H2><a name="Python_nn3">37.2 Preliminaries</a></H2>
<H2><a name="Python_nn3">38.2 Preliminaries</a></H2>
<H3><a name="Python_nn4">37.2.1 Running SWIG</a></H3>
<H3><a name="Python_nn4">38.2.1 Running SWIG</a></H3>
<p>
@ -289,7 +289,7 @@ The following sections have further practical examples and details on
how you might go about compiling and using the generated files.
</p>
<H3><a name="Python_nn6">37.2.2 Using distutils</a></H3>
<H3><a name="Python_nn6">38.2.2 Using distutils</a></H3>
<p>
@ -381,7 +381,7 @@ This same approach works on all platforms if the appropriate compiler is install
can even build extensions to the standard Windows Python using MingGW)
</p>
<H3><a name="Python_nn7">37.2.3 Hand compiling a dynamic module</a></H3>
<H3><a name="Python_nn7">38.2.3 Hand compiling a dynamic module</a></H3>
<p>
@ -429,7 +429,7 @@ module actually consists of two files; <tt>socket.py</tt> and
</p>
<H3><a name="Python_nn8">37.2.4 Static linking</a></H3>
<H3><a name="Python_nn8">38.2.4 Static linking</a></H3>
<p>
@ -508,7 +508,7 @@ If using static linking, you might want to rely on a different approach
(perhaps using distutils).
</p>
<H3><a name="Python_nn9">37.2.5 Using your module</a></H3>
<H3><a name="Python_nn9">38.2.5 Using your module</a></H3>
<p>
@ -665,7 +665,7 @@ system configuration (this requires root access and you will need to
read the man pages).
</p>
<H3><a name="Python_nn10">37.2.6 Compilation of C++ extensions</a></H3>
<H3><a name="Python_nn10">38.2.6 Compilation of C++ extensions</a></H3>
<p>
@ -757,7 +757,7 @@ erratic program behavior. If working with lots of software components, you
might want to investigate using a more formal standard such as COM.
</p>
<H3><a name="Python_nn11">37.2.7 Compiling for 64-bit platforms</a></H3>
<H3><a name="Python_nn11">38.2.7 Compiling for 64-bit platforms</a></H3>
<p>
@ -794,7 +794,7 @@ and -m64 allow you to choose the desired binary format for your python
extension.
</p>
<H3><a name="Python_nn12">37.2.8 Building Python Extensions under Windows</a></H3>
<H3><a name="Python_nn12">38.2.8 Building Python Extensions under Windows</a></H3>
<p>
@ -923,7 +923,7 @@ SWIG Wiki</a>.
</p>
<H2><a name="Python_nn13">37.3 A tour of basic C/C++ wrapping</a></H2>
<H2><a name="Python_nn13">38.3 A tour of basic C/C++ wrapping</a></H2>
<p>
@ -932,7 +932,7 @@ to your C/C++ code. Functions are wrapped as functions, classes are wrapped as
This section briefly covers the essential aspects of this wrapping.
</p>
<H3><a name="Python_nn14">37.3.1 Modules</a></H3>
<H3><a name="Python_nn14">38.3.1 Modules</a></H3>
<p>
@ -945,7 +945,7 @@ module name, make sure you don't use the same name as a built-in
Python command or standard module name.
</p>
<H3><a name="Python_nn15">37.3.2 Functions</a></H3>
<H3><a name="Python_nn15">38.3.2 Functions</a></H3>
<p>
@ -969,7 +969,7 @@ like you think it does:
&gt;&gt;&gt;
</pre></div>
<H3><a name="Python_nn16">37.3.3 Global variables</a></H3>
<H3><a name="Python_nn16">38.3.3 Global variables</a></H3>
<p>
@ -1107,7 +1107,7 @@ that starts with a leading underscore. SWIG does not create <tt>cvar</tt>
if there are no global variables in a module.
</p>
<H3><a name="Python_nn17">37.3.4 Constants and enums</a></H3>
<H3><a name="Python_nn17">38.3.4 Constants and enums</a></H3>
<p>
@ -1147,7 +1147,7 @@ other object. Unfortunately, there is no easy way for SWIG to
generate code that prevents this. You will just have to be careful.
</p>
<H3><a name="Python_nn18">37.3.5 Pointers</a></H3>
<H3><a name="Python_nn18">38.3.5 Pointers</a></H3>
<p>
@ -1288,7 +1288,7 @@ C-style cast may return a bogus result whereas as the C++-style cast will return
<tt>None</tt> if the conversion can't be performed.
</p>
<H3><a name="Python_nn19">37.3.6 Structures</a></H3>
<H3><a name="Python_nn19">38.3.6 Structures</a></H3>
<p>
@ -1477,7 +1477,7 @@ everything works just like you would expect. For example:
</pre>
</div>
<H3><a name="Python_nn20">37.3.7 C++ classes</a></H3>
<H3><a name="Python_nn20">38.3.7 C++ classes</a></H3>
<p>
@ -1565,7 +1565,7 @@ they are accessed through <tt>cvar</tt> like this:
</pre>
</div>
<H3><a name="Python_nn21">37.3.8 C++ inheritance</a></H3>
<H3><a name="Python_nn21">38.3.8 C++ inheritance</a></H3>
<p>
@ -1620,7 +1620,7 @@ then the function <tt>spam()</tt> accepts <tt>Foo *</tt> or a pointer to any cla
It is safe to use multiple inheritance with SWIG.
</p>
<H3><a name="Python_nn22">37.3.9 Pointers, references, values, and arrays</a></H3>
<H3><a name="Python_nn22">38.3.9 Pointers, references, values, and arrays</a></H3>
<p>
@ -1681,7 +1681,7 @@ treated as a returning value, and it will follow the same
allocation/deallocation process.
</p>
<H3><a name="Python_nn23">37.3.10 C++ overloaded functions</a></H3>
<H3><a name="Python_nn23">38.3.10 C++ overloaded functions</a></H3>
<p>
@ -1804,7 +1804,7 @@ first declaration takes precedence.
Please refer to the "SWIG and C++" chapter for more information about overloading.
</p>
<H3><a name="Python_nn24">37.3.11 C++ operators</a></H3>
<H3><a name="Python_nn24">38.3.11 C++ operators</a></H3>
<p>
@ -1901,7 +1901,7 @@ instead of raising an exception when the comparison fails, that is, on any kind
This follows the guidelines in <a href="https://www.python.org/dev/peps/pep-0207/">PEP 207 - Rich Comparisons</a> and <a href="https://docs.python.org/3/library/constants.html#NotImplemented">NotImplemented Python constant</a>.
</p>
<H3><a name="Python_nn25">37.3.12 C++ namespaces</a></H3>
<H3><a name="Python_nn25">38.3.12 C++ namespaces</a></H3>
<p>
@ -1968,7 +1968,7 @@ utilizes thousands of small deeply nested namespaces each with
identical symbol names, well, then you get what you deserve.
</p>
<H3><a name="Python_nn26">37.3.13 C++ templates</a></H3>
<H3><a name="Python_nn26">38.3.13 C++ templates</a></H3>
<p>
@ -2022,10 +2022,10 @@ Some more complicated
examples will appear later.
</p>
<H3><a name="Python_nn27">37.3.14 C++ Smart Pointers</a></H3>
<H3><a name="Python_nn27">38.3.14 C++ Smart Pointers</a></H3>
<H4><a name="Python_smart_pointers_shared_ptr">37.3.14.1 The shared_ptr Smart Pointer</a></H4>
<H4><a name="Python_smart_pointers_shared_ptr">38.3.14.1 The shared_ptr Smart Pointer</a></H4>
<p>
@ -2036,7 +2036,7 @@ in the <a href="Library.html#Library_std_shared_ptr">shared_ptr smart pointer</a
</p>
<H4><a name="Python_smart_pointers_generic">37.3.14.2 Generic Smart Pointers</a></H4>
<H4><a name="Python_smart_pointers_generic">38.3.14.2 Generic Smart Pointers</a></H4>
<p>
@ -2120,7 +2120,7 @@ simply use the <tt>__deref__()</tt> method. For example:
</pre>
</div>
<H3><a name="Python_nn27a">37.3.15 C++ reference counted objects</a></H3>
<H3><a name="Python_nn27a">38.3.15 C++ reference counted objects</a></H3>
<p>
@ -2129,7 +2129,7 @@ Python examples of memory management using referencing counting.
</p>
<H2><a name="Python_nn28">37.4 Further details on the Python class interface</a></H2>
<H2><a name="Python_nn28">38.4 Further details on the Python class interface</a></H2>
<p>
@ -2152,7 +2152,7 @@ the <tt>-builtin</tt> option are in the <a href="#Python_builtin_types">Built-in
section.
</p>
<H3><a name="Python_nn29">37.4.1 Proxy classes</a></H3>
<H3><a name="Python_nn29">38.4.1 Proxy classes</a></H3>
<p>
@ -2241,7 +2241,7 @@ you can attach new Python methods to the class and you can even inherit from it
by Python built-in types until Python 2.2).
</p>
<H3><a name="Python_builtin_types">37.4.2 Built-in Types</a></H3>
<H3><a name="Python_builtin_types">38.4.2 Built-in Types</a></H3>
<p>
@ -2285,7 +2285,7 @@ please refer to the python documentation:</p>
<p><a href="http://docs.python.org/extending/newtypes.html">http://docs.python.org/extending/newtypes.html</a></p>
<H4><a name="Python_builtin_limitations">37.4.2.1 Limitations</a></H4>
<H4><a name="Python_builtin_limitations">38.4.2.1 Limitations</a></H4>
<p>Use of the <tt>-builtin</tt> option implies a couple of limitations:
@ -2453,7 +2453,7 @@ assert(issubclass(B.Derived, A.Base))
</li>
</ul>
<H4><a name="Python_builtin_overloads">37.4.2.2 Operator overloads and slots -- use them!</a></H4>
<H4><a name="Python_builtin_overloads">38.4.2.2 Operator overloads and slots -- use them!</a></H4>
<p>The entire justification for the <tt>-builtin</tt> option is improved
@ -2613,7 +2613,7 @@ in the file <tt>python/pyopers.swig</tt> in the SWIG library.
</p>
<H3><a name="Python_nn30">37.4.3 Memory management</a></H3>
<H3><a name="Python_nn30">38.4.3 Memory management</a></H3>
<p>NOTE: Although this section refers to proxy objects, everything here also applies
@ -2808,7 +2808,7 @@ It is also possible to deal with situations like this using
typemaps--an advanced topic discussed later.
</p>
<H3><a name="Python_nn31">37.4.4 Python 2.2 and classic classes</a></H3>
<H3><a name="Python_nn31">38.4.4 Python 2.2 and classic classes</a></H3>
<p>
@ -2845,7 +2845,7 @@ class itself. In Python-2.1 and earlier, they have to be accessed as a global
function or through an instance (see the earlier section).
</p>
<H2><a name="Python_directors">37.5 Cross language polymorphism</a></H2>
<H2><a name="Python_directors">38.5 Cross language polymorphism</a></H2>
<p>
@ -2879,7 +2879,7 @@ proxy classes, director classes, and C wrapper functions takes care of
all the cross-language method routing transparently.
</p>
<H3><a name="Python_nn33">37.5.1 Enabling directors</a></H3>
<H3><a name="Python_nn33">38.5.1 Enabling directors</a></H3>
<p>
@ -2971,7 +2971,7 @@ class MyFoo(mymodule.Foo):
</div>
<H3><a name="Python_nn34">37.5.2 Director classes</a></H3>
<H3><a name="Python_nn34">38.5.2 Director classes</a></H3>
<p>
@ -3050,7 +3050,7 @@ so there is no need for the extra overhead involved with routing the
calls through Python.
</p>
<H3><a name="Python_nn35">37.5.3 Ownership and object destruction</a></H3>
<H3><a name="Python_nn35">38.5.3 Ownership and object destruction</a></H3>
<p>
@ -3117,7 +3117,7 @@ deleting all the Foo pointers it contains at some point. Note that no hard
references to the Foo objects remain in Python.
</p>
<H3><a name="Python_nn36">37.5.4 Exception unrolling</a></H3>
<H3><a name="Python_nn36">38.5.4 Exception unrolling</a></H3>
<p>
@ -3176,7 +3176,7 @@ Swig::DirectorMethodException is thrown, Python will register the
exception as soon as the C wrapper function returns.
</p>
<H3><a name="Python_nn37">37.5.5 Overhead and code bloat</a></H3>
<H3><a name="Python_nn37">38.5.5 Overhead and code bloat</a></H3>
<p>
@ -3210,7 +3210,7 @@ directive) for only those methods that are likely to be extended in
Python.
</p>
<H3><a name="Python_nn38">37.5.6 Typemaps</a></H3>
<H3><a name="Python_nn38">38.5.6 Typemaps</a></H3>
<p>
@ -3224,7 +3224,7 @@ need to be supported.
</p>
<H3><a name="Python_nn39">37.5.7 Miscellaneous</a></H3>
<H3><a name="Python_nn39">38.5.7 Miscellaneous</a></H3>
<p>
@ -3271,7 +3271,7 @@ methods that return const references.
</p>
<H2><a name="Python_nn40">37.6 Common customization features</a></H2>
<H2><a name="Python_nn40">38.6 Common customization features</a></H2>
<p>
@ -3284,7 +3284,7 @@ This section describes some common SWIG features that are used to
improve your the interface to an extension module.
</p>
<H3><a name="Python_nn41">37.6.1 C/C++ helper functions</a></H3>
<H3><a name="Python_nn41">38.6.1 C/C++ helper functions</a></H3>
<p>
@ -3365,7 +3365,7 @@ hard to implement. It is possible to clean this up using Python code, typemaps,
customization features as covered in later sections.
</p>
<H3><a name="Python_nn42">37.6.2 Adding additional Python code</a></H3>
<H3><a name="Python_nn42">38.6.2 Adding additional Python code</a></H3>
<p>
@ -3617,7 +3617,7 @@ The same applies for overloaded constructors.
</p>
<H3><a name="Python_nn43">37.6.3 Class extension with %extend</a></H3>
<H3><a name="Python_nn43">38.6.3 Class extension with %extend</a></H3>
<p>
@ -3706,7 +3706,7 @@ Vector(12, 14, 16)
in any way---the extensions only show up in the Python interface.
</p>
<H3><a name="Python_nn44">37.6.4 Exception handling with %exception</a></H3>
<H3><a name="Python_nn44">38.6.4 Exception handling with %exception</a></H3>
<p>
@ -3840,7 +3840,7 @@ The language-independent <tt>exception.i</tt> library file can also be used
to raise exceptions. See the <a href="Library.html#Library">SWIG Library</a> chapter.
</p>
<H2><a name="Python_nn45">37.7 Tips and techniques</a></H2>
<H2><a name="Python_nn45">38.7 Tips and techniques</a></H2>
<p>
@ -3850,7 +3850,7 @@ strings, binary data, and arrays. This chapter discusses the common techniques
solving these problems.
</p>
<H3><a name="Python_nn46">37.7.1 Input and output parameters</a></H3>
<H3><a name="Python_nn46">38.7.1 Input and output parameters</a></H3>
<p>
@ -4063,7 +4063,7 @@ void foo(Bar *OUTPUT);
may not have the intended effect since <tt>typemaps.i</tt> does not define an OUTPUT rule for <tt>Bar</tt>.
</p>
<H3><a name="Python_nn47">37.7.2 Simple pointers</a></H3>
<H3><a name="Python_nn47">38.7.2 Simple pointers</a></H3>
<p>
@ -4132,7 +4132,7 @@ If you replace <tt>%pointer_functions()</tt> by <tt>%pointer_class(type, name)</
See the <a href="Library.html#Library">SWIG Library</a> chapter for further details.
</p>
<H3><a name="Python_nn48">37.7.3 Unbounded C Arrays</a></H3>
<H3><a name="Python_nn48">38.7.3 Unbounded C Arrays</a></H3>
<p>
@ -4194,7 +4194,7 @@ well suited for applications in which you need to create buffers,
package binary data, etc.
</p>
<H3><a name="Python_nn49">37.7.4 String handling</a></H3>
<H3><a name="Python_nn49">38.7.4 String handling</a></H3>
<p>
@ -4264,7 +4264,7 @@ also be used to extra binary data from arbitrary pointers.
</p>
<H3><a name="Python_default_args">37.7.5 Default arguments</a></H3>
<H3><a name="Python_default_args">38.7.5 Default arguments</a></H3>
<p>
@ -4363,7 +4363,7 @@ Versions of SWIG prior to this varied in their ability to convert C++ default va
equivalent Python default argument values.
</p>
<H2><a name="Python_nn53">37.8 Typemaps</a></H2>
<H2><a name="Python_nn53">38.8 Typemaps</a></H2>
<p>
@ -4380,7 +4380,7 @@ Typemaps are only used if you want to change some aspect of the primitive
C-Python interface or if you want to elevate your guru status.
</p>
<H3><a name="Python_nn54">37.8.1 What is a typemap?</a></H3>
<H3><a name="Python_nn54">38.8.1 What is a typemap?</a></H3>
<p>
@ -4496,7 +4496,7 @@ parameter is omitted):
</pre>
</div>
<H3><a name="Python_nn55">37.8.2 Python typemaps</a></H3>
<H3><a name="Python_nn55">38.8.2 Python typemaps</a></H3>
<p>
@ -4537,7 +4537,7 @@ a look at the SWIG library version 1.3.20 or so.
</p>
<H3><a name="Python_nn56">37.8.3 Typemap variables</a></H3>
<H3><a name="Python_nn56">38.8.3 Typemap variables</a></H3>
<p>
@ -4608,7 +4608,7 @@ properly assigned.
The Python name of the wrapper function being created.
</div>
<H3><a name="Python_nn57">37.8.4 Useful Python Functions</a></H3>
<H3><a name="Python_nn57">38.8.4 Useful Python Functions</a></H3>
<p>
@ -4736,7 +4736,7 @@ write me
</pre>
</div>
<H2><a name="Python_nn58">37.9 Typemap Examples</a></H2>
<H2><a name="Python_nn58">38.9 Typemap Examples</a></H2>
<p>
@ -4745,7 +4745,7 @@ might look at the files "<tt>python.swg</tt>" and "<tt>typemaps.i</tt>" in
the SWIG library.
</p>
<H3><a name="Python_nn59">37.9.1 Converting Python list to a char ** </a></H3>
<H3><a name="Python_nn59">38.9.1 Converting Python list to a char ** </a></H3>
<p>
@ -4825,7 +4825,7 @@ memory allocation is used to allocate memory for the array, the
the C function.
</p>
<H3><a name="Python_nn60">37.9.2 Expanding a Python object into multiple arguments</a></H3>
<H3><a name="Python_nn60">38.9.2 Expanding a Python object into multiple arguments</a></H3>
<p>
@ -4944,7 +4944,7 @@ NotImplementedError: Wrong number or type of arguments for overloaded function '
</pre>
</div>
<H3><a name="Python_nn61">37.9.3 Using typemaps to return arguments</a></H3>
<H3><a name="Python_nn61">38.9.3 Using typemaps to return arguments</a></H3>
<p>
@ -5032,7 +5032,7 @@ function can now be used as follows:
&gt;&gt;&gt;
</pre></div>
<H3><a name="Python_nn62">37.9.4 Mapping Python tuples into small arrays</a></H3>
<H3><a name="Python_nn62">38.9.4 Mapping Python tuples into small arrays</a></H3>
<p>
@ -5081,7 +5081,7 @@ array, such an approach would not be recommended for huge arrays, but
for small structures, this approach works fine.
</p>
<H3><a name="Python_nn63">37.9.5 Mapping sequences to C arrays</a></H3>
<H3><a name="Python_nn63">38.9.5 Mapping sequences to C arrays</a></H3>
<p>
@ -5170,7 +5170,7 @@ static int convert_darray(PyObject *input, double *ptr, int size) {
</pre>
</div>
<H3><a name="Python_nn64">37.9.6 Pointer handling</a></H3>
<H3><a name="Python_nn64">38.9.6 Pointer handling</a></H3>
<p>
@ -5269,7 +5269,7 @@ class object (if applicable).
<H2><a name="Python_nn65">37.10 Docstring Features</a></H2>
<H2><a name="Python_nn65">38.10 Docstring Features</a></H2>
<p>
@ -5297,7 +5297,7 @@ of your users much simpler.
</p>
<H3><a name="Python_nn66">37.10.1 Module docstring</a></H3>
<H3><a name="Python_nn66">38.10.1 Module docstring</a></H3>
<p>
@ -5331,7 +5331,7 @@ layout of controls on a panel, etc. to be loaded from an XML file."
</div>
<H3><a name="Python_nn67">37.10.2 %feature("autodoc")</a></H3>
<H3><a name="Python_nn67">38.10.2 %feature("autodoc")</a></H3>
<p>
@ -5359,7 +5359,7 @@ four levels for autodoc controlled by the value given to the
feature, <tt>%feature("autodoc", "<i>level</i>")</tt>.
The four values for <i>level</i> are covered in the following sub-sections.
<H4><a name="Python_nn68">37.10.2.1 %feature("autodoc", "0")</a></H4>
<H4><a name="Python_nn68">38.10.2.1 %feature("autodoc", "0")</a></H4>
<p>
@ -5388,7 +5388,7 @@ def function_name(*args, **kwargs):
</div>
<H4><a name="Python_nn69">37.10.2.2 %feature("autodoc", "1")</a></H4>
<H4><a name="Python_nn69">38.10.2.2 %feature("autodoc", "1")</a></H4>
<p>
@ -5413,7 +5413,7 @@ def function_name(*args, **kwargs):
</div>
<H4><a name="Python_autodoc2">37.10.2.3 %feature("autodoc", "2")</a></H4>
<H4><a name="Python_autodoc2">38.10.2.3 %feature("autodoc", "2")</a></H4>
<p>
@ -5475,7 +5475,7 @@ def function_name(*args, **kwargs):
</pre>
</div>
<H4><a name="Python_autodoc3">37.10.2.4 %feature("autodoc", "3")</a></H4>
<H4><a name="Python_autodoc3">38.10.2.4 %feature("autodoc", "3")</a></H4>
<p>
@ -5501,7 +5501,7 @@ def function_name(*args, **kwargs):
</div>
<H4><a name="Python_nn70">37.10.2.5 %feature("autodoc", "docstring")</a></H4>
<H4><a name="Python_nn70">38.10.2.5 %feature("autodoc", "docstring")</a></H4>
<p>
@ -5520,7 +5520,7 @@ void GetPosition(int* OUTPUT, int* OUTPUT);
</div>
<H3><a name="Python_nn71">37.10.3 %feature("docstring")</a></H3>
<H3><a name="Python_nn71">38.10.3 %feature("docstring")</a></H3>
<p>
@ -5552,7 +5552,7 @@ with more than one line.
</pre>
</div>
<H2><a name="Python_nn72">37.11 Python Packages</a></H2>
<H2><a name="Python_nn72">38.11 Python Packages</a></H2>
<p>Python has concepts of modules and packages. Modules are separate units of
@ -5627,7 +5627,7 @@ users may need to use special features such as the <tt>package</tt> option in th
<tt>%module</tt> directive or import related command line options. These are
explained in the following sections.</p>
<H3><a name="Python_modulepackage">37.11.1 Setting the Python package</a></H3>
<H3><a name="Python_modulepackage">38.11.1 Setting the Python package</a></H3>
<p>
@ -5681,7 +5681,7 @@ pkg1/pkg2/_foo.so # (shared library built from C/C++ code generated by SWI
</pre>
</div>
<H3><a name="Python_absrelimports">37.11.2 Absolute and relative imports</a></H3>
<H3><a name="Python_absrelimports">38.11.2 Absolute and relative imports</a></H3>
<p>Suppose, we have the following hierarchy of files:</p>
@ -5816,7 +5816,7 @@ uses relative imports. Second case is, when one puts import directives in
<tt>__init__.py</tt> to import symbols from submodules or subpackages and the
submodule depends on other submodules (discussed later).</p>
<H3><a name="Python_absimport">37.11.3 Enforcing absolute import semantics</a></H3>
<H3><a name="Python_absimport">38.11.3 Enforcing absolute import semantics</a></H3>
<p>As you may know, there is an incompatibility in import semantics (for the
@ -5853,7 +5853,7 @@ from __future__ import absolute_import
</pre>
</div>
<H3><a name="Python_importfrominit">37.11.4 Importing from __init__.py</a></H3>
<H3><a name="Python_importfrominit">38.11.4 Importing from __init__.py</a></H3>
<p>Imports in <tt>__init__.py</tt> are handy when you want to populate a
@ -5963,7 +5963,7 @@ class Bar(pkg3.foo.Foo): pass
effect (note, that the Python 2 case also needs the <tt>-relativeimport</tt>
workaround).</p>
<H3><a name="Python_implicit_namespace_packages">37.11.5 Implicit Namespace Packages</a></H3>
<H3><a name="Python_implicit_namespace_packages">38.11.5 Implicit Namespace Packages</a></H3>
<p> Python 3.3 introduced
@ -6041,7 +6041,7 @@ zipimporter requires python-3.5.1 or newer to work with subpackages.
</p>
<H3><a name="Python_package_search">37.11.6 Searching for the wrapper module</a></H3>
<H3><a name="Python_package_search">38.11.6 Searching for the wrapper module</a></H3>
<p>
@ -6116,7 +6116,7 @@ following ways:
</p>
<H4><a name="Python_package_search_both_package_modules">37.11.6.1 Both modules in the same package</a></H4>
<H4><a name="Python_package_search_both_package_modules">38.11.6.1 Both modules in the same package</a></H4>
<p>Both modules are in one package:</p>
@ -6135,7 +6135,7 @@ from package import foo
</div>
<H4><a name="Python_package_search_wrapper_split">37.11.6.2 Split modules</a></H4>
<H4><a name="Python_package_search_wrapper_split">38.11.6.2 Split modules</a></H4>
<p>The pure python module is in a package and the C/C++ module is global:</p>
@ -6154,7 +6154,7 @@ from package import foo
</div>
<H4><a name="Python_package_search_both_global_modules">37.11.6.3 Both modules are global</a></H4>
<H4><a name="Python_package_search_both_global_modules">38.11.6.3 Both modules are global</a></H4>
<p>Both modules are global:</p>
@ -6179,7 +6179,7 @@ loaded modules. So, one may place the module either globally or in a package
as desired.
</p>
<H4><a name="Python_package_search_static">37.11.6.4 Statically linked C modules</a></H4>
<H4><a name="Python_package_search_static">38.11.6.4 Statically linked C modules</a></H4>
<p>It is strongly recommended to use dynamically linked modules for the C
@ -6251,7 +6251,7 @@ module then you will either need to refer to the Python documentation on how
to do this (remember you are now the Python importer) or use dynamic linking.
</p>
<H2><a name="Python_python3support">37.12 Python 3 Support</a></H2>
<H2><a name="Python_python3support">38.12 Python 3 Support</a></H2>
<p>
@ -6278,7 +6278,7 @@ The following are Python 3.0 new features that are currently supported by
SWIG.
</p>
<H3><a name="Python_nn74">37.12.1 Function annotation</a></H3>
<H3><a name="Python_nn74">38.12.1 Function annotation</a></H3>
<p>
@ -6311,7 +6311,7 @@ For detailed usage of function annotation, see
<a href="https://www.python.org/dev/peps/pep-3107/">PEP 3107</a>.
</p>
<H3><a name="Python_nn75">37.12.2 Buffer interface</a></H3>
<H3><a name="Python_nn75">38.12.2 Buffer interface</a></H3>
<p>
@ -6463,7 +6463,7 @@ modify the buffer.
</div>
<H3><a name="Python_nn76">37.12.3 Abstract base classes</a></H3>
<H3><a name="Python_nn76">38.12.3 Abstract base classes</a></H3>
<p>
@ -6504,7 +6504,7 @@ For details of abstract base class, please see
<a href="https://www.python.org/dev/peps/pep-3119/">PEP 3119</a>.
</p>
<H3><a name="Python_nn77">37.12.4 Byte string output conversion</a></H3>
<H3><a name="Python_nn77">38.12.4 Byte string output conversion</a></H3>
<p>
@ -6684,7 +6684,7 @@ overloads taking both std::string (as Python bytes) and std::wstring
(as Python unicode).
</p>
<H3><a name="Python_2_unicode">37.12.5 Python 2 Unicode</a></H3>
<H3><a name="Python_2_unicode">38.12.5 Python 2 Unicode</a></H3>
<p>
@ -6756,7 +6756,7 @@ the first is allowing unicode conversion and the second is explicitly
prohibiting it.
</p>
<H2><a name="Python_multithreaded">37.13 Support for Multithreaded Applications</a></H2>
<H2><a name="Python_multithreaded">38.13 Support for Multithreaded Applications</a></H2>
<p>By default, SWIG does not enable support for multithreaded Python applications. More
@ -6771,7 +6771,7 @@ will not be able to run any other threads, even if the wrapped C/C++ code is wai
interface for this is described in the next section.
</p>
<H3><a name="Python_thread_UI">37.13.1 UI for Enabling Multithreading Support</a></H3>
<H3><a name="Python_thread_UI">38.13.1 UI for Enabling Multithreading Support</a></H3>
<p>The user interface is as follows:</p>
@ -6814,7 +6814,7 @@ will not be able to run any other threads, even if the wrapped C/C++ code is wai
</li>
</ol>
<H3><a name="Python_thread_performance">37.13.2 Multithread Performance</a></H3>
<H3><a name="Python_thread_performance">38.13.2 Multithread Performance</a></H3>
<p>