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