|  | # Copyright 2020 The Pigweed 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 | 
|  | # | 
|  | #     https://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. | 
|  | """Examples project Sphinx configuration.""" | 
|  |  | 
|  | from datetime import date | 
|  | import sphinx | 
|  |  | 
|  | # The suffix of source filenames. | 
|  | source_suffix = ['.rst'] | 
|  |  | 
|  | # The master toctree document.  # inclusive-language: ignore | 
|  | master_doc = 'index' | 
|  |  | 
|  | # General information about the project. | 
|  | project = 'Pigweed Examples' | 
|  | copyright = f'{date.today().year} The Pigweed Authors'  # pylint: disable=redefined-builtin | 
|  |  | 
|  | # 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 short X.Y version. | 
|  | version = '0.1' | 
|  | # The full version, including alpha/beta/rc tags. | 
|  | release = '0.1.0' | 
|  |  | 
|  | # The class of the Pygments (syntax highlighting) style to use. | 
|  | pygments_style = 'pw_console.pigweed_code_style.PigweedCodeLightStyle' | 
|  | pygments_dark_style = 'pw_console.pigweed_code_style.PigweedCodeStyle' | 
|  |  | 
|  | extensions = [ | 
|  | 'pw_docgen.sphinx.google_analytics',  # Enables optional Google Analytics | 
|  | 'sphinx.ext.autodoc',  # Automatic documentation for Python code | 
|  | 'sphinx.ext.napoleon',  # Parses Google-style docstrings | 
|  | 'sphinxarg.ext',  # Automatic documentation of Python argparse | 
|  | 'sphinxcontrib.mermaid', | 
|  | 'sphinx_design', | 
|  | ] | 
|  |  | 
|  | # When a user clicks the copy-to-clipboard button the `$ ` prompt should not be | 
|  | # copied: https://sphinx-copybutton.readthedocs.io/en/latest/use.html | 
|  | copybutton_prompt_text = "$ " | 
|  |  | 
|  | _DIAG_HTML_IMAGE_FORMAT = 'SVG' | 
|  | blockdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT | 
|  | nwdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT | 
|  | seqdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT | 
|  | actdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT | 
|  | rackdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT | 
|  | packetdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT | 
|  |  | 
|  | # Tell m2r to parse links to .md files and add them to the build. | 
|  | m2r_parse_relative_links = True | 
|  |  | 
|  | # The theme to use for HTML and HTML Help pages.  See the documentation for | 
|  | # a list of builtin themes. | 
|  | html_theme = 'furo' | 
|  |  | 
|  | # The name for this set of Sphinx documents.  If None, it defaults to | 
|  | # "<project> v<release> documentation". | 
|  | html_title = 'Pigweed Examples' | 
|  |  | 
|  | # If true, SmartyPants will be used to convert quotes and dashes to | 
|  | # typographically correct entities. | 
|  | html_use_smartypants = True | 
|  |  | 
|  | # If false, no module index is generated. | 
|  | html_domain_indices = True | 
|  |  | 
|  | html_favicon = 'docs/_static/pw_logo.ico' | 
|  | html_logo = 'docs/_static/pw_logo.svg' | 
|  |  | 
|  | # If false, no index is generated. | 
|  | html_use_index = True | 
|  |  | 
|  | # If true, the index is split into individual pages for each letter. | 
|  | html_split_index = False | 
|  |  | 
|  | # If true, links to the reST sources are added to the pages. | 
|  | html_show_sourcelink = False | 
|  |  | 
|  | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. | 
|  | html_show_sphinx = False | 
|  |  | 
|  | # These folders are copied to the documentation's HTML output | 
|  | html_static_path = ['docs/_static'] | 
|  |  | 
|  | # These paths are either relative to html_static_path | 
|  | # or fully qualified paths (eg. https://...) | 
|  | html_css_files = [ | 
|  | # Needed for Inconsolata font. | 
|  | 'https://fonts.googleapis.com/css2?family=Inconsolata&display=swap', | 
|  | # FontAwesome for mermaid and sphinx-design | 
|  | "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css", | 
|  | ] | 
|  |  | 
|  | html_js_files = [] | 
|  |  | 
|  | # Furo color theme variables based on: | 
|  | # https://github.com/pradyunsg/furo/blob/main/src/furo/assets/styles/variables/_colors.scss | 
|  | # Colors with unchanged defaults are left commented out for easy updating. | 
|  | html_theme_options = { | 
|  | 'light_css_variables': { | 
|  | # Make the logo text more amaranth-like | 
|  | 'color-sidebar-brand-text': '#b529aa', | 
|  | 'color-sidebar-search-border': '#b529aa', | 
|  | 'color-sidebar-link-text--top-level': '#85004d', | 
|  | 'color-sidebar-link-text': '#016074', | 
|  | 'color-sidebar-item-background--current': '#f0f0f0', | 
|  | 'color-sidebar-item-background--hover': '#ffe2f3', | 
|  | 'color-sidebar-item-expander-background--hover': '#ffe2f3', | 
|  | # Function signature colors | 
|  | 'color-api-function-border': '#cccccc', | 
|  | 'color-api-function-background': '#f0f0f0', | 
|  | 'color-api-class-background': '#e7f2fa', | 
|  | 'color-api-class-foreground': '#2980b9', | 
|  | 'color-api-class-border': '#6ab0de', | 
|  | # Namespace:: | 
|  | 'color-api-pre-name': '#2980b9', | 
|  | # Function name | 
|  | 'color-api-name': '#2980b9', | 
|  | 'color-inline-code-background': '#fafafa', | 
|  | 'color-inline-code-border': '#cccccc', | 
|  | 'color-text-selection-background': '#1d5fad', | 
|  | 'color-text-selection-foreground': '#ffffff', | 
|  | # Background color for focused headings. | 
|  | 'color-highlight-on-target': '#ffffcc', | 
|  | # Background color emphasized code lines. | 
|  | 'color-code-hll-background': '#ffffcc', | 
|  | 'color-section-button': '#b529aa', | 
|  | 'color-section-button-hover': '#fb71fe', | 
|  | }, | 
|  | 'dark_css_variables': { | 
|  | 'color-sidebar-brand-text': '#fb71fe', | 
|  | 'color-sidebar-search-border': '#e815a5', | 
|  | 'color-sidebar-link-text--top-level': '#ff79c6', | 
|  | 'color-sidebar-link-text': '#8be9fd', | 
|  | 'color-sidebar-item-background--current': '#2a3037', | 
|  | 'color-sidebar-item-background--hover': '#30353d', | 
|  | 'color-sidebar-item-expander-background--hover': '#4c333f', | 
|  | # Function signature colors | 
|  | 'color-api-function-border': '#575757', | 
|  | 'color-api-function-background': '#2b2b2b', | 
|  | 'color-api-class-background': '#222c35', | 
|  | 'color-api-class-foreground': '#87c1e5', | 
|  | 'color-api-class-border': '#5288be', | 
|  | # Namespace:: | 
|  | 'color-api-pre-name': '#87c1e5', | 
|  | # Function name | 
|  | 'color-api-name': '#87c1e5', | 
|  | 'color-code-background': '#2d333b', | 
|  | 'color-inline-code-background': '#2d333b', | 
|  | 'color-inline-code-border': '#575757', | 
|  | 'color-text-selection-background': '#2674bf', | 
|  | 'color-text-selection-foreground': '#ffffff', | 
|  | # Background color for focused headings. | 
|  | 'color-highlight-on-target': '#ffc55140', | 
|  | # Background color emphasized code lines. | 
|  | 'color-code-hll-background': '#ffc55140', | 
|  | 'color-section-button': '#fb71fe', | 
|  | 'color-section-button-hover': '#b529aa', | 
|  | # The following color changes modify Furo's default dark mode colors for | 
|  | # slightly less high-contrast. | 
|  | # Base Colors | 
|  | # 'color-foreground-primary': '#ffffffcc', # Main text and headings | 
|  | # 'color-foreground-secondary': '#9ca0a5', # Secondary text | 
|  | # 'color-foreground-muted': '#81868d', # Muted text | 
|  | # 'color-foreground-border': '#666666', # Content borders | 
|  | 'color-background-primary': '#1c2128',  # Content | 
|  | 'color-background-secondary': '#22272e',  # Navigation and TOC | 
|  | 'color-background-hover': '#30353dff',  # Navigation-item hover | 
|  | 'color-background-hover--transparent': '#30353d00', | 
|  | 'color-background-border': '#444c56',  # UI borders | 
|  | 'color-background-item': '#373e47',  # "background" items (eg: copybutton) | 
|  | # Announcements | 
|  | # 'color-announcement-background': '#000000dd', | 
|  | # 'color-announcement-text': '#eeebee', | 
|  | # Brand colors | 
|  | # 'color-brand-primary': '#2b8cee', | 
|  | # 'color-brand-content': '#368ce2', | 
|  | # Highlighted text (search) | 
|  | # 'color-highlighted-background': '#083563', | 
|  | # GUI Labels | 
|  | # 'color-guilabel-background': '#08356380', | 
|  | # 'color-guilabel-border': '#13395f80', | 
|  | # API documentation | 
|  | # 'color-api-keyword': 'var(--color-foreground-secondary)', | 
|  | # 'color-highlight-on-target': '#333300', | 
|  | # Admonitions | 
|  | 'color-admonition-background': 'var(--color-background-secondary)', | 
|  | # Cards | 
|  | 'color-card-border': 'var(--color-background-border)', | 
|  | 'color-card-background': 'var(--color-background-secondary)', | 
|  | # 'color-card-marginals-background': 'var(--color-background-hover)', | 
|  | # Sphinx Design cards | 
|  | 'sd-color-card-background': 'var(--color-background-secondary)', | 
|  | 'sd-color-card-border': 'var(--color-background-border)', | 
|  | }, | 
|  | } | 
|  |  | 
|  | mermaid_init_js = ''' | 
|  | mermaid.initialize({ | 
|  | startOnLoad: true, | 
|  | // sequenceDiagram Note text alignment | 
|  | noteAlign: "left", | 
|  | // Set mermaid theme to the current furo theme | 
|  | theme: localStorage.getItem("theme") == "dark" ? "dark" : "default" | 
|  | }); | 
|  | ''' | 
|  |  | 
|  | # Output file base name for HTML help builder. | 
|  | htmlhelp_basename = 'Pigweeddoc' | 
|  |  | 
|  | # One entry per manual page. List of tuples | 
|  | # (source start file, name, description, authors, manual section). | 
|  | man_pages = [('index', 'pigweed', 'Pigweed', ['Google'], 1)] | 
|  |  | 
|  | # Grouping the document tree into Texinfo files. List of tuples | 
|  | # (source start file, target name, title, author, | 
|  | #  dir menu entry, description, category) | 
|  | texinfo_documents = [ | 
|  | ( | 
|  | 'index', | 
|  | 'Pigweed', | 
|  | 'Pigweed', | 
|  | 'Google', | 
|  | 'Pigweed', | 
|  | 'Firmware framework', | 
|  | 'Miscellaneous', | 
|  | ), | 
|  | ] | 
|  |  | 
|  | templates_path = ['docs/layout'] | 
|  | exclude_patterns = ['docs/templates/**'] | 
|  |  | 
|  | breathe_projects = { | 
|  | # Assuming doxygen output is at out/docs/doxygen/ | 
|  | # This dir should be relative to out/docs/gen/docs/pw_docgen_tree/ | 
|  | "Pigweed": "./../../../doxygen/xml/", | 
|  | } | 
|  |  | 
|  | breathe_default_project = "Pigweed" | 
|  |  | 
|  | breathe_debug_trace_directives = True | 
|  |  | 
|  | # Treat these as valid attributes in function signatures. | 
|  | cpp_id_attributes = [ | 
|  | "PW_EXTERN_C_START", | 
|  | "PW_NO_LOCK_SAFETY_ANALYSIS", | 
|  | ] | 
|  | # This allows directives like this to work: | 
|  | # .. cpp:function:: inline bool try_lock_for( | 
|  | #     chrono::SystemClock::duration timeout) PW_EXCLUSIVE_TRYLOCK_FUNCTION(true) | 
|  | cpp_paren_attributes = [ | 
|  | "PW_EXCLUSIVE_TRYLOCK_FUNCTION", | 
|  | "PW_EXCLUSIVE_LOCK_FUNCTION", | 
|  | "PW_UNLOCK_FUNCTION", | 
|  | "PW_NO_SANITIZE", | 
|  | ] | 
|  | # inclusive-language: disable | 
|  | # Info on cpp_id_attributes and cpp_paren_attributes | 
|  | # https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-cpp_id_attributes | 
|  | # inclusive-language: enable | 
|  |  | 
|  | # Disable Python type hints | 
|  | # autodoc_typehints = 'none' | 
|  |  | 
|  |  | 
|  | def do_not_skip_init(app, what, name, obj, would_skip, options): | 
|  | if name == "__init__": | 
|  | return False  # never skip __init__ functions | 
|  | return would_skip | 
|  |  | 
|  |  | 
|  | # Problem: CSS files aren't copied after modifying them. Solution: | 
|  | # https://github.com/sphinx-doc/sphinx/issues/2090#issuecomment-572902572 | 
|  | def env_get_outdated(app, env, added, changed, removed): | 
|  | return ['index'] | 
|  |  | 
|  |  | 
|  | def setup(app): | 
|  | app.add_css_file('css/pigweed.css') | 
|  | app.connect('env-get-outdated', env_get_outdated) | 
|  | app.connect("autodoc-skip-member", do_not_skip_init) |