Slicer 5.4
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
conf.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2#
3# 3D Slicer documentation build configuration file, created by
4# sphinx-quickstart on Tue Mar 21 03:07:30 2017.
5#
6# This file is execfile()d with the current directory set to its
7# containing dir.
8#
9# Note that not all possible configuration values are present in this
10# autogenerated file.
11#
12# All configuration values have a default; values that are commented out
13# serve to show the default.
14
15# If extensions (or modules to document with autodoc) are in another directory,
16# add these directories to sys.path here. If the directory is relative to the
17# documentation root, use os.path.abspath to make it absolute, like shown here.
18#
19import lxml.etree as ET
20import os
21import sys
22from datetime import date
23
24sys.path.insert(0, os.path.abspath('../Base/Python'))
25
26
27# -- General configuration ------------------------------------------------
28
29# If your documentation needs a minimal Sphinx version, state it here.
30#
31# needs_sphinx = '1.0'
32
33# Add any Sphinx extension module names here, as strings. They can be
34# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
35# ones.
36extensions = [
37 'sphinx.ext.autodoc',
38 'myst_parser',
39 'sphinx_markdown_tables',
40 'notfound.extension', # Show a better 404 page when an invalid address is entered
41]
42
43suppress_warnings = [
44 # Since we split the "script_repository.md" into smaller documents combined using
45 # the "include" directive, we ignore warnings like "Document headings start at H2, not H1"
46 "myst.header",
47]
48
49autodoc_mock_imports = [
50 "ctk",
51 "qt",
52 "vtk",
53]
54
55myst_enable_extensions = [
56 "attrs_inline", # Enable parsing of inline attributes (see https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#inline-attributes)
57 "colon_fence", # Allow code fence using ::: (see https://myst-parser.readthedocs.io/en/latest/using/syntax-optional.html#syntax-colon-fence)
58 "dollarmath", # Support syntax for inline and block math using `$...$` and `$$...$$`
59 # (see https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#dollar-delimited-math)
60 "linkify", # Allow automatic creation of links from URLs (it is sufficient to write https://google.com instead of <https://google.com>)
61]
62
63# Auto-generate header anchors up to level 6, so that it can be referenced like [](file.md#header-anchor).
64# (see https://myst-parser.readthedocs.io/en/latest/using/syntax-optional.html#auto-generated-header-anchors)
65myst_heading_anchors = 6
66
67# Allow display (block) math with equation label syntax
68myst_dmath_allow_labels = True
69
70# Add any paths that contain templates here, relative to this directory.
71templates_path = ['_templates']
72
73# The suffix(es) of source filenames.
74# You can specify multiple suffix as a list of string:
75#
76source_suffix = ['.rst', '.md']
77
78# The master toctree document.
79master_doc = 'index'
80
81# General information about the project.
82project = '3D Slicer'
83copyright = f'{date.today().year}, Slicer Community'
84author = 'Slicer Community'
85
86# The version info for the project you're documenting, acts as replacement for
87# |version| and |release|, also used in various other places throughout the
88# built documents.
89#
90# The short X.Y version.
91version = ''
92# The full version, including alpha/beta/rc tags.
93release = ''
94
95# List of patterns, relative to source directory, that match files and
96# directories to ignore when looking for source files.
97# This patterns also effect to html_static_path and html_extra_path
98exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '_moduledescriptions']
99
100# Set EXCLUDE_DEVELOPER_GUIDE=True environment variable to exclude developer guide.
101# It is useful for quicker documentation generation while eiditing user manual.
102if os.environ.get('EXCLUDE_API_REFERENCE', False) == 'True':
103 print("API reference is excluded from documentation.")
104 exclude_patterns.append('developer_guide/vtkTeem.rst')
105 exclude_patterns.append('developer_guide/vtkAddon.rst')
106 exclude_patterns.append('developer_guide/vtkITK.rst')
107 exclude_patterns.append('developer_guide/slicer.rst')
108 exclude_patterns.append('developer_guide/mrml.rst')
109
110# sphinx-notfound-page
111# https://github.com/readthedocs/sphinx-notfound-page
112notfound_context = {
113 'title': 'Page Not Found',
114 'body': '''
115<h1>Page Not Found</h1>
116<p>Sorry, we couldn't find that page.</p>
117<p>Try using the search box or go to the homepage.</p>
118''',
119}
120
121# The name of the Pygments (syntax highlighting) style to use.
122pygments_style = 'sphinx'
123
124# If true, `todo` and `todoList` produce output, else they produce nothing.
125todo_include_todos = False
126
127# A string of reStructuredText that will be included at the beginning of every source file that is read.
128rst_prolog = open('global.rst.in').read()
129
130# If given, this must be the name of an image file (path relative to the configuration directory) that is the logo of the docs.
131# It is placed at the top of the sidebar; its width should therefore not exceed 200 pixels
132html_logo = '_static/images/3D-Slicer-Mark.png'
133
134# -- Options for HTML output ----------------------------------------------
135
136# The theme to use for HTML and HTML Help pages. See the documentation for
137# a list of builtin themes.
138#
139html_theme = 'default'
140
141# Theme options are theme-specific and customize the look and feel of a theme
142# further. For a list of options available for each theme, see the
143# documentation.
144#
145html_theme_options = {
146 # Toc options
147 'includehidden': False,
148}
149
150# Add any paths that contain custom static files (such as style sheets) here,
151# relative to this directory. They are copied after the builtin static files,
152# so a file named "default.css" will overwrite the builtin "default.css".
153html_static_path = ['_static']
154
155# These paths are either relative to html_static_path
156# or fully qualified paths (eg. https://...)
157html_css_files = [
158 'css/custom.css',
159]
160
161# -- Options for HTMLHelp output ------------------------------------------
162
163# Output file base name for HTML help builder.
164htmlhelp_basename = '3DSlicerdoc'
165
166
167# -- Options for LaTeX output ---------------------------------------------
168
169latex_elements = {
170 # The paper size ('letterpaper' or 'a4paper').
171 #
172 # 'papersize': 'letterpaper',
173
174 # The font size ('10pt', '11pt' or '12pt').
175 #
176 # 'pointsize': '10pt',
177
178 # Additional stuff for the LaTeX preamble.
179 #
180 # 'preamble': '',
181
182 # Latex figure (float) alignment
183 #
184 # 'figure_align': 'htbp',
185}
186
187# Grouping the document tree into LaTeX files. List of tuples
188# (source start file, target name, title,
189# author, documentclass [howto, manual, or own class]).
190latex_documents = [
191 (master_doc, '3DSlicer.tex', '3D Slicer Documentation',
192 'Slicer Community', 'manual'),
193]
194
195
196# -- Options for manual page output ---------------------------------------
197
198# One entry per manual page. List of tuples
199# (source start file, name, description, authors, manual section).
200man_pages = [
201 (master_doc, '3Dslicer', '3D Slicer Documentation',
202 [author], 1)
203]
204
205
206# -- Options for Texinfo output -------------------------------------------
207
208# Grouping the document tree into Texinfo files. List of tuples
209# (source start file, target name, title, author,
210# dir menu entry, description, category)
211texinfo_documents = [
212 (master_doc, '3DSlicer', '3D Slicer Documentation',
213 author, '3DSlicer', 'One line description of project.',
214 'Miscellaneous'),
215]
216
217
218# -- Read The Docs -----------------------------------------------------
219
220# on_rtd is whether we are on readthedocs.io
221on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
222
223if not on_rtd: # only import and set the theme if we're building docs locally
224 import sphinx_rtd_theme
225 html_theme = 'sphinx_rtd_theme'
226 html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
227
228# -- Convert CLI module descriptions into markdown files ----------------
229
230# Each CLI module descriptor XML file is converted to two markdown files
231# in _moduledescriptions subfolder: *Overview.md and *Parameters.md.
232# Overview file contains the module title and description.
233# Parameters file contains detailed description of module inputs and
234# outputs, contributors, and acknowledgements.
235#
236# These md files are included at the top and bottom of each CLI module
237# documentation file (user_guide\modules\*.md). Custom content, such as
238# tutorials, screenshots, etc. can be added in between these includes.
239#
240# A copy of all CLI module descriptor XML files for modules that are
241# not part of the Slicer repository (e.g., BRAINS toolkit) are stored in
242# _extracli subfolder. Content of this folder must be updated manually
243# whenever they are updated in the original location. The process could
244# be automated with some effort, but since these bundled libraries do
245# not change frequently, manual update takes less work overall.
246
247
248# Documentation root folder (folder of this script).
249docsfolder = os.path.dirname(__file__)
250
251# List of folders that contain CLI module descriptor XML files.
252inputpaths = [
253 os.path.join(docsfolder, "../Modules/CLI"),
254 os.path.join(docsfolder, "_extracli"),
255]
256
257# List of modules to be excluded from documentation generation
258# (for example, testing modules only).
259excludenames = [
260 'CLIROITest.xml',
261 'TestGridTransformRegistration.xml',
262 'DiffusionTensorTest.xml',
263]
264
265# Output folder that contains all generated markdown files.
266outpath = os.path.join(docsfolder, "_moduledescriptions")
267os.makedirs(outpath, exist_ok=True)
268with open(os.path.join(outpath, '_readme_.txt'), 'w') as descriptionfile:
269 descriptionfile.write("Content of this folder is automatically generated by Docs/conf.py from CLI module descriptor XML files\n")
270 descriptionfile.write("during documentation build. The folder can be deleted because it is automatically regenerated when needed.")
271
272
273def _generatemd(dom, docsfolder, outpath, xslt, suffix):
274 """Helper function to create markdown file from CLI module description XML file using XSLT"""
275 xsltpath = os.path.join(docsfolder, xslt)
276 transform = ET.XSLT(ET.parse(xsltpath))
277 content = str(transform(dom))
278 with open(os.path.join(outpath, os.path.splitext(name)[0] + suffix + '.md'), 'w', encoding='utf8') as outfile:
279 outfile.write(content)
280
281
282for inputpath in inputpaths:
283 for root, dirs, files in os.walk(inputpath):
284 for name in files:
285 if name in excludenames:
286 continue
287 if name.endswith(".xml"):
288 print(f"Generating CLI module documentation from {name}")
289 dom = ET.parse(os.path.join(root, name))
290 _generatemd(dom, docsfolder, outpath, "cli_module_overview_to_md.xsl", "Overview")
291 _generatemd(dom, docsfolder, outpath, "cli_module_parameters_to_md.xsl", "Parameters")
_generatemd(dom, docsfolder, outpath, xslt, suffix)
Definition conf.py:273