text: #!/usr/bin/env python3
  # -*- coding: utf-8 -*-
  #
  # Copyright 2020-2022 F4PGA Authors
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  #
  # SPDX-License-Identifier: Apache-2.0
  
  # Project X-Ray documentation build configuration file, created by
  # sphinx-quickstart on Mon Feb  5 11:04:37 2018.
  #
  # This file is execfile()d with the current directory set to its
  # containing dir.
  #
  # Note that not all possible configuration values are present in this
  # autogenerated file.
  #
  # All configuration values have a default; values that are commented out
  # serve to show the default.
  
  import re
  
  # Markdown support
  import recommonmark
  
  # 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('.'))
  from markdown_code_symlinks import LinkParser, MarkdownSymlinksDomain
  
  # -- 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.autodoc',
      'sphinx.ext.autosummary',
      'sphinx.ext.doctest',
      'sphinx.ext.imgmath',
      'sphinx.ext.napoleon',
      'sphinx.ext.todo',
      'sphinx_markdown_tables',
  ]
  
  # 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_parsers = {
      '.md': 'markdown_code_symlinks.LinkParser',
  }
  
  # The master toctree document.
  master_doc = 'index'
  
  # General information about the project.
  project = u'Project X-Ray'
  copyright = u'2018, SymbiFlow Team'
  author = u'SymbiFlow Team'
  
  # Enable github links when not on readthedocs
  on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
  if not on_rtd:
      html_context = {
          "display_github": True,  # Integrate GitHub
          "github_user": "symbiflow",  # Username
          "github_repo": "prjxray",  # Repo name
          "github_version": "master",  # Version
          "conf_py_path": "/doc/",
      }
  else:
      docs_dir = os.path.abspath(os.path.dirname(__file__))
      print("Docs dir is:", docs_dir)
      import subprocess
      subprocess.call('git fetch origin --unshallow', cwd=docs_dir, shell=True)
      subprocess.check_call('git fetch origin --tags', cwd=docs_dir, shell=True)
      subprocess.check_call('make links', cwd=docs_dir, shell=True)
  
  # The version info for the project you're documenting, acts as replacement for
  # |version| and |release|, also used in various other places throughout the
  # built documents.
  #
  # The full version, including alpha/beta/rc tags.
  release = re.sub('^v', '', os.popen('git describe ').read().strip())
  # The short X.Y version.
  version = release
  
  # 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 patterns also effect to html_static_path and html_extra_path
  exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
  
  # The name of the Pygments (syntax highlighting) style to use.
  pygments_style = 'default'
  
  # If true, `todo` and `todoList` produce output, else they produce nothing.
  todo_include_todos = True
  
  # -- 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_materialdesign_theme'
  
  # 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 = {
      # Specify a list of menu in Header.
      # Tuples forms:
      #  ('Name', 'external url or path of pages in the document', boolean, 'icon name')
      #
      # Third argument:
      # True indicates an external link.
      # False indicates path of pages in the document.
      #
      # Fourth argument:
      # Specify the icon name.
      # For details see link.
      # https://material.io/icons/
      'header_links': [('Home', 'index', False, 'home'),
                       ("GitHub", "https://github.com/SymbiFlow/prjxray", True,
                        'link')],
  
      # Customize css colors.
      # For details see link.
      # https://getmdl.io/customize/index.html
      #
      # Values: amber, blue, brown, cyan deep_orange, deep_purple, green, grey, indigo, light_blue,
      #         light_green, lime, orange, pink, purple, red, teal, yellow(Default: indigo)
      'primary_color':
      'deep_purple',
      # Values: Same as primary_color. (Default: pink)
      'accent_color':
      'purple',
  
      # Customize layout.
      # For details see link.
      # https://getmdl.io/components/index.html#layout-section
      'fixed_drawer':
      True,
      'fixed_header':
      True,
      'header_waterfall':
      True,
      'header_scroll':
      False,
  
      # Render title in header.
      # Values: True, False (Default: False)
      'show_header_title':
      False,
      # Render title in drawer.
      # Values: True, False (Default: True)
      'show_drawer_title':
      True,
      # Render footer.
      # Values: True, False (Default: True)
      'show_footer':
      True
  }
  
  # 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.
  #
  # This is required for the alabaster theme
  # refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
  html_sidebars = {
      '**': [
          'relations.html',  # needs 'show_related': True theme option to display
          'searchbox.html',
      ]
  }
  
  # -- Options for HTMLHelp output ------------------------------------------
  
  # Output file base name for HTML help builder.
  htmlhelp_basename = 'prjxray'
  
  # -- Options for LaTeX output ---------------------------------------------
  
  latex_elements = {
      # The paper size ('letterpaper' or 'a4paper').
      #
      # 'papersize': 'letterpaper',
  
      # The font size ('10pt', '11pt' or '12pt').
      #
      # 'pointsize': '10pt',
  
      # Additional stuff for the LaTeX preamble.
      #
      # 'preamble': '',
  
      # Latex figure (float) alignment
      #
      # 'figure_align': 'htbp',
  }
  
  # Grouping the document tree into LaTeX files. List of tuples
  # (source start file, target name, title,
  #  author, documentclass [howto, manual, or own class]).
  latex_documents = [
      (master_doc, 'ProjectX-Ray.tex', u'Project X-Ray Documentation',
       u'SymbiFlow Team', 'manual'),
  ]
  
  # -- 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, 'projectx-ray', u'Project X-Ray 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, 'ProjectX-Ray', u'Project X-Ray Documentation', author,
       'ProjectX-Ray', 'One line description of project.', 'Miscellaneous'),
  ]
  
  # Example configuration for intersphinx: refer to the Python standard library.
  intersphinx_mapping = {'https://docs.python.org/': None}
  
  
  def setup(app):
      github_code_repo = 'https://github.com/SymbiFlow/prjxray/'
      github_code_branch = 'blob/master/'
  
      docs_root_dir = os.path.realpath(os.path.dirname(__file__))
      code_root_dir = os.path.realpath(os.path.join(docs_root_dir, ".."))
  
      MarkdownSymlinksDomain.init_domain(github_code_repo, github_code_branch,
                                         docs_root_dir, code_root_dir)
      MarkdownSymlinksDomain.find_links()
      app.add_domain(MarkdownSymlinksDomain)
      app.add_config_value('recommonmark_config', {
          'github_code_repo': github_code_repo,
      }, True)
  