From bf6f7f8d8e1960af8f27a5d4e654f97cd4e07f71 Mon Sep 17 00:00:00 2001 From: Joel Lefkowitz Date: Wed, 24 Apr 2024 01:10:32 +0100 Subject: [PATCH] Add sphinx apidoc and return includes for conan --- .bumpversion.cfg | 6 +- .cspell.json | 18 +- Doxyfile | 43 - docs/sphinx/conf.py | 75 ++ docs/sphinx/index.rst | 7 + docs/sphinx/scripts.js | 13 + docs/sphinx/styles.css | 50 + docs/styles.css | 2761 ---------------------------------------- pyproject.toml | 21 +- src/build.py | 18 +- src/environment.py | 34 +- 11 files changed, 213 insertions(+), 2833 deletions(-) delete mode 100644 Doxyfile create mode 100644 docs/sphinx/conf.py create mode 100644 docs/sphinx/index.rst create mode 100644 docs/sphinx/scripts.js create mode 100644 docs/sphinx/styles.css delete mode 100644 docs/styles.css diff --git a/.bumpversion.cfg b/.bumpversion.cfg index f9d5f4a..baf44ca 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -7,6 +7,6 @@ current_version = 0.9.0 search = version = "{current_version}" replace = version = "{new_version}" -[bumpversion:file:DOXYFILE] -search = PROJECT_NUMBER = {current_version} -replace = PROJECT_NUMBER = {new_version} +[bumpversion:file:docs/sphinx/conf.py] +search = version = "{current_version}" +replace = version = "{new_version}" diff --git a/.cspell.json b/.cspell.json index a65f547..dc8f945 100644 --- a/.cspell.json +++ b/.cspell.json @@ -27,23 +27,35 @@ ], "language": "en", "words": [ + "autoapi", "autoflake", + "autosummary", "bumpversion", "cobertura", "codacy", "conandeps", "cppcheck", + "cppdefines", + "cpppath", + "cxxcomstr", "cxxflags", + "debugpy", "doctest", "doxyfile", + "emojize", + "furo", "giphy", + "grotesk", "gtest", "isort", "lefkowitz", + "linkcomstr", "mainpage", + "matplotlib", "mdfile", "miniscons", "mypy", + "opengraph", "psutil", "pycache", "pylint", @@ -54,11 +66,15 @@ "scons", "sdist", "searchengine", + "searchindex", + "sphinxext", "stylesheet", + "toctree", "treeview", "trufflehog", - "debugpy", + "undoc", "venv", + "walkmate", "werror" ] } diff --git a/Doxyfile b/Doxyfile deleted file mode 100644 index 2acae95..0000000 --- a/Doxyfile +++ /dev/null @@ -1,43 +0,0 @@ -PROJECT_NAME = Miniscons -PROJECT_NUMBER = 0.9.0 -PROJECT_BRIEF = SCons builders. - -INPUT = src docs README.md -USE_MDFILE_AS_MAINPAGE = README.md -RECURSIVE = YES -FILE_PATTERNS = *.py *.md -EXCLUDE_PATTERNS = test_.py -IMAGE_PATH = docs/images - -HTML_EXTRA_STYLESHEET = docs/styles.css -HTML_OUTPUT = dist -OUTPUT_DIRECTORY = docs - -EXTERNAL_PAGES = NO -EXTRACT_ALL = YES -EXTRACT_LOCAL_CLASSES = YES -GENERATE_HTML = YES -GENERATE_LATEX = NO -GENERATE_LEGEND = NO -GENERATE_TREEVIEW = YES -SHOW_FILES = NO - -CLASS_GRAPH = YES -COLLABORATION_GRAPH = YES -DISABLE_INDEX = YES -FULL_SIDEBAR = YES -GRAPHICAL_HIERARCHY = YES -MARKDOWN_SUPPORT = YES -SEARCH_INCLUDES = YES -SEARCHENGINE = YES -TOC_INCLUDE_HEADINGS = 1 - -DOT_CLEANUP = YES -DOT_GRAPH_MAX_NODES = 50 -DOT_IMAGE_FORMAT = png -DOT_MULTI_TARGETS = NO -DOT_NUM_THREADS = 0 -DOT_UML_DETAILS = NO -DOT_WRAP_THRESHOLD = 17 -HAVE_DOT = YES -MAX_DOT_GRAPH_DEPTH = 0 diff --git a/docs/sphinx/conf.py b/docs/sphinx/conf.py new file mode 100644 index 0000000..07c98e6 --- /dev/null +++ b/docs/sphinx/conf.py @@ -0,0 +1,75 @@ +import re +import shutil +from cgitb import html +from datetime import date +from glob import glob +from walkmate import tree + +project = "Miniscons" +version = "0.9.0" + +package = "miniscons" +primary = "#4165FF" +secondary = "#914FF5" + +project_copyright = f"{date.today().year} Joel Lefkowitz" + +extensions = [ + "autoapi.extension", + "myst_parser", + "sphinxext.opengraph", +] + +autoapi_dirs = ["../../src"] +autoapi_options = [ + "members", + "undoc-members", + "private-members", + "show-inheritance", +] + +myst_all_links_external = True + +html_theme = "furo" +html_title = project +html_static_path = [""] +html_js_files = ["scripts.js"] +html_css_files = ["styles.css"] +html_theme_options = { + "font-stack": "Space Grotesk, sans-serif", + "font-stack--monospace": "CQ Mono, monospace", + "light_css_variables": { + "color-brand-content": primary, + "color-problematic": primary, + "color-brand-primary": secondary, + "color-highlight-on-target": "#E0E0E0", + }, + "dark_css_variables": { + "color-problematic": primary, + "color-brand-content": primary, + "color-brand-primary": secondary, + "color-highlight-on-target": "#202020", + }, +} + + +def build(app, build): + + shutil.copytree("docs/images", "docs/dist/docs/images", dirs_exist_ok=True) + shutil.move("docs/dist/autoapi/src", f"docs/dist/autoapi/{package}") + + pattern = re.compile(r"src(?!\=)") + + for file in tree("docs/dist", r"\.html") + ["docs/dist/searchindex.js"]: + with open(file, "r") as stream: + text = pattern.sub(package, stream.read()) + + with open(file, "w") as stream: + stream.write(text) + + for path in glob(f"*.md"): + shutil.copyfile(path, f"docs/dist/{path}") + + +def setup(app): + app.connect("build-finished", build) diff --git a/docs/sphinx/index.rst b/docs/sphinx/index.rst new file mode 100644 index 0000000..f9c17bc --- /dev/null +++ b/docs/sphinx/index.rst @@ -0,0 +1,7 @@ +.. include:: ../../README.md + :parser: myst_parser.sphinx_ + +.. toctree:: + :hidden: + +.. autosummary:: diff --git a/docs/sphinx/scripts.js b/docs/sphinx/scripts.js new file mode 100644 index 0000000..cf4b117 --- /dev/null +++ b/docs/sphinx/scripts.js @@ -0,0 +1,13 @@ +Array.from(document.querySelectorAll("img")) + .filter((img) => img.hasAttribute("height")) + .forEach((img) => { + img.style.height = img.getAttribute("height").concat("px"); + }); + +Array.from(document.querySelectorAll(".toctree-checkbox")).forEach( + (section) => { + if (!section.checked) { + section.click(); + } + }, +); diff --git a/docs/sphinx/styles.css b/docs/sphinx/styles.css new file mode 100644 index 0000000..e7999ae --- /dev/null +++ b/docs/sphinx/styles.css @@ -0,0 +1,50 @@ +.content { + width: 100%; + padding: 0 40px; +} + +.toc-drawer { + width: 400px; +} + +.sidebar-brand-text { + text-align: center; +} + +.sidebar-drawer { + width: 300px; +} + +.sidebar-container { + width: 300px; +} + +section#documentation { + display: none; +} + +@media (max-width: 67em) { + .content { + padding: 0 20px; + } + + .icon { + margin: 0 10px; + + svg { + width: 20px; + height: 20px; + } + } + + .sidebar-drawer { + left: -300px; + } +} + +@media (max-width: 82em) { + .toc-drawer { + max-width: 300px; + right: -400px; + } +} diff --git a/docs/styles.css b/docs/styles.css deleted file mode 100644 index c4383b0..0000000 --- a/docs/styles.css +++ /dev/null @@ -1,2761 +0,0 @@ -html { - --primary-color: #1779c4; - --primary-dark-color: #335c80; - --primary-light-color: #70b1e9; - --page-background-color: #fff; - --page-foreground-color: #2f4153; - --page-secondary-foreground-color: #6f7e8e; - --separator-color: #dedede; - --border-radius-large: 8px; - --border-radius-small: 4px; - --border-radius-medium: 6px; - --spacing-small: 5px; - --spacing-medium: 10px; - --spacing-large: 16px; - --box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.075); - --odd-color: rgba(0, 0, 0, 0.028); - --font-family: "Roboto", sans-serif; - --font-family-monospace: "CQ Mono", monospace; - --page-font-size: 24px; - --navigation-font-size: 18px; - --toc-font-size: 14px; - --code-font-size: 16px; - --title-font-size: 26px; - --content-line-height: 24px; - --content-maxwidth: 1050px; - --table-line-height: 24px; - --toc-sticky-top: var(--spacing-medium); - --toc-width: 200px; - --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); - --warning-color: #faf3d8; - --warning-color-dark: #f3a600; - --warning-color-darker: #5f4204; - --note-color: #e4f3ff; - --note-color-dark: #1879c4; - --note-color-darker: #274a5c; - --todo-color: #e4dafd; - --todo-color-dark: #5b2bdd; - --todo-color-darker: #2a0d72; - --deprecated-color: #ecf0f3; - --deprecated-color-dark: #5b6269; - --deprecated-color-darker: #43454a; - --bug-color: #f8d1cc; - --bug-color-dark: #b61825; - --bug-color-darker: #75070f; - --invariant-color: #d8f1e3; - --invariant-color-dark: #44b86f; - --invariant-color-darker: #265532; - --blockquote-background: #f8f9fa; - --blockquote-foreground: #636568; - --tablehead-background: #f1f1f1; - --tablehead-foreground: var(--page-foreground-color); - --menu-display: block; - --menu-focus-foreground: var(--page-background-color); - --menu-focus-background: var(--primary-color); - --menu-selected-background: rgba(0, 0, 0, 0.05); - --header-background: var(--page-background-color); - --header-foreground: var(--page-foreground-color); - --searchbar-background: var(--side-nav-background); - --searchbar-foreground: var(--page-foreground-color); - --searchbar-height: 33px; - --searchbar-width: 210px; - --searchbar-border-radius: var(--searchbar-height); - --code-background: #f5f5f5; - --code-foreground: var(--page-foreground-color); - --fragment-background: #f8f9fa; - --fragment-foreground: #37474f; - --fragment-keyword: #bb6bb2; - --fragment-keywordtype: #8258b3; - --fragment-keywordflow: #d67c3b; - --fragment-token: #438a59; - --fragment-comment: #969696; - --fragment-link: #5383d6; - --fragment-preprocessor: #46aaa5; - --fragment-linenumber-color: #797979; - --fragment-linenumber-background: #f4f4f5; - --fragment-linenumber-border: #e3e5e7; - --fragment-lineheight: 20px; - --side-nav-background: #fbfbfb; - --side-nav-foreground: var(--page-foreground-color); - --side-nav-arrow-opacity: 0; - --side-nav-arrow-hover-opacity: 0.9; - --toc-background: var(--side-nav-background); - --toc-foreground: var(--side-nav-foreground); - --tree-item-height: 30px; - --memname-font-size: var(--code-font-size); - --memtitle-font-size: 18px; - --webkit-scrollbar-size: 7px; - --webkit-scrollbar-padding: 4px; - --webkit-scrollbar-color: var(--separator-color); - --animation-duration: 0.12s; -} - -html.dark-mode { - color-scheme: dark; - --primary-color: #1982d2; - --primary-dark-color: #86a9c4; - --primary-light-color: #4779ac; - --box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.3); - --odd-color: rgba(100, 100, 100, 0.06); - --menu-selected-background: rgba(0, 0, 0, 0.4); - --page-background-color: #1c1d1f; - --page-foreground-color: #d2dbde; - --page-secondary-foreground-color: #859399; - --separator-color: #38393b; - --side-nav-background: #252628; - --code-background: #2a2c2f; - --tablehead-background: #2a2c2f; - --blockquote-background: #222325; - --blockquote-foreground: #7e8c92; - --warning-color: #3b2e04; - --warning-color-dark: #f1b602; - --warning-color-darker: #ceb670; - --note-color: #163750; - --note-color-dark: #1982d2; - --note-color-darker: #dcf0fa; - --todo-color: #2a2536; - --todo-color-dark: #7661b3; - --todo-color-darker: #ae9ed6; - --deprecated-color: #2e323b; - --deprecated-color-dark: #738396; - --deprecated-color-darker: #abb0bd; - --bug-color: #2e1917; - --bug-color-dark: #ad2617; - --bug-color-darker: #f5b1aa; - --invariant-color: #303a35; - --invariant-color-dark: #76ce96; - --invariant-color-darker: #cceed5; - --fragment-background: #282c34; - --fragment-foreground: #dbe4eb; - --fragment-keyword: #cc99cd; - --fragment-keywordtype: #ab99cd; - --fragment-keywordflow: #e08000; - --fragment-token: #7ec699; - --fragment-comment: #999; - --fragment-link: #98c0e3; - --fragment-preprocessor: #65cabe; - --fragment-linenumber-color: #ccc; - --fragment-linenumber-background: #35393c; - --fragment-linenumber-border: #1f1f1f; -} - -body { - color: var(--page-foreground-color); - background-color: var(--page-background-color); - font-size: var(--page-font-size); -} - -#projectname { - margin-top: 15px; -} - -#nav-sync { - display: none; -} - -body, -table, -div, -p, -dl, -#nav-tree .label, -.title, -.sm-dox a, -.sm-dox a:hover, -.sm-dox a:focus, -#projectname, -.SelectItem, -#MSearchField, -.navpath li.navelem a, -.navpath li.navelem a:hover, -p.reference, -p.definition, -div.toc li, -div.toc h3 { - font-family: var(--font-family); -} - -h1, -h2, -h3, -h4, -h5 { - margin-top: 1em; - font-weight: 600; - line-height: initial; -} - -p, -div, -table, -dl, -p.reference, -p.definition { - font-size: var(--page-font-size); -} - -p.reference, -p.definition { - color: var(--page-secondary-foreground-color); -} - -a:link, -a:visited, -a:hover, -a:focus, -a:active { - color: var(--primary-color) !important; - font-weight: 500; - background: none; -} - -a.anchor { - scroll-margin-top: var(--spacing-large); - display: block; -} - -#top { - background: var(--header-background); - border-bottom: 1px solid var(--separator-color); -} - -#main-nav { - flex-grow: 5; - padding: var(--spacing-small) var(--spacing-medium); -} - -#titlearea { - width: auto; - padding: var(--spacing-medium) var(--spacing-large); - background: none; - color: var(--header-foreground); - border-bottom: none; -} - -#titlearea table tbody tr { - height: auto !important; -} - -#projectname { - font-size: var(--title-font-size); - font-weight: 600; -} - -#projectnumber { - font-family: inherit; - font-size: var(--code-font-size); -} - -#projectbrief { - font-family: inherit; -} - -#projectlogo { - vertical-align: middle; -} - -#projectlogo img { - max-height: calc(var(--title-font-size) * 2); - margin-right: var(--spacing-small); -} - -.sm-dox, -.tabs, -.tabs2, -.tabs3 { - background: none; - padding: 0; -} - -.tabs, -.tabs2, -.tabs3 { - border-bottom: 1px solid var(--separator-color); - margin-bottom: -1px; -} - -.main-menu-btn-icon, -.main-menu-btn-icon:before, -.main-menu-btn-icon:after { - background: var(--page-secondary-foreground-color); -} - -.sm-dox ul { - background: var(--page-background-color); - box-shadow: var(--box-shadow); - border: 1px solid var(--separator-color); - border-radius: var(--border-radius-medium) !important; - padding: var(--spacing-small); - animation: ease-out 150ms slideInMenu; -} - -.sm-dox ul a { - color: var(--page-foreground-color) !important; - background: var(--page-background-color); - font-size: var(--navigation-font-size); -} - -.sm-dox > li > ul:after { - border-bottom-color: var(--page-background-color) !important; -} - -.sm-dox > li > ul:before { - border-bottom-color: var(--separator-color) !important; -} - -.sm-dox ul a:hover, -.sm-dox ul a:active, -.sm-dox ul a:focus { - font-size: var(--navigation-font-size) !important; - color: var(--menu-focus-foreground) !important; - text-shadow: none; - background-color: var(--menu-focus-background); - border-radius: var(--border-radius-small) !important; -} - -.sm-dox a, -.sm-dox a:focus, -.tablist li, -.tablist li a, -.tablist li.current a { - text-shadow: none; - background: transparent; - background-image: none !important; - color: var(--header-foreground) !important; - font-weight: normal; - font-size: var(--navigation-font-size); - border-radius: var(--border-radius-small) !important; -} - -.sm-dox a:focus { - outline: auto; -} - -.sm-dox a:hover, -.sm-dox a:active, -.tablist li a:hover { - text-shadow: none; - font-weight: normal; - background: var(--menu-focus-background); - color: var(--menu-focus-foreground) !important; - border-radius: var(--border-radius-small) !important; - font-size: var(--navigation-font-size); -} - -.tablist li.current { - border-radius: var(--border-radius-small); - background: var(--menu-selected-background); -} - -.tablist li { - margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); -} - -.tablist a { - padding: 0 var(--spacing-large); -} - -#MSearchBox { - height: var(--searchbar-height); - background: var(--searchbar-background); - border-radius: var(--searchbar-border-radius); - border: 1px solid var(--separator-color); - overflow: hidden; - width: var(--searchbar-width); - position: relative; - box-shadow: none; - display: block; - margin: 20px 0; -} - -.left img#MSearchSelect { - left: 0; - user-select: none; - padding-left: 8px; -} - -.left span#MSearchSelect { - left: 0; - user-select: none; - margin-left: 8px; - padding: 0; -} - -.left #MSearchSelect[src$=".png"] { - padding-left: 0; -} - -.SelectionMark { - user-select: none; -} - -.tabs .left #MSearchSelect { - padding-left: 0; -} - -.tabs #MSearchBox { - position: absolute; - right: var(--spacing-medium); -} - -#MSearchSelectWindow, -#MSearchResultsWindow { - z-index: 9999; -} - -#MSearchBox.MSearchBoxActive { - border-color: var(--primary-color); - box-shadow: inset 0 0 0 1px var(--primary-color); -} - -#main-menu > li:last-child { - margin-right: 0; -} - -#MSearchField { - font-size: var(--navigation-font-size); - height: calc(var(--searchbar-height) - 2px); - background: transparent; - width: calc(var(--searchbar-width) - 64px); -} - -.MSearchBoxActive #MSearchField { - color: var(--searchbar-foreground); -} - -#MSearchSelect { - top: calc(calc(var(--searchbar-height) / 2) - 11px); -} - -#MSearchBox span.left, -#MSearchBox span.right { - background: none; - background-image: none; -} - -#MSearchBox span.right { - padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); - position: absolute; - right: var(--spacing-small); -} - -.tabs #MSearchBox span.right { - top: calc(calc(var(--searchbar-height) / 2) - 12px); -} - -#MSearchResultsWindow { - border-radius: var(--border-radius-large); - border: 1px solid var(--separator-color); - transform: translate(0, 20px); - box-shadow: var(--box-shadow); - animation: ease-out 280ms slideInSearchResults; - background: var(--page-background-color); -} - -iframe#MSearchResults { - margin: 4px; -} - -iframe { - color-scheme: normal; -} - -html.dark-mode iframe#MSearchResults { - filter: invert() hue-rotate(180deg); -} - -#MSearchResults .SRPage { - background-color: transparent; -} - -#MSearchResults .SRPage .SREntry { - font-size: var(--page-font-size); - padding: var(--spacing-small) var(--spacing-medium); -} - -a.SRScope { - font-size: var(--page-font-size); -} - -div.caption { - margin: 10px; -} - -#MSearchSelectWindow { - border: 1px solid var(--separator-color); - border-radius: var(--border-radius-medium); - box-shadow: var(--box-shadow); - background: var(--page-background-color); - padding-top: var(--spacing-small); - padding-bottom: var(--spacing-small); -} - -#MSearchSelectWindow a.SelectItem { - font-size: var(--navigation-font-size); - line-height: var(--content-line-height); - margin: 0 var(--spacing-small); - border-radius: var(--border-radius-small); - color: var(--page-foreground-color) !important; - font-weight: normal; -} - -#MSearchSelectWindow a.SelectItem:hover { - background: var(--menu-focus-background); - color: var(--menu-focus-foreground) !important; -} - -#MSearchResultsWindow { - margin: 10px; - box-sizing: border-box; - width: 500px !important; -} - -#side-nav { - padding: 0 !important; - background: var(--side-nav-background); - min-width: 8px; - max-width: 50vw; -} - -#nav-tree { - background: transparent; - margin-right: 1px; -} - -#nav-tree .label { - font-size: var(--navigation-font-size); -} - -#nav-tree .item { - height: var(--tree-item-height); - line-height: var(--tree-item-height); -} - -#nav-tree .item > a:focus { - outline: none; -} - -#nav-sync { - bottom: 12px; - right: 12px; - top: auto !important; - user-select: none; -} - -#nav-tree .selected { - text-shadow: none; - background-image: none; - background-color: transparent; - position: relative; -} - -#nav-tree .selected::after { - content: ""; - position: absolute; - top: 1px; - bottom: 1px; - left: 0; - width: 4px; - border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; - background: var(--primary-color); -} - -#nav-tree a { - color: var(--side-nav-foreground) !important; - font-weight: normal; -} - -#nav-tree a:focus { - outline-style: auto; -} - -#nav-tree .arrow { - opacity: var(--side-nav-arrow-opacity); - background: none; -} - -.arrow { - color: inherit; - cursor: pointer; - font-size: 0; - vertical-align: middle; - margin-right: 2px; - font-family: serif; - height: auto; - text-align: right; -} - -.footer { - display: none; -} - -#nav-tree div.item:hover .arrow, -#nav-tree a:focus .arrow { - opacity: var(--side-nav-arrow-hover-opacity); -} - -#nav-tree .selected a { - color: var(--primary-color) !important; - font-weight: bolder; - font-weight: 600; -} - -.ui-resizable-e { - width: 4px; - background: transparent; - box-shadow: inset -1px 0 0 0 var(--separator-color); -} - -div.header { - border-bottom: 1px solid var(--separator-color); - background-color: var(--page-background-color); - background-image: none; -} - -div.contents, -div.header .title, -div.header .summary { - max-width: var(--content-maxwidth); -} - -div.contents, -div.header .title { - line-height: initial; - margin: calc(var(--spacing-medium) + 0.2em) auto var(--spacing-medium) auto; -} - -div.header .summary { - margin: var(--spacing-medium) auto 0 auto; -} - -div.headertitle { - padding: 0; -} - -div.header .title { - font-weight: 600; - font-size: 225%; - text-align: center; - padding: var(--spacing-medium) var(--spacing-large); - word-break: break-word; -} - -.mlabel { - font-size: var(--code-font-size) !important; -} - -.summary { - display: none; -} - -div.header { - width: auto; - display: block; - float: none; - padding: 0 var(--spacing-large); -} - -td.memSeparator { - border-color: var(--separator-color); -} - -span.mlabel { - background: var(--primary-color); - border: none; - padding: 4px 9px; - border-radius: 12px; - margin-right: var(--spacing-medium); -} - -span.mlabel:last-of-type { - margin-right: 2px; -} - -div.contents { - padding: 0 var(--spacing-large); -} - -div.contents p, -div.contents li { - line-height: var(--content-line-height); -} - -div.contents div.dyncontent { - margin: var(--spacing-medium) 0; -} - -html.dark-mode div.contents div.dyncontent img, -html.dark-mode div.contents center img, -html.dark-mode div.contents > table img, -html.dark-mode div.contents div.dyncontent iframe, -html.dark-mode div.contents center iframe, -html.dark-mode div.contents table iframe, -html.dark-mode div.contents .dotgraph iframe { - filter: brightness(89%) hue-rotate(180deg) invert(); -} - -h2.groupheader { - border-bottom: 0; - color: var(--page-foreground-color); - box-shadow: - 100px 0 var(--page-background-color), - -100px 0 var(--page-background-color), - 100px 0.75px var(--separator-color), - -100px 0.75px var(--separator-color), - 500px 0 var(--page-background-color), - -500px 0 var(--page-background-color), - 500px 0.75px var(--separator-color), - -500px 0.75px var(--separator-color), - 900px 0 var(--page-background-color), - -900px 0 var(--page-background-color), - 900px 0.75px var(--separator-color), - -900px 0.75px var(--separator-color), - 1400px 0 var(--page-background-color), - -1400px 0 var(--page-background-color), - 1400px 0.75px var(--separator-color), - -1400px 0.75px var(--separator-color), - 1900px 0 var(--page-background-color), - -1900px 0 var(--page-background-color), - 1900px 0.75px var(--separator-color), - -1900px 0.75px var(--separator-color); -} - -blockquote { - margin: 0 var(--spacing-medium) 0 var(--spacing-medium); - padding: var(--spacing-small) var(--spacing-large); - background: var(--blockquote-background); - color: var(--blockquote-foreground); - border-left: 0; - overflow: visible; - border-radius: var(--border-radius-medium); - overflow: visible; - position: relative; -} - -blockquote::before, -blockquote::after { - font-weight: bold; - font-family: serif; - font-size: 360%; - opacity: 0.15; - position: absolute; -} - -blockquote::before { - content: "“"; - left: -10px; - top: 4px; -} - -blockquote::after { - content: "”"; - right: -8px; - bottom: -25px; -} - -blockquote p { - margin: var(--spacing-small) 0 var(--spacing-medium) 0; -} -.paramname { - font-weight: 600; - color: var(--primary-dark-color); -} - -.paramname > code { - border: 0; -} - -table.params .paramname { - font-weight: 600; - font-family: var(--font-family-monospace); - font-size: var(--code-font-size); - padding-right: var(--spacing-small); - line-height: var(--table-line-height); -} - -h1.glow, -h2.glow, -h3.glow, -h4.glow, -h5.glow, -h6.glow { - text-shadow: 0 0 15px var(--primary-light-color); -} - -.alphachar a { - color: var(--page-foreground-color); -} - -.dotgraph { - max-width: 100%; - overflow-x: scroll; -} - -.dotgraph .caption { - position: sticky; - left: 0; -} - -.interactive_dotgraph .dotgraph iframe { - max-width: 100%; -} - -div.contents .toc { - max-height: var(--toc-max-height); - min-width: var(--toc-width); - border: 0; - border-left: 1px solid var(--separator-color); - border-radius: 0; - background-color: transparent; - box-shadow: none; - position: sticky; - top: var(--toc-sticky-top); - padding: 0 var(--spacing-large); - margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); -} - -div.toc h3 { - color: var(--toc-foreground); - font-size: var(--navigation-font-size); - margin: var(--spacing-large) 0 var(--spacing-medium) 0; -} - -div.toc li { - padding: 0; - background: none; - line-height: var(--toc-font-size); - margin: var(--toc-font-size) 0 0 0; -} - -div.toc li::before { - display: none; -} - -div.toc ul { - margin-top: 0; -} - -div.toc li a { - font-size: var(--toc-font-size); - color: var(--page-foreground-color) !important; - text-decoration: none; -} - -div.toc li a:hover, -div.toc li a.active { - color: var(--primary-color) !important; -} - -div.toc li a.aboveActive { - color: var(--page-secondary-foreground-color) !important; -} - -code, -div.fragment, -pre.fragment { - border-radius: var(--border-radius-small); - border: 1px solid var(--separator-color); - overflow: hidden; -} - -code { - display: inline; - background: var(--code-background); - color: var(--code-foreground); - padding: 2px 6px; -} - -div.fragment, -pre.fragment { - margin: var(--spacing-medium) 0; - padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) - var(--spacing-large); - background: var(--fragment-background); - color: var(--fragment-foreground); - overflow-x: auto; -} - -code, -code a, -pre.fragment, -div.fragment, -div.fragment .line, -div.fragment span, -div.fragment .line a, -div.fragment .line span { - font-family: var(--font-family-monospace); - font-size: var(--code-font-size) !important; -} - -div.line:after { - margin-right: var(--spacing-medium); -} - -div.fragment .line, -pre.fragment { - white-space: pre; - word-wrap: initial; - line-height: var(--fragment-lineheight); -} - -div.fragment span.keyword { - color: var(--fragment-keyword); -} - -div.fragment span.keywordtype { - color: var(--fragment-keywordtype); -} - -div.fragment span.keywordflow { - color: var(--fragment-keywordflow); -} - -div.fragment span.stringliteral { - color: var(--fragment-token); -} - -div.fragment span.comment { - color: var(--fragment-comment); -} - -div.fragment a.code { - color: var(--fragment-link) !important; -} - -div.fragment span.preprocessor { - color: var(--fragment-preprocessor); -} - -div.fragment span.lineno { - display: inline-block; - width: 27px; - border-right: none; - background: var(--fragment-linenumber-background); - color: var(--fragment-linenumber-color); -} - -div.fragment span.lineno a { - background: none; - color: var(--fragment-link) !important; -} - -div.fragment > .line:first-child .lineno { - box-shadow: - -999999px 0 0 999999px var(--fragment-linenumber-background), - -999998px 0 0 999999px var(--fragment-linenumber-border); - background-color: var(--fragment-linenumber-background) !important; -} - -div.line { - border-radius: var(--border-radius-small); -} - -div.line.glow { - background-color: var(--primary-light-color); - box-shadow: none; -} - -dl.bug dt a, -dl.deprecated dt a, -dl.todo dt a { - font-weight: bold !important; -} - -dl.warning, -dl.attention, -dl.note, -dl.deprecated, -dl.bug, -dl.invariant, -dl.pre, -dl.post, -dl.todo, -dl.remark { - padding: var(--spacing-medium); - margin: var(--spacing-medium) 0; - color: var(--page-background-color); - overflow: hidden; - margin-left: 0; - border-radius: var(--border-radius-small); -} - -dl.section dd { - margin-bottom: 2px; -} - -dl.warning, -dl.attention { - background: var(--warning-color); - border-left: 8px solid var(--warning-color-dark); - color: var(--warning-color-darker); -} - -dl.warning dt, -dl.attention dt { - color: var(--warning-color-dark); -} - -dl.note, -dl.remark { - background: var(--note-color); - border-left: 8px solid var(--note-color-dark); - color: var(--note-color-darker); -} - -dl.note dt, -dl.remark dt { - color: var(--note-color-dark); -} - -dl.todo { - background: var(--todo-color); - border-left: 8px solid var(--todo-color-dark); - color: var(--todo-color-darker); -} - -dl.todo dt a { - color: var(--todo-color-dark) !important; -} - -dl.bug dt a { - color: var(--todo-color-dark) !important; -} - -dl.bug { - background: var(--bug-color); - border-left: 8px solid var(--bug-color-dark); - color: var(--bug-color-darker); -} - -dl.bug dt a { - color: var(--bug-color-dark) !important; -} - -dl.deprecated { - background: var(--deprecated-color); - border-left: 8px solid var(--deprecated-color-dark); - color: var(--deprecated-color-darker); -} - -dl.deprecated dt a { - color: var(--deprecated-color-dark) !important; -} - -dl.section dd, -dl.bug dd, -dl.deprecated dd, -dl.todo dd { - margin-inline-start: 0; -} - -dl.invariant, -dl.pre, -dl.post { - background: var(--invariant-color); - border-left: 8px solid var(--invariant-color-dark); - color: var(--invariant-color-darker); -} - -dl.invariant dt, -dl.pre dt, -dl.post dt { - color: var(--invariant-color-dark); -} - -div.memdoc, -div.memproto, -h2.memtitle { - box-shadow: none; - background-image: none; - border: none; -} - -div.memdoc { - padding: 0 var(--spacing-medium); - background: var(--page-background-color); -} - -h2.memtitle, -div.memitem { - border: 1px solid var(--separator-color); - box-shadow: var(--box-shadow); -} - -h2.memtitle { - box-shadow: - 0 var(--spacing-medium) 0 -1px var(--fragment-background), - var(--box-shadow); -} - -div.memitem { - transition: none; -} - -div.memproto, -h2.memtitle { - background: var(--fragment-background); -} - -h2.memtitle { - font-weight: 500; - font-size: var(--memtitle-font-size); - font-family: var(--font-family-monospace); - border-bottom: none; - border-top-left-radius: var(--border-radius-medium); - border-top-right-radius: var(--border-radius-medium); - word-break: break-all; - position: relative; -} - -h2.memtitle:after { - content: ""; - display: block; - background: var(--fragment-background); - height: var(--spacing-medium); - bottom: calc(0px - var(--spacing-medium)); - left: 0; - right: -14px; - position: absolute; - border-top-right-radius: var(--border-radius-medium); -} - -h2.memtitle > span.permalink { - font-size: inherit; -} - -h2.memtitle > span.permalink > a { - text-decoration: none; - padding-left: 3px; - margin-right: -4px; - user-select: none; - display: inline-block; - margin-top: -6px; -} - -h2.memtitle > span.permalink > a:hover { - color: var(--primary-dark-color) !important; -} - -a:target + h2.memtitle, -a:target + h2.memtitle + div.memitem { - border-color: var(--primary-light-color); -} - -div.memitem { - border-top-right-radius: var(--border-radius-medium); - border-bottom-right-radius: var(--border-radius-medium); - border-bottom-left-radius: var(--border-radius-medium); - overflow: hidden; - display: block !important; -} - -div.memdoc { - border-radius: 0; -} - -div.memproto { - border-radius: 0 var(--border-radius-small) 0 0; - overflow: auto; - border-bottom: 1px solid var(--separator-color); - padding: var(--spacing-medium); - margin-bottom: -1px; -} - -div.memtitle { - border-top-right-radius: var(--border-radius-medium); - border-top-left-radius: var(--border-radius-medium); -} - -div.memproto table.memname { - font-family: var(--font-family-monospace); - color: var(--page-foreground-color); - font-size: var(--memname-font-size); - text-shadow: none; -} - -div.memproto div.memtemplate { - font-family: var(--font-family-monospace); - color: var(--primary-dark-color); - font-size: var(--memname-font-size); - margin-left: 2px; - text-shadow: none; -} - -table.mlabels, -table.mlabels > tbody { - display: block; -} - -td.mlabels-left { - width: auto; -} - -td.mlabels-right { - margin-top: 3px; - position: sticky; - left: 0; -} - -table.mlabels > tbody > tr:first-child { - display: flex; - justify-content: space-between; - flex-wrap: wrap; -} - -.memname, -.memitem span.mlabels { - margin: 0; -} - -dl.reflist { - box-shadow: var(--box-shadow); - border-radius: var(--border-radius-medium); - border: 1px solid var(--separator-color); - overflow: hidden; - padding: 0; -} - -dl.reflist dt, -dl.reflist dd { - box-shadow: none; - text-shadow: none; - background-image: none; - border: none; - padding: 12px; -} - -dl.reflist dt { - font-weight: 500; - border-radius: 0; - background: var(--code-background); - border-bottom: 1px solid var(--separator-color); - color: var(--page-foreground-color); -} - -dl.reflist dd { - background: none; -} - -.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), -.contents - table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) - tbody { - display: inline-block; - max-width: 100%; -} - -.contents - > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not( - .classindex - ) { - margin-left: calc(0px - var(--spacing-large)); - margin-right: calc(0px - var(--spacing-large)); - max-width: calc(100% + 2 * var(--spacing-large)); -} - -table.fieldtable, -table.markdownTable tbody, -table.doxtable tbody { - border: none; - margin: var(--spacing-medium) 0; - box-shadow: 0 0 0 1px var(--separator-color); - border-radius: var(--border-radius-small); -} - -table.markdownTable, -table.doxtable, -table.fieldtable { - padding: 1px; -} - -table.doxtable caption { - display: block; -} - -table.fieldtable { - border-collapse: collapse; - width: 100%; -} - -th.markdownTableHeadLeft, -th.markdownTableHeadRight, -th.markdownTableHeadCenter, -th.markdownTableHeadNone, -table.doxtable th { - background: var(--tablehead-background); - color: var(--tablehead-foreground); - font-weight: 600; - font-size: var(--page-font-size); -} - -th.markdownTableHeadLeft:first-child, -th.markdownTableHeadRight:first-child, -th.markdownTableHeadCenter:first-child, -th.markdownTableHeadNone:first-child, -table.doxtable tr th:first-child { - border-top-left-radius: var(--border-radius-small); -} - -th.markdownTableHeadLeft:last-child, -th.markdownTableHeadRight:last-child, -th.markdownTableHeadCenter:last-child, -th.markdownTableHeadNone:last-child, -table.doxtable tr th:last-child { - border-top-right-radius: var(--border-radius-small); -} - -table.markdownTable td, -table.markdownTable th, -table.fieldtable td, -table.fieldtable th, -table.doxtable td, -table.doxtable th { - border: 1px solid var(--separator-color); - padding: var(--spacing-small) var(--spacing-medium); -} - -table.markdownTable td:last-child, -table.markdownTable th:last-child, -table.fieldtable td:last-child, -table.fieldtable th:last-child, -table.doxtable td:last-child, -table.doxtable th:last-child { - border-right: none; -} - -table.markdownTable td:first-child, -table.markdownTable th:first-child, -table.fieldtable td:first-child, -table.fieldtable th:first-child, -table.doxtable td:first-child, -table.doxtable th:first-child { - border-left: none; -} - -table.markdownTable tr:first-child td, -table.markdownTable tr:first-child th, -table.fieldtable tr:first-child td, -table.fieldtable tr:first-child th, -table.doxtable tr:first-child td, -table.doxtable tr:first-child th { - border-top: none; -} - -table.markdownTable tr:last-child td, -table.markdownTable tr:last-child th, -table.fieldtable tr:last-child td, -table.fieldtable tr:last-child th, -table.doxtable tr:last-child td, -table.doxtable tr:last-child th { - border-bottom: none; -} - -table.markdownTable tr, -table.doxtable tr { - border-bottom: 1px solid var(--separator-color); -} - -table.markdownTable tr:last-child, -table.doxtable tr:last-child { - border-bottom: none; -} - -.full_width_table - table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { - display: block; -} - -.full_width_table - table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) - tbody { - display: table; - width: 100%; -} - -table.fieldtable th { - font-size: var(--page-font-size); - font-weight: 600; - background-image: none; - background-color: var(--tablehead-background); - color: var(--tablehead-foreground); -} - -table.fieldtable td.fieldtype, -.fieldtable td.fieldname, -.fieldtable td.fielddoc, -.fieldtable th { - border-bottom: 1px solid var(--separator-color); - border-right: 1px solid var(--separator-color); -} - -table.fieldtable tr:last-child td:first-child { - border-bottom-left-radius: var(--border-radius-small); -} - -table.fieldtable tr:last-child td:last-child { - border-bottom-right-radius: var(--border-radius-small); -} - -.memberdecls td.glow, -.fieldtable tr.glow { - background-color: var(--primary-light-color); - box-shadow: none; -} - -table.memberdecls { - display: block; - -webkit-tap-highlight-color: transparent; -} - -table.memberdecls tr[class^="memitem"] { - font-family: var(--font-family-monospace); - font-size: var(--code-font-size); -} - -table.memberdecls tr[class^="memitem"] .memTemplParams { - font-family: var(--font-family-monospace); - font-size: var(--code-font-size); - color: var(--primary-dark-color); - white-space: normal; -} - -table.memberdecls .memItemLeft, -table.memberdecls .memItemRight, -table.memberdecls .memTemplItemLeft, -table.memberdecls .memTemplItemRight, -table.memberdecls .memTemplParams { - transition: none; - padding-top: var(--spacing-small); - padding-bottom: var(--spacing-small); - border-top: 1px solid var(--separator-color); - border-bottom: 1px solid var(--separator-color); - background-color: var(--fragment-background); -} - -table.memberdecls .memTemplItemLeft, -table.memberdecls .memTemplItemRight { - padding-top: 2px; -} - -table.memberdecls .memTemplParams { - border-bottom: 0; - border-left: 1px solid var(--separator-color); - border-right: 1px solid var(--separator-color); - border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; - padding-bottom: var(--spacing-small); -} - -table.memberdecls .memTemplItemLeft { - border-radius: 0 0 0 var(--border-radius-small); - border-left: 1px solid var(--separator-color); - border-top: 0; -} - -table.memberdecls .memTemplItemRight { - border-radius: 0 0 var(--border-radius-small) 0; - border-right: 1px solid var(--separator-color); - padding-left: 0; - border-top: 0; -} - -table.memberdecls .memItemLeft { - border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); - border-left: 1px solid var(--separator-color); - padding-left: var(--spacing-medium); - padding-right: 0; -} - -table.memberdecls .memItemRight { - border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; - border-right: 1px solid var(--separator-color); - padding-right: var(--spacing-medium); - padding-left: 0; -} - -table.memberdecls .mdescLeft, -table.memberdecls .mdescRight { - background: none; - color: var(--page-foreground-color); - padding: var(--spacing-small) 0; -} - -table.memberdecls .memItemLeft, -table.memberdecls .memTemplItemLeft { - padding-right: var(--spacing-medium); -} - -table.memberdecls .memSeparator { - background: var(--page-background-color); - height: var(--spacing-large); - border: 0; - transition: none; -} - -table.memberdecls .groupheader { - margin-bottom: var(--spacing-large); -} - -table.memberdecls .inherit_header td { - padding: 0 0 var(--spacing-medium) 0; - text-indent: -12px; - color: var(--page-secondary-foreground-color); -} - -table.memberdecls img[src="closed.png"], -table.memberdecls img[src="open.png"], -div.dynheader img[src="open.png"], -div.dynheader img[src="closed.png"] { - width: 0; - height: 0; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 5px solid var(--primary-color); - margin-top: 8px; - display: block; - float: left; - margin-left: -10px; - transition: transform var(--animation-duration) ease-out; -} - -table.memberdecls img { - margin-right: 10px; -} - -table.memberdecls img[src="closed.png"], -div.dynheader img[src="closed.png"] { - transform: rotate(-90deg); -} - -.compoundTemplParams { - font-family: var(--font-family-monospace); - color: var(--primary-dark-color); - font-size: var(--code-font-size); -} - -hr { - margin-top: var(--spacing-large); - margin-bottom: var(--spacing-large); - height: 1px; - background-color: var(--separator-color); - border: 0; -} - -.contents hr { - box-shadow: - 100px 0 0 var(--separator-color), - -100px 0 0 var(--separator-color), - 500px 0 0 var(--separator-color), - -500px 0 0 var(--separator-color), - 1500px 0 0 var(--separator-color), - -1500px 0 0 var(--separator-color), - 2000px 0 0 var(--separator-color), - -2000px 0 0 var(--separator-color); -} - -.contents img, -.contents .center, -.contents center, -.contents div.image object { - max-width: 100%; - overflow: auto; -} - -div.directory { - border-top: 1px solid var(--separator-color); - border-bottom: 1px solid var(--separator-color); - width: auto; -} - -table.directory { - font-family: var(--font-family); - font-size: var(--page-font-size); - font-weight: normal; - width: 100%; -} - -table.directory td.entry, -table.directory td.desc { - padding: calc(var(--spacing-small) / 2) var(--spacing-small); - line-height: var(--table-line-height); -} - -table.directory tr.even td:last-child { - border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; -} - -table.directory tr.even td:first-child { - border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); -} - -table.directory tr.even:last-child td:last-child { - border-radius: 0 var(--border-radius-small) 0 0; -} - -table.directory tr.even:last-child td:first-child { - border-radius: var(--border-radius-small) 0 0 0; -} - -table.directory td.desc { - min-width: 250px; -} - -table.directory tr.even { - background-color: var(--odd-color); -} - -table.directory tr.odd { - background-color: transparent; -} - -.icona { - width: auto; - height: auto; - margin: 0 var(--spacing-small); -} - -.icon { - background: var(--primary-color); - border-radius: var(--border-radius-small); - font-size: var(--page-font-size); - padding: calc(var(--page-font-size) / 5); - line-height: var(--page-font-size); - transform: scale(0.8); - height: auto; - width: var(--page-font-size); - user-select: none; -} - -.iconfopen, -.icondoc, -.iconfclosed { - background-position: center; - margin-bottom: 0; - height: var(--table-line-height); -} - -.icondoc { - filter: saturate(0.2); -} - -html.dark-mode .iconfopen, -html.dark-mode .iconfclosed { - filter: hue-rotate(180deg) invert(); -} - -.classindex dl.odd { - background: var(--odd-color); - border-radius: var(--border-radius-small); -} - -.classindex dl.even { - background-color: transparent; -} - -table.classindex { - margin-left: 0; - margin-right: 0; - width: 100%; -} - -table.classindex table div.ah { - background-image: none; - background-color: initial; - border-color: var(--separator-color); - color: var(--page-foreground-color); - box-shadow: var(--box-shadow); - border-radius: var(--border-radius-large); - padding: var(--spacing-small); -} - -div.qindex { - background-color: var(--odd-color); - border-radius: var(--border-radius-small); - border: 1px solid var(--separator-color); - padding: var(--spacing-small) 0; -} - -#nav-path ul { - background-image: none; - background: var(--page-background-color); - border: none; - border-top: 1px solid var(--separator-color); - border-bottom: 1px solid var(--separator-color); - border-bottom: 0; - box-shadow: 0 0.75px 0 var(--separator-color); - font-size: var(--navigation-font-size); -} - -img.footer { - width: 60px; -} - -.navpath li.footer { - color: var(--page-secondary-foreground-color); -} - -address.footer { - color: var(--page-secondary-foreground-color); - margin-bottom: var(--spacing-large); -} - -#nav-path li.navelem { - background-image: none; - display: flex; - align-items: center; -} - -.navpath li.navelem a { - text-shadow: none; - display: inline-block; - color: var(--primary-color) !important; -} - -.navpath li.navelem b { - color: var(--primary-dark-color); - font-weight: 500; -} - -li.navelem { - padding: 0; - margin-left: -8px; -} - -li.navelem:first-child { - margin-left: var(--spacing-large); -} - -li.navelem:first-child:before { - display: none; -} - -#nav-path li.navelem:after { - content: ""; - border: 5px solid var(--page-background-color); - border-bottom-color: transparent; - border-right-color: transparent; - border-top-color: transparent; - transform: translateY(-1px) scaleY(4.2); - z-index: 10; - margin-left: 6px; -} - -#nav-path li.navelem:before { - content: ""; - border: 5px solid var(--separator-color); - border-bottom-color: transparent; - border-right-color: transparent; - border-top-color: transparent; - transform: translateY(-1px) scaleY(3.2); - margin-right: var(--spacing-small); -} - -.navpath li.navelem a:hover { - color: var(--primary-color); -} - -#nav-tree::-webkit-scrollbar, -div.fragment::-webkit-scrollbar, -pre.fragment::-webkit-scrollbar, -div.memproto::-webkit-scrollbar, -.contents center::-webkit-scrollbar, -.contents .center::-webkit-scrollbar, -.contents - table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) - tbody::-webkit-scrollbar, -div.contents .toc::-webkit-scrollbar, -.contents .dotgraph::-webkit-scrollbar, -.contents .tabs-overview-container::-webkit-scrollbar { - background: transparent; - width: calc( - var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + - var(--webkit-scrollbar-padding) - ); - height: calc( - var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + - var(--webkit-scrollbar-padding) - ); -} - -#nav-tree::-webkit-scrollbar-thumb, -div.fragment::-webkit-scrollbar-thumb, -pre.fragment::-webkit-scrollbar-thumb, -div.memproto::-webkit-scrollbar-thumb, -.contents center::-webkit-scrollbar-thumb, -.contents .center::-webkit-scrollbar-thumb, -.contents - table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) - tbody::-webkit-scrollbar-thumb, -div.contents .toc::-webkit-scrollbar-thumb, -.contents .dotgraph::-webkit-scrollbar-thumb, -.contents .tabs-overview-container::-webkit-scrollbar-thumb { - background-color: transparent; - border: var(--webkit-scrollbar-padding) solid transparent; - border-radius: calc( - var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding) - ); - background-clip: padding-box; -} - -#nav-tree:hover::-webkit-scrollbar-thumb, -div.fragment:hover::-webkit-scrollbar-thumb, -pre.fragment:hover::-webkit-scrollbar-thumb, -div.memproto:hover::-webkit-scrollbar-thumb, -.contents center:hover::-webkit-scrollbar-thumb, -.contents .center:hover::-webkit-scrollbar-thumb, -.contents - table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) - tbody:hover::-webkit-scrollbar-thumb, -div.contents .toc:hover::-webkit-scrollbar-thumb, -.contents .dotgraph:hover::-webkit-scrollbar-thumb, -.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { - background-color: var(--webkit-scrollbar-color); -} - -#nav-tree::-webkit-scrollbar-track, -div.fragment::-webkit-scrollbar-track, -pre.fragment::-webkit-scrollbar-track, -div.memproto::-webkit-scrollbar-track, -.contents center::-webkit-scrollbar-track, -.contents .center::-webkit-scrollbar-track, -.contents - table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) - tbody::-webkit-scrollbar-track, -div.contents .toc::-webkit-scrollbar-track, -.contents .dotgraph::-webkit-scrollbar-track, -.contents .tabs-overview-container::-webkit-scrollbar-track { - background: transparent; -} - -#nav-tree::-webkit-scrollbar-corner { - background-color: var(--side-nav-background); -} - -.levels { - font-size: var(--code-font-size) !important; -} - -#nav-tree, -div.fragment, -pre.fragment, -div.memproto, -.contents center, -.contents .center, -.contents - table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) - tbody, -div.contents .toc { - overflow-x: auto; - overflow-x: overlay; -} - -#nav-tree { - overflow-x: auto; - overflow-y: auto; - overflow-y: overlay; -} - -#nav-tree, -div.fragment, -pre.fragment, -div.memproto, -.contents center, -.contents .center, -.contents - table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) - tbody, -div.contents .toc, -.contents .dotgraph, -.contents .tabs-overview-container { - scrollbar-width: thin; -} - -doxygen-awesome-dark-mode-toggle { - display: inline-block; - margin: 0 0 0 var(--spacing-small); - padding: 0; - width: var(--searchbar-height); - height: var(--searchbar-height); - background: none; - border: none; - border-radius: var(--searchbar-height); - vertical-align: middle; - text-align: center; - line-height: var(--searchbar-height); - font-size: 22px; - display: flex; - align-items: center; - justify-content: center; - user-select: none; - cursor: pointer; -} - -doxygen-awesome-dark-mode-toggle > svg { - transition: transform var(--animation-duration) ease-in-out; -} - -doxygen-awesome-dark-mode-toggle:active > svg { - transform: scale(0.5); -} - -doxygen-awesome-dark-mode-toggle:hover { - background-color: rgba(0, 0, 0, 0.03); -} - -html.dark-mode doxygen-awesome-dark-mode-toggle:hover { - background-color: rgba(0, 0, 0, 0.18); -} - -.doxygen-awesome-fragment-wrapper { - position: relative; -} - -doxygen-awesome-fragment-copy-button { - opacity: 0; - background: var(--fragment-background); - width: 28px; - height: 28px; - position: absolute; - right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); - top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); - border: 1px solid var(--fragment-foreground); - cursor: pointer; - border-radius: var(--border-radius-small); - display: flex; - justify-content: center; - align-items: center; -} - -.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, -doxygen-awesome-fragment-copy-button.success { - opacity: 0.28; -} - -doxygen-awesome-fragment-copy-button:hover, -doxygen-awesome-fragment-copy-button.success { - opacity: 1 !important; -} - -doxygen-awesome-fragment-copy-button:active:not([class~="success"]) svg { - transform: scale(0.91); -} - -doxygen-awesome-fragment-copy-button svg { - fill: var(--fragment-foreground); - width: 18px; - height: 18px; -} - -doxygen-awesome-fragment-copy-button.success svg { - fill: rgb(14, 168, 14); -} - -doxygen-awesome-fragment-copy-button.success { - border-color: rgb(14, 168, 14); -} - -a.anchorlink { - font-size: 90%; - margin-left: var(--spacing-small); - color: var(--page-foreground-color) !important; - text-decoration: none; - opacity: 0.15; - display: none; - transition: - opacity var(--animation-duration) ease-in-out, - color var(--animation-duration) ease-in-out; -} - -a.anchorlink svg { - fill: var(--page-foreground-color); -} - -h3 a.anchorlink svg, -h4 a.anchorlink svg { - margin-bottom: -3px; - margin-top: -4px; -} - -a.anchorlink:hover { - opacity: 0.45; -} - -h2:hover a.anchorlink, -h1:hover a.anchorlink, -h3:hover a.anchorlink, -h4:hover a.anchorlink { - display: inline-block; -} - -.tabbed > ul { - padding-inline-start: 0; - margin: 0; - padding: var(--spacing-small) 0; -} - -.tabbed > ul > li { - display: none; -} - -.tabbed > ul > li.selected { - display: block; -} - -.tabs-overview-container { - overflow-x: auto; - display: block; - overflow-y: visible; -} - -.tabs-overview { - border-bottom: 1px solid var(--separator-color); - display: flex; - flex-direction: row; -} - -.tabs-overview button.tab-button { - color: var(--page-foreground-color); - margin: 0; - border: none; - background: transparent; - padding: calc(var(--spacing-large) / 2) 0; - display: inline-block; - font-size: var(--page-font-size); - cursor: pointer; - box-shadow: 0 1px 0 0 var(--separator-color); - position: relative; - - -webkit-tap-highlight-color: transparent; -} - -.tabs-overview button.tab-button .tab-title::before { - display: block; - content: attr(title); - font-weight: 600; - height: 0; - overflow: hidden; - visibility: hidden; -} - -.tabs-overview button.tab-button .tab-title { - float: left; - white-space: nowrap; - font-weight: normal; - padding: calc(var(--spacing-large) / 2) var(--spacing-large); - border-radius: var(--border-radius-medium); - transition: - background-color var(--animation-duration) ease-in-out, - font-weight var(--animation-duration) ease-in-out; -} - -.tabs-overview button.tab-button:not(:last-child) .tab-title { - box-shadow: 8px 0 0 -7px var(--separator-color); -} - -.tabs-overview button.tab-button:hover .tab-title { - background: var(--separator-color); - box-shadow: none; -} - -.tabs-overview button.tab-button.active .tab-title { - font-weight: 600; -} - -.tabs-overview button.tab-button::after { - content: ""; - display: block; - position: absolute; - left: 0; - bottom: 0; - right: 0; - height: 0; - width: 0; - margin: 0 auto; - border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; - background-color: var(--primary-color); - transition: - width var(--animation-duration) ease-in-out, - height var(--animation-duration) ease-in-out; -} - -.tabs-overview button.tab-button.active::after { - width: 100%; - box-sizing: border-box; - height: 3px; -} - -.section_buttons:not(:empty) { - margin-top: calc(var(--spacing-large) * 3); -} - -.section_buttons table.markdownTable { - display: block; - width: 100%; -} - -.section_buttons table.markdownTable tbody { - display: table !important; - width: 100%; - box-shadow: none; - border-spacing: 10px; -} - -.section_buttons table.markdownTable td { - padding: 0; -} - -.section_buttons table.markdownTable th { - display: none; -} - -.section_buttons table.markdownTable tr.markdownTableHead { - border: none; -} - -.section_buttons tr th, -.section_buttons tr td { - background: none; - border: none; - padding: var(--spacing-large) 0 var(--spacing-small); -} - -.section_buttons a { - display: inline-block; - border: 1px solid var(--separator-color); - border-radius: var(--border-radius-medium); - color: var(--page-secondary-foreground-color) !important; - text-decoration: none; - transition: - color var(--animation-duration) ease-in-out, - background-color var(--animation-duration) ease-in-out; -} - -.section_buttons a:hover { - color: var(--page-foreground-color) !important; - background-color: var(--odd-color); -} - -.section_buttons tr td.markdownTableBodyLeft a { - padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) - calc(var(--spacing-large) / 2); -} - -.section_buttons tr td.markdownTableBodyRight a { - padding: var(--spacing-medium) calc(var(--spacing-large) / 2) - var(--spacing-medium) var(--spacing-large); -} - -.section_buttons tr td.markdownTableBodyLeft a::before, -.section_buttons tr td.markdownTableBodyRight a::after { - color: var(--page-secondary-foreground-color) !important; - display: inline-block; - transition: - color 0.08s ease-in-out, - transform 0.09s ease-in-out; -} - -.section_buttons tr td.markdownTableBodyLeft a::before { - content: "〈"; - padding-right: var(--spacing-large); -} - -.section_buttons tr td.markdownTableBodyRight a::after { - content: "〉"; - padding-left: var(--spacing-large); -} - -.section_buttons tr td.markdownTableBodyLeft a:hover::before { - color: var(--page-foreground-color) !important; - transform: translateX(-3px); -} - -.section_buttons tr td.markdownTableBodyRight a:hover::after { - color: var(--page-foreground-color) !important; - transform: translateX(3px); -} - -@keyframes slideInMenu { - from { - opacity: 0; - transform: translate(0px, -2px); - } - - to { - opacity: 1; - transform: translate(0px, 0px); - } -} - -@keyframes slideInSearchResults { - from { - opacity: 0; - transform: translate(0, 15px); - } - - to { - opacity: 1; - transform: translate(0, 20px); - } -} - -@media (prefers-color-scheme: dark) { - html:not(.light-mode) { - color-scheme: dark; - --primary-color: #1982d2; - --primary-dark-color: #86a9c4; - --primary-light-color: #4779ac; - --box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.35); - --odd-color: rgba(100, 100, 100, 0.06); - --menu-selected-background: rgba(0, 0, 0, 0.4); - --page-background-color: #0a0a0a; - --page-foreground-color: #d2dbde; - --page-secondary-foreground-color: #859399; - --separator-color: #38393b; - --side-nav-background: #0a0a0a; - --code-background: #2a2c2f; - --tablehead-background: #2a2c2f; - --blockquote-background: #222325; - --blockquote-foreground: #7e8c92; - --warning-color: #3b2e04; - --warning-color-dark: #f1b602; - --warning-color-darker: #ceb670; - --note-color: #163750; - --note-color-dark: #1982d2; - --note-color-darker: #dcf0fa; - --todo-color: #2a2536; - --todo-color-dark: #7661b3; - --todo-color-darker: #ae9ed6; - --deprecated-color: #2e323b; - --deprecated-color-dark: #738396; - --deprecated-color-darker: #abb0bd; - --bug-color: #2e1917; - --bug-color-dark: #ad2617; - --bug-color-darker: #f5b1aa; - --invariant-color: #303a35; - --invariant-color-dark: #76ce96; - --invariant-color-darker: #cceed5; - --fragment-background: #282c34; - --fragment-foreground: #dbe4eb; - --fragment-keyword: #cc99cd; - --fragment-keywordtype: #ab99cd; - --fragment-keywordflow: #e08000; - --fragment-token: #7ec699; - --fragment-comment: #999; - --fragment-link: #98c0e3; - --fragment-preprocessor: #65cabe; - --fragment-linenumber-color: #ccc; - --fragment-linenumber-background: #35393c; - --fragment-linenumber-border: #1f1f1f; - } - - html:not(.light-mode) iframe#MSearchResults { - filter: invert() hue-rotate(180deg); - } - - html:not(.light-mode) div.contents div.dyncontent img, - html:not(.light-mode) div.contents center img, - html:not(.light-mode) div.contents > table img, - html:not(.light-mode) div.contents div.dyncontent iframe, - html:not(.light-mode) div.contents center iframe, - html:not(.light-mode) div.contents table iframe, - html:not(.light-mode) div.contents .dotgraph iframe { - filter: brightness(89%) hue-rotate(180deg) invert(); - } - - html:not(.light-mode) .iconfopen, - html:not(.light-mode) .iconfclosed { - filter: hue-rotate(180deg) invert(); - } -} - -@media screen and (max-width: 450px) { - .section_buttons a { - width: 100%; - box-sizing: border-box; - } - - .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { - border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); - border-right: none; - } - - .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { - border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; - } -} - -@media screen and (max-width: 767px) { - html { - --page-font-size: 16px; - --navigation-font-size: 16px; - --toc-font-size: 12px; - --code-font-size: 12px; - } -} - -@media screen and (max-width: 767px) { - .textblock - > .doxygen-awesome-fragment-wrapper - > doxygen-awesome-fragment-copy-button, - .textblock - li - > .doxygen-awesome-fragment-wrapper - > doxygen-awesome-fragment-copy-button, - .memdoc - li - > .doxygen-awesome-fragment-wrapper - > doxygen-awesome-fragment-copy-button, - .memdoc - > .doxygen-awesome-fragment-wrapper - > doxygen-awesome-fragment-copy-button, - dl - dd - > .doxygen-awesome-fragment-wrapper - > doxygen-awesome-fragment-copy-button { - right: 0; - } -} - -@media screen and (min-width: 767px) { - #top { - display: flex; - flex-wrap: wrap; - justify-content: space-between; - align-items: center; - } -} - -@media screen and (max-width: 767px) { - #titlearea { - padding-bottom: var(--spacing-small); - } -} - -@media screen and (max-width: 767px) { - .sm-dox a span.sub-arrow { - background: var(--code-background); - } - - #main-menu a.has-submenu span.sub-arrow { - color: var(--page-secondary-foreground-color); - border-radius: var(--border-radius-medium); - } - - #main-menu a.has-submenu:hover span.sub-arrow { - color: var(--page-foreground-color); - } -} - -@media screen and (min-width: 767px) { - .sm-dox li, - .tablist li { - display: var(--menu-display); - } - - .sm-dox a span.sub-arrow { - border-color: var(--header-foreground) transparent transparent transparent; - } - - .sm-dox a:hover span.sub-arrow { - border-color: var(--menu-focus-foreground) transparent transparent - transparent; - } - - .sm-dox ul a span.sub-arrow { - border-color: transparent transparent transparent - var(--page-foreground-color); - } - - .sm-dox ul a:hover span.sub-arrow { - border-color: transparent transparent transparent - var(--menu-focus-foreground); - } -} - -@media screen and (max-width: 767px) { - .tabs #MSearchBox { - position: relative; - right: 0; - margin-left: var(--spacing-medium); - margin-top: 0; - } -} - -@media screen and (max-width: 767px) { - #main-menu > li:last-child { - height: 50px; - } -} - -@media screen and (max-width: 767px) { - #MSearchBox { - margin-top: var(--spacing-medium); - margin-bottom: var(--spacing-medium); - width: calc(100vw - 30px); - } - - #main-menu > li:last-child { - float: none !important; - } - - #MSearchField { - width: calc(100vw - 110px); - } - - @keyframes slideInSearchResultsMobile { - from { - opacity: 0; - transform: translate(0, 15px); - } - - to { - opacity: 1; - transform: translate(0, 20px); - } - } - - #MSearchResultsWindow { - left: var(--spacing-medium) !important; - right: var(--spacing-medium); - overflow: auto; - transform: translate(0, 20px); - animation: ease-out 280ms slideInSearchResultsMobile; - } - - label.main-menu-btn ~ #searchBoxPos1 { - top: 3px !important; - right: 6px !important; - left: 45px; - display: flex; - } - - label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { - margin-top: 0; - margin-bottom: 0; - flex-grow: 2; - float: left; - } -} - -@media screen and (max-width: 767px) { - #side-nav { - display: none; - } - - #doc-content { - margin-left: 0 !important; - } -} - -@media screen and (max-width: 767px) { - div.fragment, - pre.fragment { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - border-right: 0; - } - - .contents > div.fragment, - .textblock > div.fragment, - .textblock > pre.fragment, - .textblock > .tabbed > ul > li > div.fragment, - .textblock > .tabbed > ul > li > pre.fragment, - .contents > .doxygen-awesome-fragment-wrapper > div.fragment, - .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, - .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, - .textblock - > .tabbed - > ul - > li - > .doxygen-awesome-fragment-wrapper - > div.fragment, - .textblock - > .tabbed - > ul - > li - > .doxygen-awesome-fragment-wrapper - > pre.fragment { - margin: var(--spacing-medium) calc(0px - var(--spacing-large)); - border-radius: 0; - border-left: 0; - } - - .textblock li > .fragment, - .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { - margin: var(--spacing-medium) calc(0px - var(--spacing-large)); - } - - .memdoc li > .fragment, - .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { - margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); - } - - .textblock ul, - .memdoc ul { - overflow: initial; - } - - .memdoc > div.fragment, - .memdoc > pre.fragment, - dl dd > div.fragment, - dl dd pre.fragment, - .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, - .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, - dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, - dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { - margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); - border-radius: 0; - border-left: 0; - } - - #nav-path { - margin-left: 0 !important; - } -} - -@media screen and (max-width: 767px) { - div.fragment, - pre.fragment { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - border-right: 0; - } - - .contents > div.fragment, - .textblock > div.fragment, - .textblock > pre.fragment, - .textblock > .tabbed > ul > li > div.fragment, - .textblock > .tabbed > ul > li > pre.fragment, - .contents > .doxygen-awesome-fragment-wrapper > div.fragment, - .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, - .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, - .textblock - > .tabbed - > ul - > li - > .doxygen-awesome-fragment-wrapper - > div.fragment, - .textblock - > .tabbed - > ul - > li - > .doxygen-awesome-fragment-wrapper - > pre.fragment { - margin: var(--spacing-medium) calc(0px - var(--spacing-large)); - border-radius: 0; - border-left: 0; - } - - .textblock li > .fragment, - .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { - margin: var(--spacing-medium) calc(0px - var(--spacing-large)); - } - - .memdoc li > .fragment, - .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { - margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); - } - - .textblock ul, - .memdoc ul { - overflow: initial; - } - - .memdoc > div.fragment, - .memdoc > pre.fragment, - dl dd > div.fragment, - dl dd pre.fragment, - .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, - .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, - dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, - dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { - margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); - border-radius: 0; - border-left: 0; - } - - #nav-path { - margin-left: 0 !important; - } -} - -@media screen and (max-width: 767px) { - .tabs-overview-container { - margin: 0 calc(0px - var(--spacing-large)); - } - .tabs-overview { - padding: 0 var(--spacing-large); - } -} - -@media screen and (max-width: 767px) { - table.memberdecls .memItemLeft, - table.memberdecls .memItemRight, - table.memberdecls .mdescLeft, - table.memberdecls .mdescRight, - table.memberdecls .memTemplItemLeft, - table.memberdecls .memTemplItemRight, - table.memberdecls .memTemplParams { - display: block; - text-align: left; - padding-left: var(--spacing-large); - margin: auto; - width: 100%; - box-sizing: border-box; - border-right: none; - border-left: none; - border-radius: 0; - white-space: normal; - } - - table.memberdecls .memItemLeft, - table.memberdecls .mdescLeft, - table.memberdecls .memTemplItemLeft { - border-bottom: 0; - padding-bottom: 0; - } - - table.memberdecls .memTemplItemLeft { - padding-top: 0; - } - - table.memberdecls .mdescLeft { - margin-bottom: calc(0px - var(--page-font-size)); - } - - table.memberdecls .memItemRight, - table.memberdecls .mdescRight, - table.memberdecls .memTemplItemRight { - border-top: 0; - padding-top: 0; - padding-right: var(--spacing-large); - overflow-x: auto; - } - - table.memberdecls tr[class^="memitem"]:not(.inherit) { - display: block; - width: calc(100vw - 2 * var(--spacing-large)); - } - - table.memberdecls .mdescRight { - color: var(--page-foreground-color); - } - - table.memberdecls tr.inherit { - visibility: hidden; - } - - table.memberdecls tr[style="display: table-row;"] { - display: block !important; - visibility: visible; - width: calc(100vw - 2 * var(--spacing-large)); - animation: fade 0.5s; - } - - @keyframes fade { - 0% { - opacity: 0; - max-height: 0; - } - - 100% { - opacity: 1; - max-height: 200px; - } - } -} - -@media screen and (max-width: 767px) { - .contents .dyncontent > .center, - .contents > center { - margin-left: calc(0px - var(--spacing-large)); - margin-right: calc(0px - var(--spacing-large)); - max-width: calc(100% + 2 * var(--spacing-large)); - } -} - -@media screen and (max-width: 767px) { - div.directory { - margin-left: calc(0px - var(--spacing-large)); - margin-right: calc(0px - var(--spacing-large)); - } -} - -@media screen and (min-width: 1000px) { - #doc-content > div > div.contents, - .PageDoc > div.contents { - display: flex; - flex-direction: row-reverse; - flex-wrap: nowrap; - align-items: flex-start; - } - - div.contents .textblock { - min-width: 200px; - flex-grow: 1; - } -} - -@media screen and (max-width: 999px) { - div.contents .toc { - max-height: 45vh; - float: none; - width: auto; - margin: 0 0 var(--spacing-medium) 0; - position: relative; - top: 0; - position: relative; - border: 1px solid var(--separator-color); - border-radius: var(--border-radius-medium); - background-color: var(--toc-background); - box-shadow: var(--box-shadow); - } - - div.contents .toc.interactive { - max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); - overflow: hidden; - } - - div.contents .toc > h3 { - -webkit-tap-highlight-color: transparent; - cursor: pointer; - position: sticky; - top: 0; - background-color: var(--toc-background); - margin: 0; - padding: var(--spacing-large) 0; - display: block; - } - - div.contents .toc.interactive > h3::before { - content: ""; - width: 0; - height: 0; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 5px solid var(--primary-color); - display: inline-block; - margin-right: var(--spacing-small); - margin-bottom: calc(var(--navigation-font-size) / 4); - transform: rotate(-90deg); - transition: transform var(--animation-duration) ease-out; - } - - div.contents .toc.interactive.open > h3::before { - transform: rotate(0deg); - } - - div.contents .toc.interactive.open { - max-height: 45vh; - overflow: auto; - transition: max-height 0.2s ease-in-out; - } - - div.contents .toc a, - div.contents .toc a.active { - color: var(--primary-color) !important; - } - - div.contents .toc a:hover { - text-decoration: underline; - } -} diff --git a/pyproject.toml b/pyproject.toml index a1e7db0..d899f43 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ classifiers = [ ] requires-python = ">=3.8" -dependencies = ["psutil==5.9.1", "SCons==4.3.0"] +dependencies = ["emoji==1.7.0", "psutil==5.9.1", "SCons==4.3.0"] [project.optional-dependencies] all = [ @@ -26,31 +26,40 @@ all = [ "black==22.3.0", "build==1.2.1", "bump2version==1.0.1", + "furo==2024.1.29", "isort==5.10.1", + "matplotlib==3.8.4", "mypy==0.961", + "myst-parser==2.0.0", "pylint==2.17.0", - "pytest==7.1.2", "pytest-cov==5.0.0", + "pytest==7.1.2", + "Sphinx==7.2.6", + "sphinxext-opengraph==0.9.1", + "thx==0.5.1", "trufflehog3==3.0.7", "twine==5.0.0", - "thx==0.5.1", + "walkmate==1.5.0", ] [project.license] +name = "MIT" file = "LICENSE.md" +content-type = "text/markdown" [project.readme] file = "README.md" content-type = "text/markdown" [project.urls] -Homepage = "https://github.com/JoelLefkowitz/miniscons" +homepage = "https://joellefkowitz.github.io/miniscons" +repository = "https://github.com/JoelLefkowitz/miniscons" [[project.authors]] name = "Joel Lefkowitz" email = "joellefkowitz@hotmail.com" -[tool.promoter.metadata] +[tool.metadata] publisher = "PyPI" languages = ["Python"] frameworks = ["SCons"] @@ -81,7 +90,7 @@ format = [ ] test = "pytest . --doctest-modules --cov --cov-report=xml" -docs = "doxygen" +docs = "sphinx-build docs/sphinx docs/dist" [tool.coverage.run] data_file = "coverage/.coverage" diff --git a/src/build.py b/src/build.py index 8251c47..4077d0b 100644 --- a/src/build.py +++ b/src/build.py @@ -9,6 +9,8 @@ class Build: files: list[str] = field(default_factory=list) flags: list[str] = field(default_factory=list) + libs: list[str] = field(default_factory=list) + output: str = "dist" shared: bool = False @@ -19,20 +21,22 @@ def __repr__(self) -> str: def target(self) -> str: return os.path.join(self.output, self.name) + def path(self, file: str) -> str: + root = os.path.splitext(os.path.normpath(file))[0] + return f"{root.replace('.', '-')}-[{self.name}]" + def nodes(self, env: Environment) -> list[str]: return [ - env.Object( - f"{os.path.normpath(file).replace('.', '-')}-{self.name}", - file, - CXXFLAGS=self.flags, - ) + env.Object(self.path(file), file, CXXFLAGS=self.flags) for file in self.files ] def register(self, env: Environment) -> None: + libs = env["LIBS"] + self.libs + if self.shared: - outputs = env.Library(self.target, self.nodes(env)) + outputs = env.Library(self.target, self.nodes(env), LIBS=libs) env.Alias(self.name, outputs[0]) else: - env.Program(self.target, self.nodes(env)) + env.Program(self.target, self.nodes(env), LIBS=libs) env.Alias(self.name, self.target) diff --git a/src/environment.py b/src/environment.py index f620446..937a824 100644 --- a/src/environment.py +++ b/src/environment.py @@ -1,24 +1,34 @@ import os import psutil -from functools import reduce +from emoji import emojize from SCons.Environment import Environment from SCons.Script import SConscript -def conan(libs: list[str], path: str = "SConscript_conandeps") -> Environment: - exports = SConscript(path) - conandeps = exports["conandeps"] +def conan( + path: str = "SConscript_conandeps", defines: list[str] | None = None +) -> tuple[Environment, list[str]]: + if defines is None: + defines = [] - environment = reduce( - lambda acc, x: {k: v + x[k] for k, v in acc.items()}, - [v for k, v in exports.items() if k in libs], - conandeps, - ) + exported = SConscript(path) - environment["LIBS"] = libs + conandeps = exported["conandeps"] + conandeps["CPPDEFINES"].extend(defines) - return Environment( - **environment, + env = Environment( + **conandeps, + CXXCOMSTR=emojize(":wrench: Compiling $TARGET"), + LINKCOMSTR=emojize(":link: Linking $TARGET"), ENV={"PATH": os.getenv("PATH", "")}, num_jobs=psutil.cpu_count(), ) + + includes = [ + include + for dependency in exported.values() + if isinstance(dependency, dict) + for include in dependency["CPPPATH"] + ] + + return (env, includes)