summaryrefslogtreecommitdiffstats
path: root/doc/conf.py
diff options
context:
space:
mode:
Diffstat (limited to 'doc/conf.py')
-rw-r--r--doc/conf.py244
1 files changed, 244 insertions, 0 deletions
diff --git a/doc/conf.py b/doc/conf.py
new file mode 100644
index 0000000..d4915aa
--- /dev/null
+++ b/doc/conf.py
@@ -0,0 +1,244 @@
+# Sphinx documentation build configuration file
+
+import os
+import re
+import time
+
+import sphinx
+
+os.environ['SPHINX_AUTODOC_RELOAD_MODULES'] = '1'
+
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.todo',
+ 'sphinx.ext.autosummary', 'sphinx.ext.extlinks',
+ 'sphinx.ext.intersphinx',
+ 'sphinx.ext.viewcode', 'sphinx.ext.inheritance_diagram',
+ 'sphinx.ext.coverage']
+coverage_statistics_to_report = coverage_statistics_to_stdout = True
+templates_path = ['_templates']
+exclude_patterns = ['_build']
+
+project = 'Sphinx'
+copyright = f'2007-{time.strftime("%Y")}, the Sphinx developers'
+version = sphinx.__display_version__
+release = version
+show_authors = True
+
+html_theme = 'sphinx13'
+html_theme_path = ['_themes']
+html_css_files = [
+ # 'basic.css', # included through inheritance from the basic theme
+ 'sphinx13.css',
+]
+modindex_common_prefix = ['sphinx.']
+html_static_path = ['_static']
+html_title = 'Sphinx documentation'
+html_additional_pages = {'contents': 'contents.html'}
+html_use_opensearch = 'https://www.sphinx-doc.org/en/master'
+html_baseurl = 'https://www.sphinx-doc.org/en/master/'
+html_favicon = '_static/favicon.svg'
+
+htmlhelp_basename = 'Sphinxdoc'
+
+epub_theme = 'epub'
+epub_basename = 'sphinx'
+epub_author = 'the Sphinx developers'
+epub_publisher = 'https://www.sphinx-doc.org/'
+epub_uid = 'web-site'
+epub_scheme = 'url'
+epub_identifier = epub_publisher
+epub_pre_files = [('index.xhtml', 'Welcome')]
+epub_post_files = [('usage/installation.xhtml', 'Installing Sphinx'),
+ ('develop.xhtml', 'Sphinx development')]
+epub_exclude_files = ['_static/opensearch.xml', '_static/doctools.js',
+ '_static/searchtools.js',
+ '_static/sphinx_highlight.js',
+ '_static/basic.css',
+ '_static/language_data.js',
+ 'search.html', '_static/websupport.js']
+epub_fix_images = False
+epub_max_image_width = 0
+epub_show_urls = 'inline'
+epub_use_index = False
+epub_description = 'Sphinx documentation generator system manual'
+
+latex_documents = [('index', 'sphinx.tex', 'Sphinx Documentation',
+ 'the Sphinx developers', 'manual', 1)]
+latex_logo = '_static/sphinx.png'
+latex_elements = {
+ 'fontenc': r'\usepackage[LGR,X2,T1]{fontenc}',
+ 'passoptionstopackages': r'''
+\PassOptionsToPackage{svgnames}{xcolor}
+''',
+ 'preamble': r'''
+\DeclareUnicodeCharacter{229E}{\ensuremath{\boxplus}}
+\setcounter{tocdepth}{3}% depth of what main TOC shows (3=subsubsection)
+\setcounter{secnumdepth}{1}% depth of section numbering
+\setlength{\tymin}{2cm}% avoid too cramped table columns
+''',
+ # fix missing index entry due to RTD doing only once pdflatex after makeindex
+ 'printindex': r'''
+\IfFileExists{\jobname.ind}
+ {\footnotesize\raggedright\printindex}
+ {\begin{sphinxtheindex}\end{sphinxtheindex}}
+''',
+}
+latex_show_urls = 'footnote'
+latex_use_xindy = True
+
+linkcheck_timeout = 5
+
+autodoc_member_order = 'groupwise'
+autosummary_generate = False
+todo_include_todos = True
+extlinks = {'duref': ('https://docutils.sourceforge.io/docs/ref/rst/'
+ 'restructuredtext.html#%s', '%s'),
+ 'durole': ('https://docutils.sourceforge.io/docs/ref/rst/'
+ 'roles.html#%s', '%s'),
+ 'dudir': ('https://docutils.sourceforge.io/docs/ref/rst/'
+ 'directives.html#%s', '%s')}
+
+man_pages = [
+ ('index', 'sphinx-all', 'Sphinx documentation generator system manual',
+ 'the Sphinx developers', 1),
+ ('man/sphinx-build', 'sphinx-build', 'Sphinx documentation generator tool',
+ '', 1),
+ ('man/sphinx-quickstart', 'sphinx-quickstart', 'Sphinx documentation '
+ 'template generator', '', 1),
+ ('man/sphinx-apidoc', 'sphinx-apidoc', 'Sphinx API doc generator tool',
+ '', 1),
+ ('man/sphinx-autogen', 'sphinx-autogen', 'Generate autodoc stub pages',
+ '', 1),
+]
+
+texinfo_documents = [
+ ('index', 'sphinx', 'Sphinx Documentation', 'the Sphinx developers',
+ 'Sphinx', 'The Sphinx documentation builder.', 'Documentation tools',
+ 1),
+]
+
+intersphinx_mapping = {
+ 'python': ('https://docs.python.org/3/', None),
+ 'requests': ('https://requests.readthedocs.io/en/latest/', None),
+ 'readthedocs': ('https://docs.readthedocs.io/en/stable', None),
+}
+
+# Sphinx document translation with sphinx gettext feature uses these settings:
+locale_dirs = ['locale/']
+gettext_compact = False
+
+nitpick_ignore = {
+ ('cpp:class', 'template<typename TOuter> template<typename TInner> Wrapper::Outer<TOuter>::Inner'), # NoQA: E501
+ ('cpp:identifier', 'MyContainer'),
+ ('js:func', 'SomeError'),
+ ('js:func', 'number'),
+ ('js:func', 'string'),
+ ('py:attr', 'srcline'),
+ ('py:class', 'Element'), # sphinx.domains.Domain
+ ('py:class', 'IndexEntry'), # sphinx.domains.IndexEntry
+ ('py:class', 'Node'), # sphinx.domains.Domain
+ ('py:class', 'NullTranslations'), # gettext.NullTranslations
+ ('py:class', 'RoleFunction'), # sphinx.domains.Domain
+ ('py:class', 'Theme'), # sphinx.application.TemplateBridge
+ ('py:class', 'TitleGetter'), # sphinx.domains.Domain
+ ('py:class', 'XRefRole'), # sphinx.domains.Domain
+ ('py:class', 'docutils.nodes.Element'),
+ ('py:class', 'docutils.nodes.Node'),
+ ('py:class', 'docutils.nodes.NodeVisitor'),
+ ('py:class', 'docutils.nodes.TextElement'),
+ ('py:class', 'docutils.nodes.document'),
+ ('py:class', 'docutils.nodes.system_message'),
+ ('py:class', 'docutils.parsers.Parser'),
+ ('py:class', 'docutils.parsers.rst.states.Inliner'),
+ ('py:class', 'docutils.transforms.Transform'),
+ ('py:class', 'nodes.NodeVisitor'),
+ ('py:class', 'nodes.document'),
+ ('py:class', 'nodes.reference'),
+ ('py:class', 'pygments.lexer.Lexer'),
+ ('py:class', 'sphinx.directives.ObjDescT'),
+ ('py:class', 'sphinx.domains.IndexEntry'),
+ ('py:class', 'sphinx.ext.autodoc.Documenter'),
+ ('py:class', 'sphinx.errors.NoUri'),
+ ('py:class', 'sphinx.roles.XRefRole'),
+ ('py:class', 'sphinx.search.SearchLanguage'),
+ ('py:class', 'sphinx.theming.Theme'),
+ ('py:class', 'sphinxcontrib.websupport.errors.DocumentNotFoundError'),
+ ('py:class', 'sphinxcontrib.websupport.errors.UserNotAuthorizedError'),
+ ('py:exc', 'docutils.nodes.SkipNode'),
+ ('py:exc', 'sphinx.environment.NoUri'),
+ ('py:func', 'setup'),
+ ('py:func', 'sphinx.util.nodes.nested_parse_with_titles'),
+ # Error in sphinxcontrib.websupport.core::WebSupport.add_comment
+ ('py:meth', 'get_comments'),
+ ('py:mod', 'autodoc'),
+ ('py:mod', 'docutils.nodes'),
+ ('py:mod', 'docutils.parsers.rst.directives'),
+ ('py:mod', 'sphinx.ext'),
+ ('py:obj', 'sphinx.util.relative_uri'),
+ ('rst:role', 'c:any'),
+ ('std:confval', 'autodoc_inherit_docstring'),
+ ('std:confval', 'automodule_skip_lines'),
+ ('std:confval', 'autossummary_imported_members'),
+ ('std:confval', 'gettext_language_team'),
+ ('std:confval', 'gettext_last_translator'),
+ ('std:confval', 'globaltoc_collapse'),
+ ('std:confval', 'globaltoc_includehidden'),
+ ('std:confval', 'globaltoc_maxdepth'),
+}
+
+
+# -- Extension interface -------------------------------------------------------
+
+from sphinx import addnodes # noqa: E402
+
+event_sig_re = re.compile(r'([a-zA-Z-]+)\s*\((.*)\)')
+
+
+def parse_event(env, sig, signode):
+ m = event_sig_re.match(sig)
+ if not m:
+ signode += addnodes.desc_name(sig, sig)
+ return sig
+ name, args = m.groups()
+ signode += addnodes.desc_name(name, name)
+ plist = addnodes.desc_parameterlist()
+ for arg in args.split(','):
+ arg = arg.strip()
+ plist += addnodes.desc_parameter(arg, arg)
+ signode += plist
+ return name
+
+
+def linkify_issues_in_changelog(app, docname, source):
+ """ Linkify issue references like #123 in changelog to GitHub. """
+
+ if docname == 'changes':
+ changelog_path = os.path.join(os.path.dirname(__file__), "../CHANGES")
+ # this path trickery is needed because this script can
+ # be invoked with different working directories:
+ # * running make in docs/
+ # * running tox -e docs in the repo root dir
+
+ with open(changelog_path, encoding="utf-8") as f:
+ changelog = f.read()
+
+ def linkify(match):
+ url = 'https://github.com/sphinx-doc/sphinx/issues/' + match[1]
+ return f'`{match[0]} <{url}>`_'
+
+ linkified_changelog = re.sub(r'(?:PR)?#([0-9]+)\b', linkify, changelog)
+
+ source[0] = source[0].replace('.. include:: ../CHANGES', linkified_changelog)
+
+
+def setup(app):
+ from sphinx.ext.autodoc import cut_lines
+ from sphinx.util.docfields import GroupedField
+ app.connect('autodoc-process-docstring', cut_lines(4, what=['module']))
+ app.connect('source-read', linkify_issues_in_changelog)
+ app.add_object_type('confval', 'confval',
+ objname='configuration value',
+ indextemplate='pair: %s; configuration value')
+ fdesc = GroupedField('parameter', label='Parameters',
+ names=['param'], can_collapse=True)
+ app.add_object_type('event', 'event', 'pair: %s; event', parse_event,
+ doc_field_types=[fdesc])