summaryrefslogtreecommitdiffstats
path: root/docs/conf.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--docs/conf.py150
1 files changed, 150 insertions, 0 deletions
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000..786eff0
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,150 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+from glob import glob
+import os
+
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+
+# -- Project information -----------------------------------------------------
+
+project = "markdown-it-py"
+copyright = "2020, executable book project"
+author = "executable book project"
+
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+ "sphinx.ext.autodoc",
+ "sphinx.ext.viewcode",
+ "sphinx.ext.intersphinx",
+ "myst_parser",
+ "sphinx_copybutton",
+ "sphinx_design",
+]
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
+
+nitpicky = True
+nitpick_ignore = [
+ ("py:class", "Match"),
+ ("py:class", "Path"),
+ ("py:class", "x in the interval [0, 1)."),
+ ("py:class", "markdown_it.helpers.parse_link_destination._Result"),
+ ("py:class", "markdown_it.helpers.parse_link_title._Result"),
+ ("py:class", "MarkdownIt"),
+ ("py:class", "RuleFunc"),
+ ("py:class", "_NodeType"),
+ ("py:class", "typing_extensions.Protocol"),
+]
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+#
+html_title = "markdown-it-py"
+html_theme = "sphinx_book_theme"
+html_theme_options = {
+ "use_edit_page_button": True,
+ "repository_url": "https://github.com/executablebooks/markdown-it-py",
+ "repository_branch": "master",
+ "path_to_docs": "docs",
+}
+html_static_path = ["_static"]
+html_css_files = ["custom.css"]
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+# html_static_path = ["_static"]
+
+
+intersphinx_mapping = {
+ "python": ("https://docs.python.org/3.7", None),
+ "mdit-py-plugins": ("https://mdit-py-plugins.readthedocs.io/en/latest/", None),
+}
+
+
+def run_apidoc(app):
+ """generate apidoc
+
+ See: https://github.com/rtfd/readthedocs.org/issues/1139
+ """
+ import os
+ import shutil
+
+ import sphinx
+ from sphinx.ext import apidoc
+
+ logger = sphinx.util.logging.getLogger(__name__)
+ logger.info("running apidoc")
+ # get correct paths
+ this_folder = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
+ api_folder = os.path.join(this_folder, "api")
+ module_path = os.path.normpath(os.path.join(this_folder, "../"))
+ ignore_paths = ["../profiler.py", "../conftest.py", "../tests", "../benchmarking"]
+ ignore_paths = [
+ os.path.normpath(os.path.join(this_folder, p)) for p in ignore_paths
+ ]
+ # functions from these modules are all imported in the __init__.py with __all__
+ for rule in ("block", "core", "inline"):
+ for path in glob(
+ os.path.normpath(
+ os.path.join(this_folder, f"../markdown_it/rules_{rule}/*.py")
+ )
+ ):
+ if os.path.basename(path) not in ("__init__.py", f"state_{rule}.py"):
+ ignore_paths.append(path)
+
+ if os.path.exists(api_folder):
+ shutil.rmtree(api_folder)
+ os.mkdir(api_folder)
+
+ argv = ["-M", "--separate", "-o", api_folder, module_path] + ignore_paths
+
+ apidoc.OPTIONS.append("ignore-module-all")
+ apidoc.main(argv)
+
+ # we don't use this
+ if os.path.exists(os.path.join(api_folder, "modules.rst")):
+ os.remove(os.path.join(api_folder, "modules.rst"))
+
+
+def setup(app):
+ """Add functions to the Sphinx setup."""
+ if os.environ.get("SKIP_APIDOC", None) is None:
+ app.connect("builder-inited", run_apidoc)
+
+ from sphinx.directives.code import CodeBlock
+
+ class CodeCell(CodeBlock):
+ """Custom code block directive."""
+
+ def run(self):
+ """Run the directive."""
+ self.options["class"] = ["code-cell"]
+ return super().run()
+
+ # note, these could be run by myst-nb,
+ # but currently this causes a circular dependency issue
+ app.add_directive("code-cell", CodeCell)