# -*- coding: utf-8 -*-
#
# Configuration file for the Sphinx documentation builder.
#
# This file does only contain a selection of the most common options. For a
# full list see the documentation:
# http://www.sphinx-doc.org/en/master/config

# -- 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 = u'Cogent'
copyright = u'2020, CSIRO\'s Data61'
author = u'The Cogent Team'

# The short X.Y version
version = u'2.9'
# The full version, including alpha/beta/rc tags
release = u'2.9'


# -- General configuration ---------------------------------------------------

# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'

# 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.todo',
    'sphinx.ext.mathjax',
    'sphinx.ext.githubpages',
    'sphinx.ext.graphviz',
]

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'

# The master toctree document.
master_doc = 'index'

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None

# 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']

# Add the magic `Cogent' small-capitalisation.
rst_prolog = '''
.. role:: raw-html(raw)
   :format: html
.. role:: raw-latex(raw)
   :format: latex

.. |cogent| replace:: \
:raw-latex:`\\textsc{Cogent}`\\ \
:raw-html:`<span style="font-variant:small-caps">Cogent</span>`
'''

# The name of the Pygments (syntax highlighting) style to use.
pygments_style = None

highlight_language = "haskell"

# -- 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"
html_theme_path = ["_themes", ]

# Theme options are theme-specific and customize the look and feel of a theme
# further.  For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}

# 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']

# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# The default sidebars (for documents that don't match any pattern) are
# defined by theme itself.  Builtin themes are using these templates by
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
# 'searchbox.html']``.
#
# html_sidebars = {}

html_logo = "../cogent/static/logo.png"

html_theme_options = {
    'logo_only': False,
    'display_version': True,
    'prev_next_buttons_location': 'both',
    'style_external_links': False,
    # Toc options
    'collapse_navigation': False,
    'sticky_navigation': True,
    'navigation_depth': 4,
    'titles_only': False
}

html_context = {
    "display_github": True, # Integrate GitHub
    "github_user": "NICTA", # Username
    "github_repo": "cogent", # Repo name
    "github_version": "master", # Version
    "conf_py_path": "/docs/", # Path in the checkout to the docs root
}


# -- Options for HTMLHelp output ---------------------------------------------

# Output file base name for HTML help builder.
htmlhelp_basename = 'Cogentdoc'


# -- Options for LaTeX output ------------------------------------------------

latex_engine = 'lualatex'
latex_elements = {
    'papersize': 'a4paper',
    'pointsize': '12pt',
    'fontpkg':   '''
\\usepackage{iftex}
% Sans-serifs, in Libertinus; serifs, in Crimson; monospace, in Latin Modern.
% Order matters: both Latin Modern and Libertinus replace rm, sf, tt,
% and we only want tt and sf, respectively.
%
% Read The Docs uses an ancient TeX Live which ships without Libertinus,
% and uses pdfLaTeX to render its output; so fall back to lmss.
\\usepackage{lmodern}
\\ifTUTeX
  \\usepackage{libertinus}
\\else
  % \\sfdefault is lmss.
\\fi

\\usepackage{crimson}
\\renewcommand{\\ttdefault}{lmtt}

\\usepackage{sectsty}
\\allsectionsfont{\\normalfont\\sffamily\\bfseries}
''',
    'fncychap':  '',
}


# -- Options for manual page output ------------------------------------------

# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
    (master_doc, 'cogent', u'Cogent Documentation',
     [author], 1)
]


# -- Options for Texinfo output ----------------------------------------------

# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
#  dir menu entry, description, category)
texinfo_documents = [
    (master_doc, 'Cogent', u'Cogent Documentation',
     author, 'Cogent', 'One line description of project.',
     'Miscellaneous'),
]


# -- Options for Epub output -------------------------------------------------

# Bibliographic Dublin Core info.
epub_title = project

# The unique identifier of the text. This can be a ISBN number
# or the project homepage.
#
# epub_identifier = ''

# A unique identification for the text.
#
# epub_uid = ''

# A list of files that should not be packed into the epub file.
epub_exclude_files = ['search.html']


# -- Extension configuration -------------------------------------------------

# TODO: add an extension (an customised role) to allow hyperlinks to github files.
# c.f. https://docs.espressif.com/projects/esp-idf/en/latest/contribute/documenting-code.html#linking-examples 

# -- Options for todo extension ----------------------------------------------

# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True
