doxysip 0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,194 @@
1
+ Documentation
2
+ =============
3
+
4
+
5
+ Getting Started
6
+ ---------------
7
+
8
+ This how-to assumes we have a C++ code documented with Doxygen and a SIP project with
9
+ specification files (`.sip`) to bind this C++ code in Python.
10
+ Doxygen must be configured to produce XML output.
11
+
12
+
13
+ 1. Install Doxy-SIP in the Python environment alongside Sphinx:
14
+
15
+ .. code-block:: bash
16
+
17
+ pip install doxysip
18
+
19
+ 2. Add Doxy-SIP to the list of loaded extensions in the Sphinx ``conf.py`` file:
20
+
21
+ .. code-block:: py
22
+
23
+ extensions = [
24
+ ...,
25
+ 'doxysip',
26
+ ]
27
+
28
+ 3. Add the required parameters in the Sphinx ``conf.py`` file:
29
+
30
+ .. code-block:: py
31
+
32
+ sip_toml_project = "path/to/sip/project"
33
+ sip_doxygen_project = "path/to/doxygen/xml/output"
34
+
35
+ 4. Start using the doxysip directives in the doc source files to insert object documentation.
36
+
37
+
38
+ Extension configuration options
39
+ -------------------------------
40
+
41
+ **sip_toml_project** :
42
+ This option must contain a path to the directory containing the SIP project ``pyproject.toml``
43
+ that defines the binding modules.
44
+
45
+ **sip_doxygen_project** :
46
+ This option must contain a path to the directory containing the XML output produced by Doxygen.
47
+
48
+
49
+ Docstring tags
50
+ --------------
51
+
52
+ If description data exists in both C++ and docstrings for the same object,
53
+ Doxy-SIP will combine the two according to an optional tag, present in
54
+ the first line of the docstring.
55
+ This tag does not appear in the final documentation text.
56
+
57
+ The SIP specification file should look like this::
58
+
59
+ %Docstring
60
+ \dox:[prepend|append|discard]
61
+ First line of description
62
+ %End
63
+
64
+ Tag values:
65
+
66
+ * `prepend` : the C++ description is added before the docstring content.
67
+ * `append` : the C++ description is added after the docstring content.
68
+ * `discard` (default) : the C++ data is discarded.
69
+
70
+ Notes:
71
+
72
+ - In the case of functions and methods, the arguments and result descriptions in C++ data (from
73
+ \\param or \\return tags) are kept if no tag is present, and is always placed after the
74
+ function description, regardless of the tag value.
75
+ - The docstring is processes as regular reStructuredText content so markup can be used.
76
+
77
+
78
+ Directives
79
+ ----------
80
+
81
+ `..sip:specification:: [name]`
82
+ ******************************
83
+
84
+ This directive sets the currently loaded SIP module specification. The name must be fully qualified.
85
+
86
+ Note: It must be used before any other Doxy-SIP directive. All other directives work with the module
87
+ loaded using this directive.
88
+
89
+
90
+ `..sip:module::`
91
+ ****************
92
+
93
+ This directive inserts the content of the current module docstring.
94
+
95
+
96
+ `..sip:class:: [name]`
97
+ **********************
98
+
99
+ This directive inserts the description for the class defined in the current module.
100
+
101
+ Options:
102
+
103
+ `:members`: [filters]
104
+ Insert the documentation of the class members : sub-classes, methods, attributes, etc.
105
+
106
+ [filters] defines the filtering rules for displaying members. See the dedicated section below.
107
+
108
+ `:no-header`:
109
+ If set, the class header (class name, qualifiers and inheritance) is not generated and the content
110
+ for the class members (if generated) is not indented.
111
+
112
+ `:no-doc`:
113
+ If set, the class description is not generated.
114
+
115
+
116
+ `..sip:namespace:: [name]`
117
+ **************************
118
+
119
+ Namespaces are implemented by SIP as regular classes. To differentiate them, a ``[namespace]`` tag is added
120
+ as prefix to the class signature.
121
+
122
+ Options are the same as for ``..sip:class::``
123
+
124
+
125
+ `..sip:property:: [name]`
126
+ *************************
127
+
128
+ This directive describes a Python class property.
129
+
130
+
131
+ `..sip:enum:: [name]`
132
+ *********************
133
+
134
+ This directive describes an enumeration class.
135
+
136
+
137
+ `..sip:method:: [name]`
138
+ ***********************
139
+
140
+ This directive describes a method.
141
+
142
+
143
+ `..sip:variable:: [name]`
144
+ *************************
145
+
146
+ This directive describes a variable/attribute.
147
+
148
+
149
+ `..sip:macro-constant:: [var_name] [macro_name]`
150
+ ************************************************
151
+
152
+ This directive describes a C++ constant defined by a macro, and implemented in Python
153
+ as a constant global variable.
154
+
155
+ **var_name** : Python variable name
156
+
157
+ **macro_name** (optional): C++ macro name, if different from the Python variable name.
158
+
159
+
160
+ Member filtering
161
+ ----------------
162
+
163
+ By defaults, the ``:member:`` option will display class/namespace members that are
164
+ *public* and documented (either in Doxygen or in SIP docstrings).
165
+ To add other members, filtering flags must be added as::
166
+
167
+ :members: [undoc|private|special|all]
168
+
169
+ The following member filters are define:
170
+
171
+ - ``undoc`` : if specified, undocumented members will be displayed.
172
+ - ``private`` : if specified, private members (i.e. with a Python name starting by an underscore)
173
+ will be displayed.
174
+ - ``special`` : if specified, special methods (i.e. with a Python name starting and ending
175
+ with a double underscore) will be displayed.
176
+ - ``all`` : if specified, all members will be displayed.
177
+
178
+ Notes:
179
+
180
+ * If several flags are specified, they are separated by a comma. Example: ``:members: undoc,private``
181
+ * An undocumented private member requires both ``undoc`` and ``private`` to be displayed. Idem for
182
+ an undocumented special method, both ``undoc`` and ``special`` are required.
183
+
184
+ A special filtering rule applies to constructors when displayed as part of a sip:class directive:
185
+
186
+ By default, SIP generates automatically *default* constructors for each class, where possible:
187
+ the no-argument constructor (``Class()``) and the copy constructor
188
+ (C++: ``Class(const Class&)``, Python: ``Class(a0: Class)``).
189
+
190
+ If the class has only *default* constructors, then they are only displayed if they are documented
191
+ (or the ``undoc`` flag is specified).
192
+
193
+ If the class has any *non-default* constructors, then all constructors are displayed, whether they're
194
+ documented or not.
doxysip-0.1/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2026, C. Savergne <csavergne@yahoo.com>
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,4 @@
1
+ #Excluded pycache
2
+ global-exclude *.pyc
3
+
4
+ include DOCUMENTATION.rst
doxysip-0.1/PKG-INFO ADDED
@@ -0,0 +1,86 @@
1
+ Metadata-Version: 2.4
2
+ Name: doxysip
3
+ Version: 0.1
4
+ Summary: A Sphinx extension for semi-automatic class documentation from SIP bindings and Doxygen
5
+ Author-email: "C. Savergne" <csavergne@yahoo.com>
6
+ License-Expression: BSD-3-Clause
7
+ Project-URL: homepage, https://github.com/clesav/doxy-sip
8
+ Classifier: Development Status :: 2 - Pre-Alpha
9
+ Classifier: Framework :: Sphinx :: Extension
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Topic :: Documentation :: Sphinx
14
+ Classifier: Topic :: Software Development :: Documentation
15
+ Requires-Python: >=3.9
16
+ Description-Content-Type: text/x-rst
17
+ License-File: LICENSE
18
+ Requires-Dist: sphinx>=7.2
19
+ Requires-Dist: sip<6.16,>=6.13
20
+ Dynamic: license-file
21
+
22
+ Doxy-SIP
23
+ ========
24
+
25
+
26
+ Doxy-SIP is a Sphinx plugin providing integration between
27
+ Doxygen, the SIP bindings tools and Sphinx.
28
+
29
+ The itch to scratch
30
+ -------------------
31
+
32
+ When writing Python compiled extensions created in C++ and SIP bindings, options to
33
+ write clean and easy documentation that can be integrated in Sphinx-produced web pages
34
+ are limited:
35
+
36
+ * Using Doxygen comments in the C++ code:
37
+
38
+ Ddocumenting an API within the C++ source files is very easy and tools such as Breathe. However,
39
+ using tools such as Breathe will produce an API with C++ signature whereas Python
40
+ signatures are different, omit certain C++ objects or add new ones.
41
+
42
+ * Using Python Docstrings:
43
+
44
+ It limits the functionalities and defeats the philosophy of writing documentation
45
+ and code in the same place.
46
+
47
+ * Manually documenting in RST files:
48
+
49
+ Just too tedious.
50
+
51
+ Doxy-SIP attempts to resolve that by combining Doxygen output and docstring in SIP
52
+ specification files to provide clear documentation about the C++ implementation, but with
53
+ a Pythonic presentation.
54
+
55
+ It takes as input:
56
+
57
+ * A Doxygen output in XML format documenting C++ code.
58
+ * A SIP project file (pyproject.toml) defining the bindings for the same C++ code.
59
+
60
+ It defines a new Sphinx domain (sip) and directives to semi-automatically (à la sphinx.ext.autodoc)
61
+ add documentation on objects defined in the bindings specification files.
62
+
63
+ Installation
64
+ ------------
65
+
66
+ Breathe is available from github and PyPI <https://pypi.org/project/doxy-sip/>. It can be installed with::
67
+
68
+ pip install doxysip
69
+
70
+ Documentation
71
+ -------------
72
+
73
+ Short documentation - <https://github.com/clesav/doxy-sip/blob/main/DOCUMENTATION.rst>.
74
+
75
+ Requirements
76
+ ------------
77
+
78
+ Doxy-SIP requires Python 3.9+, Sphinx 7.2+, Doxygen 1.9.2+ and SIP 6.13+
79
+
80
+ Acknowledgements
81
+ ----------------
82
+
83
+ - Dimitri van Heesch for Doxygen - <https://www.doxygen.nl>.
84
+ - Georg Brandl for Sphinx - <https://www.sphinx-doc.org>.
85
+ - Phil Thompson for SIP - <https://github.com/Python-SIP/sip>.
86
+
doxysip-0.1/README.rst ADDED
@@ -0,0 +1,65 @@
1
+ Doxy-SIP
2
+ ========
3
+
4
+
5
+ Doxy-SIP is a Sphinx plugin providing integration between
6
+ Doxygen, the SIP bindings tools and Sphinx.
7
+
8
+ The itch to scratch
9
+ -------------------
10
+
11
+ When writing Python compiled extensions created in C++ and SIP bindings, options to
12
+ write clean and easy documentation that can be integrated in Sphinx-produced web pages
13
+ are limited:
14
+
15
+ * Using Doxygen comments in the C++ code:
16
+
17
+ Ddocumenting an API within the C++ source files is very easy and tools such as Breathe. However,
18
+ using tools such as Breathe will produce an API with C++ signature whereas Python
19
+ signatures are different, omit certain C++ objects or add new ones.
20
+
21
+ * Using Python Docstrings:
22
+
23
+ It limits the functionalities and defeats the philosophy of writing documentation
24
+ and code in the same place.
25
+
26
+ * Manually documenting in RST files:
27
+
28
+ Just too tedious.
29
+
30
+ Doxy-SIP attempts to resolve that by combining Doxygen output and docstring in SIP
31
+ specification files to provide clear documentation about the C++ implementation, but with
32
+ a Pythonic presentation.
33
+
34
+ It takes as input:
35
+
36
+ * A Doxygen output in XML format documenting C++ code.
37
+ * A SIP project file (pyproject.toml) defining the bindings for the same C++ code.
38
+
39
+ It defines a new Sphinx domain (sip) and directives to semi-automatically (à la sphinx.ext.autodoc)
40
+ add documentation on objects defined in the bindings specification files.
41
+
42
+ Installation
43
+ ------------
44
+
45
+ Breathe is available from github and PyPI <https://pypi.org/project/doxy-sip/>. It can be installed with::
46
+
47
+ pip install doxysip
48
+
49
+ Documentation
50
+ -------------
51
+
52
+ Short documentation - <https://github.com/clesav/doxy-sip/blob/main/DOCUMENTATION.rst>.
53
+
54
+ Requirements
55
+ ------------
56
+
57
+ Doxy-SIP requires Python 3.9+, Sphinx 7.2+, Doxygen 1.9.2+ and SIP 6.13+
58
+
59
+ Acknowledgements
60
+ ----------------
61
+
62
+ - Dimitri van Heesch for Doxygen - <https://www.doxygen.nl>.
63
+ - Georg Brandl for Sphinx - <https://www.sphinx-doc.org>.
64
+ - Phil Thompson for SIP - <https://github.com/Python-SIP/sip>.
65
+
@@ -0,0 +1,31 @@
1
+ [build-system]
2
+ requires = ["setuptools>=75.4"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+
6
+ [project]
7
+ name = "doxysip"
8
+ description = "A Sphinx extension for semi-automatic class documentation from SIP bindings and Doxygen"
9
+ readme = "README.rst"
10
+ license = "BSD-3-Clause"
11
+ license-files = ["LICENSE"]
12
+ requires-python = ">=3.9"
13
+ dependencies = ["sphinx>=7.2", "sip>=6.13,<6.16"]
14
+ classifiers = [
15
+ "Development Status :: 2 - Pre-Alpha",
16
+ "Framework :: Sphinx :: Extension",
17
+ "Intended Audience :: Developers",
18
+ "Operating System :: OS Independent",
19
+ "Programming Language :: Python :: 3",
20
+ "Topic :: Documentation :: Sphinx",
21
+ "Topic :: Software Development :: Documentation",
22
+ ]
23
+ urls.homepage = "https://github.com/clesav/doxy-sip"
24
+
25
+ version = "0.1"
26
+
27
+
28
+ [[project.authors]]
29
+ name = "C. Savergne"
30
+ email = "csavergne@yahoo.com"
31
+
doxysip-0.1/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,53 @@
1
+ # SPDX-License-Identifier: BSD-3-Clause
2
+
3
+ # Copyright (c) 2026 C. Savergne <csavergne@yahoo.com>
4
+
5
+
6
+ from sphinx.domains import Domain
7
+
8
+ from .directives import (
9
+ SIPSpecificationDirective,
10
+ SIPModuleDirective,
11
+ SIPClassDirective,
12
+ SIPNamespaceDirective,
13
+ SIPEnumDirective,
14
+ SIPMethodDirective,
15
+ SIPPropertyDirective,
16
+ SIPVariableDirective,
17
+ SIPMacroConstantDirective,
18
+ )
19
+
20
+
21
+ __version__ = "0.0.1"
22
+
23
+
24
+ class SIPDomain(Domain):
25
+ name = 'sip'
26
+ label = 'Bindings specification language'
27
+ directives = {
28
+ 'specification': SIPSpecificationDirective,
29
+ 'module' : SIPModuleDirective,
30
+ 'class': SIPClassDirective,
31
+ 'namespace': SIPNamespaceDirective,
32
+ 'enum': SIPEnumDirective,
33
+ 'method': SIPMethodDirective,
34
+ 'property': SIPPropertyDirective,
35
+ 'variable': SIPVariableDirective,
36
+ 'macro-constant': SIPMacroConstantDirective,
37
+ }
38
+ initial_data = {
39
+ 'sip_specs': {},
40
+ 'sip_dox_index': None,
41
+ 'sip_project_loaded': False,
42
+ 'sip_current_spec': '',
43
+ }
44
+
45
+
46
+ def setup(app):
47
+ app.add_domain(SIPDomain)
48
+ app.add_config_value('sip_toml_project', '.', 'env', str)
49
+ app.add_config_value('sip_doxygen_project', '.', 'env', str)
50
+
51
+ return {
52
+ "version": __version__
53
+ }