text: # 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.
  #
  # import os
  # import sys
  # sys.path.insert(0, os.path.abspath('.'))
  
  
  # -- Project information -----------------------------------------------------
  
  project = 'reactor-cpp'
  copyright = '2020, Christian Menard'
  author = 'Christian Menard'
  
  
  # -- 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 = [
      "breathe",
      "exhale",
      "sphinx_rtd_theme",
      "sphinx.ext.todo",
      "sphinx.ext.extlinks",
  ]
  
  # Add any paths that contain templates here, relative to this directory.
  templates_path = ['_templates']
  
  # 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 = []
  
  
  # -- Options for HTML output -------------------------------------------------
  
  # The theme to use for HTML and HTML Help pages.  See the documentation for
  # a list of builtin themes.
  #
  html_theme = 'sphinx_rtd_theme'
  
  # 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']
  
  # Breathe Configuration
  breathe_projects = {"reactor-cpp": "../doxygen/xml"}
  breathe_default_project = "reactor-cpp"
  
  
  def specificationsForKind(kind):
      '''
      For a given input ``kind``, return the list of reStructuredText
      specifications for the associated Breathe directive.
      '''
      # Change the defaults for .. doxygenclass:: and .. doxygenstruct::
      if kind == "class" or kind == "struct":
          return [
            ":members:",
            ":protected-members:",
            ":private-members:",
            ":undoc-members:"
          ]
      # An empty list signals to Exhale to use the defaults
      else:
          return []
  
  
  # Exhale Configuration
  from exhale import utils
  exhale_args = {
      # These arguments are required
      "containmentFolder":     "./api",
      "rootFileName":          "library_root.rst",
      "rootFileTitle":         "Library API",
      "doxygenStripFromPath":  "..",
      # Suggested optional arguments
      "createTreeView":        True,
      # override breathe defaults
      "customSpecificationsMapping": utils.makeCustomSpecificationsMapping(
          specificationsForKind),
  }
  
  # Tell sphinx what the primary language being documented is.
  primary_domain = 'cpp'
  
  # Tell sphinx what the pygments highlight language should be.
  highlight_language = 'cpp'
  
  # configure theme
  html_theme_options = {
      # Toc options
      'collapse_navigation': False,
      'sticky_navigation': True,
      'navigation_depth': 4,
      'includehidden': True,
      'titles_only': False
  }
  
  # show todo notes
  todo_include_todos = True
  
  # configure external links
  extlinks = {
      'std-memory': ('https://en.cppreference.com/w/cpp/memory/%s', 'std::'),
  }
  