From 5ed12c4574ea5c3cb82aa6c7f77e3003d49442b2 Mon Sep 17 00:00:00 2001 From: Jordan Wiens Date: Tue, 28 Oct 2025 18:39:11 -0400 Subject: simplify CSS, light/dark switch on auto, fix RST tables to be html --- api-docs/cppdocs/Doxyfile-HTML | 20 +- api-docs/cppdocs/binaryninja-darkmode.js | 100 + api-docs/cppdocs/binaryninja-docs.css | 1232 ++++++++ api-docs/cppdocs/custom.css | 200 -- api-docs/cppdocs/doxygen-awesome-css/LICENSE | 21 - api-docs/cppdocs/doxygen-awesome-css/README.md | 4 - .../doxygen-awesome-darkmode-toggle.js | 138 - .../doxygen-awesome-fragment-copy-button.js | 66 - .../doxygen-awesome-paragraph-link.js | 32 - ...oxygen-awesome-sidebar-only-darkmode-toggle.css | 20 - .../doxygen-awesome-sidebar-only.css | 105 - .../doxygen-awesome-css/doxygen-awesome.css | 3020 -------------------- api-docs/cppdocs/header.html | 38 +- binaryninjaapi.h | 189 +- 14 files changed, 1455 insertions(+), 3730 deletions(-) create mode 100644 api-docs/cppdocs/binaryninja-darkmode.js create mode 100644 api-docs/cppdocs/binaryninja-docs.css delete mode 100644 api-docs/cppdocs/custom.css delete mode 100644 api-docs/cppdocs/doxygen-awesome-css/LICENSE delete mode 100644 api-docs/cppdocs/doxygen-awesome-css/README.md delete mode 100644 api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js delete mode 100644 api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js delete mode 100644 api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-paragraph-link.js delete mode 100644 api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css delete mode 100644 api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-sidebar-only.css delete mode 100644 api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome.css diff --git a/api-docs/cppdocs/Doxyfile-HTML b/api-docs/cppdocs/Doxyfile-HTML index e54da627..69cdb814 100644 --- a/api-docs/cppdocs/Doxyfile-HTML +++ b/api-docs/cppdocs/Doxyfile-HTML @@ -334,7 +334,7 @@ MARKDOWN_SUPPORT = NO # Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. -TOC_INCLUDE_HEADINGS = 5 +TOC_INCLUDE_HEADINGS = 0 # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can @@ -1053,7 +1053,7 @@ REFERENCES_LINK_SOURCE = NO # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. -SOURCE_TOOLTIPS = YES +SOURCE_TOOLTIPS = NO # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in @@ -1175,7 +1175,7 @@ HTML_FOOTER = footer.html # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_STYLESHEET = +HTML_STYLESHEET = binaryninja-docs.css # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets @@ -1188,10 +1188,7 @@ HTML_STYLESHEET = # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = doxygen-awesome-css/doxygen-awesome.css \ - doxygen-awesome-css/doxygen-awesome-sidebar-only.css \ - doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css \ - custom.css +HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1201,7 +1198,7 @@ HTML_EXTRA_STYLESHEET = doxygen-awesome-css/doxygen-awesome.css \ # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js +HTML_EXTRA_FILES = binaryninja-darkmode.js # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to @@ -1251,7 +1248,7 @@ HTML_TIMESTAMP = NO # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_DYNAMIC_MENUS = NO +HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the @@ -1259,7 +1256,7 @@ HTML_DYNAMIC_MENUS = NO # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_DYNAMIC_SECTIONS = NO +HTML_DYNAMIC_SECTIONS = YES # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand @@ -1490,6 +1487,9 @@ DISABLE_INDEX = YES GENERATE_TREEVIEW = YES +# Disable the page outline panel on the right side +PAGE_OUTLINE_PANEL = NO + # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # diff --git a/api-docs/cppdocs/binaryninja-darkmode.js b/api-docs/cppdocs/binaryninja-darkmode.js new file mode 100644 index 00000000..aed1b8dd --- /dev/null +++ b/api-docs/cppdocs/binaryninja-darkmode.js @@ -0,0 +1,100 @@ +/** + * Binary Ninja Dark Mode - System Preference with Cookie Persistence + * Follows system color scheme automatically via CSS + * Provides console toggle for testing with cookie-based persistence + */ + +(function() { + 'use strict'; + + const COOKIE_NAME = 'bn-docs-theme'; + const COOKIE_DAYS = 365; + + /** + * Get cookie value by name + */ + function getCookie(name) { + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) return parts.pop().split(';').shift(); + return null; + } + + /** + * Set cookie value + */ + function setCookie(name, value, days) { + const date = new Date(); + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); + const expires = `expires=${date.toUTCString()}`; + document.cookie = `${name}=${value};${expires};path=/`; + } + + /** + * Delete cookie + */ + function deleteCookie(name) { + document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/`; + } + + /** + * Apply theme mode + */ + function applyTheme(mode) { + const html = document.documentElement; + + if (mode === 'dark') { + html.classList.remove('light-mode'); + html.classList.add('dark-mode'); + } else if (mode === 'light') { + html.classList.remove('dark-mode'); + html.classList.add('light-mode'); + } else { + // Auto mode - remove both classes to follow system preference + html.classList.remove('dark-mode'); + html.classList.remove('light-mode'); + } + } + + /** + * Console-accessible toggle function with cookie persistence + * Usage: bnToggleDarkMode('dark'), bnToggleDarkMode('light'), or bnToggleDarkMode('auto') + */ + window.bnToggleDarkMode = function(mode) { + if (mode === 'dark') { + applyTheme('dark'); + setCookie(COOKIE_NAME, 'dark', COOKIE_DAYS); + console.log('Dark mode: FORCED ON (saved to cookie, will persist across reloads)'); + } else if (mode === 'light') { + applyTheme('light'); + setCookie(COOKIE_NAME, 'light', COOKIE_DAYS); + console.log('Dark mode: FORCED OFF (saved to cookie, will persist across reloads)'); + } else if (mode === 'auto') { + applyTheme('auto'); + deleteCookie(COOKIE_NAME); + console.log('Dark mode: AUTO (following system preference, cookie cleared)'); + } else { + console.log('Usage: bnToggleDarkMode("dark"), bnToggleDarkMode("light"), or bnToggleDarkMode("auto")'); + console.log('Current setting:', getCookie(COOKIE_NAME) || 'auto (system preference)'); + } + }; + + /** + * Initialize theme on page load + */ + function init() { + const savedTheme = getCookie(COOKIE_NAME); + + if (savedTheme) { + applyTheme(savedTheme); + console.log(`Binary Ninja Docs: Theme loaded from cookie: ${savedTheme}`); + } else { + console.log('Binary Ninja Docs: Following system preference (no cookie set)'); + } + + console.log('Use bnToggleDarkMode("dark"), bnToggleDarkMode("light"), or bnToggleDarkMode("auto") to change theme'); + } + + // Initialize on page load + init(); +})(); diff --git a/api-docs/cppdocs/binaryninja-docs.css b/api-docs/cppdocs/binaryninja-docs.css new file mode 100644 index 00000000..5079b072 --- /dev/null +++ b/api-docs/cppdocs/binaryninja-docs.css @@ -0,0 +1,1232 @@ +/* Binary Ninja C++ API Documentation Styles + * Clean CSS implementation replacing Doxygen defaults + * No !important declarations needed + */ + +/* ============================================================================ + * CSS VARIABLES - LIGHT MODE (Base) + * ============================================================================ */ +:root { + /* Binary Ninja Brand Colors */ + --bn-red: #c74433; + --bn-red-dark: #d0584d; + --bn-red-light: #a2382a; + + /* Page Structure */ + --page-bg: #ffffff; + --page-text: #2f4153; + --page-text-secondary: #6f7e8e; + --border-color: #dedede; + + /* Sidebar */ + --sidebar-bg: #fbfbfb; + --sidebar-text: #2f4153; + + /* Code/Fragments */ + --code-bg: #f5f5f5; + --code-text: #2f4153; + --fragment-bg: #F8F9FA; + --fragment-text: #37474F; + --fragment-border: #e3e5e7; + + /* Syntax Highlighting (Light) */ + --syntax-keyword: #bb6bb2; + --syntax-type: #8258b3; + --syntax-flow: #d67c3b; + --syntax-string: #438a59; + --syntax-comment: #969696; + --syntax-preprocessor: #46aaa5; + --syntax-link: #5383d6; + + /* Tables */ + --table-header-bg: #f1f1f1; + --table-row-odd: #ffffff; + --table-row-even: #f7f7f7; + + /* Content Boxes */ + --warning-bg: #faf3d8; + --warning-border: #f3a600; + --note-bg: #e4f3ff; + --note-border: #1879C4; + --deprecated-bg: #ecf0f3; + --deprecated-border: #5b6269; + --bug-bg: #f8d1cc; + --bug-border: #b61825; + --todo-bg: #e4dafd; + --todo-border: #5b2bdd; + + /* Typography */ + --font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; + --font-family-monospace: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace; + --font-size-base: 15.6px; + --font-size-code: 14px; + --font-size-nav: 14.4px; + --font-size-title: 22px; + --line-height-content: 27px; + + /* Layout */ + --sidebar-width: 335px; + --top-height: 120px; + --content-maxwidth: 1050px; + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + --spacing-xlarge: 20px; + --border-radius-small: 5px; + --border-radius-medium: 8px; + --border-radius-large: 10px; + --searchbar-height: 33px; + --searchbar-border-radius: 33px; + --tree-item-height: 30px; +} + +/* ============================================================================ + * CSS VARIABLES - DARK MODE + * ============================================================================ */ +html.dark-mode { + color-scheme: dark; + + /* Brand Colors (same) */ + --bn-red: #c74433; + --bn-red-dark: #d0584d; + --bn-red-light: #a2382a; + + /* Page Structure */ + --page-bg: #1C1D1F; + --page-text: #d2dbde; + --page-text-secondary: #859399; + --border-color: #38393b; + + /* Sidebar */ + --sidebar-bg: #252628; + --sidebar-text: #d2dbde; + + /* Code/Fragments */ + --code-bg: #2a2c2f; + --code-text: #d2dbde; + --fragment-bg: #282c34; + --fragment-text: #dbe4eb; + --fragment-border: #1f1f1f; + + /* Syntax Highlighting (Dark) */ + --syntax-keyword: #cc99cd; + --syntax-type: #ab99cd; + --syntax-flow: #e08000; + --syntax-string: #7ec699; + --syntax-comment: #999999; + --syntax-preprocessor: #65cabe; + --syntax-link: #98c0e3; + + /* Tables */ + --table-header-bg: #2a2c2f; + --table-row-odd: #1C1D1F; + --table-row-even: #252628; + + /* Content Boxes */ + --warning-bg: #3b2e04; + --warning-border: #f1b602; + --note-bg: #163750; + --note-border: #1982D2; + --deprecated-bg: #2e323b; + --deprecated-border: #738396; + --bug-bg: #2e1917; + --bug-border: #ad2617; + --todo-bg: #2a2536; + --todo-border: #7661b3; +} + +/* Respect system color preference */ +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --bn-red: #c74433; + --bn-red-dark: #d0584d; + --bn-red-light: #a2382a; + + --page-bg: #1C1D1F; + --page-text: #d2dbde; + --page-text-secondary: #859399; + --border-color: #38393b; + + --sidebar-bg: #252628; + --sidebar-text: #d2dbde; + + --code-bg: #2a2c2f; + --code-text: #d2dbde; + --fragment-bg: #282c34; + --fragment-text: #dbe4eb; + --fragment-border: #1f1f1f; + + --syntax-keyword: #cc99cd; + --syntax-type: #ab99cd; + --syntax-flow: #e08000; + --syntax-string: #7ec699; + --syntax-comment: #999999; + --syntax-preprocessor: #65cabe; + --syntax-link: #98c0e3; + + --table-header-bg: #2a2c2f; + --table-row-odd: #1C1D1F; + --table-row-even: #252628; + + --warning-bg: #3b2e04; + --warning-border: #f1b602; + --note-bg: #163750; + --note-border: #1982D2; + --deprecated-bg: #2e323b; + --deprecated-border: #738396; + --bug-bg: #2e1917; + --bug-border: #ad2617; + --todo-bg: #2a2536; + --todo-border: #7661b3; + } +} + +/* ============================================================================ + * BASE STYLES + * ============================================================================ */ +* { + box-sizing: border-box; +} + +html { + font-size: var(--font-size-base); +} + +body { + margin: 0; + padding: 0; + font-family: var(--font-family); + font-size: var(--font-size-base); + line-height: 1.6; + color: var(--page-text); + background-color: var(--page-bg); +} + +/* ============================================================================ + * TYPOGRAPHY + * ============================================================================ */ +h1, h2, h3, h4, h5, h6 { + margin: 1em 0 0.5em 0; + font-weight: 600; + line-height: 1.3; + color: var(--page-text); +} + +h1 { font-size: 2em; } +h2 { font-size: 1.5em; } +h3 { font-size: 1.25em; } +h4 { font-size: 1.1em; } +h5, h6 { font-size: 1em; } + +p, div, table, dl { + font-size: var(--font-size-base); + line-height: var(--line-height-content); +} + +a { + color: var(--bn-red); + text-decoration: none; + font-weight: 500; +} + +a:hover { + text-decoration: underline; +} + +code, tt { + font-family: var(--font-family-monospace); + font-size: var(--font-size-code); + background-color: var(--code-bg); + color: var(--code-text); + padding: 2px 6px; + border-radius: var(--border-radius-small); + word-wrap: break-word; + overflow-wrap: break-word; +} + +/* ============================================================================ + * HEADER AND TOP NAVIGATION + * ============================================================================ */ +#top { + background: var(--sidebar-bg); + border-bottom: 1px solid var(--border-color); + position: relative; + z-index: 99; + height: var(--top-height); + max-width: var(--sidebar-width); + overflow: hidden; +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: var(--sidebar-bg); + color: var(--page-text); + border-bottom: none; + position: relative; +} + +#titlearea table { + background: transparent; +} + +#titlearea table tbody tr { + height: auto; + background: transparent; +} + +#titlearea table tbody tr td { + background: transparent; +} + +#projectalign { + padding-left: var(--spacing-medium); +} + +#projectname { + font-size: var(--font-size-title); + font-weight: 600; + white-space: nowrap; +} + +#projectname a { + color: var(--page-text); +} + +#projectnumber { + font-family: inherit; + font-size: 60%; + color: var(--page-text-secondary); +} + +#projectlogo img { + max-height: calc(var(--font-size-title) * 2); +} + +tr#projectrow { + margin-top: 7px; + display: block; +} + +/* ============================================================================ + * SIDEBAR LAYOUT (Desktop) + * ============================================================================ */ +#side-nav { + min-width: var(--sidebar-width); + max-width: var(--sidebar-width); + top: var(--top-height); + position: fixed; + left: 0; + bottom: 0; + overflow: visible; + background: var(--sidebar-bg); +} + +#nav-tree, #side-nav { + height: calc(100vh - var(--top-height)); +} + +#top { + position: fixed; + left: 0; + top: 0; + width: var(--sidebar-width); + border-bottom: none; + margin-bottom: calc(0px - var(--top-height)); + background: var(--sidebar-bg); +} + +#main-nav { + float: left; + padding-right: 0; +} + +.ui-resizable-handle { + display: none; +} + +.ui-resizable-e { + width: 0; +} + +#nav-path { + position: fixed; + right: 0; + left: calc(var(--sidebar-width) + 1px); + bottom: 0; + width: auto; + background: var(--page-bg); + border-top: 1px solid var(--border-color); +} + +#container { + min-height: 100vh; + background-color: var(--page-bg); +} + +#doc-content { + min-height: calc(100vh - 31px); + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + padding-left: var(--spacing-large); + padding-right: var(--spacing-large); + box-sizing: border-box; + background-color: var(--page-bg); +} + +#MSearchBox { + width: calc(var(--sidebar-width) - calc(2 * var(--spacing-medium)) - 1px); +} + +#MSearchField { + width: calc(var(--sidebar-width) - calc(2 * var(--spacing-medium)) - 66px); + padding-left: 10px; + top: -1px; +} + +#MSearchResultsWindow { + left: var(--spacing-medium); + right: auto; +} + +#nav-sync { + display: none; +} + +#splitbar { + display: none; +} + +/* ============================================================================ + * RESPONSIVE (Tablet and Mobile) + * ============================================================================ */ + +/* Tablet: Hide sidebar, adjust margins */ +@media screen and (max-width: 1024px) { + #side-nav { + display: none; + } + + #top { + position: relative; + width: 100%; + max-width: none; + border-right: none; + } + + #container { + margin-left: 0; + min-height: 100vh; + } + + #doc-content { + margin-left: 0; + padding-top: var(--spacing-large); + min-height: calc(100vh - var(--spacing-large)); + } + + #nav-path { + position: relative; + left: 0; + right: 0; + width: 100%; + } +} + +/* Mobile: Compact layout */ +@media screen and (max-width: 767px) { + #top { + height: 125px; + } + + #doc-content { + padding-top: 125px; + padding-left: var(--spacing-medium); + padding-right: var(--spacing-medium); + } + + div.contents { + padding: 0 var(--spacing-small); + } + + #MSearchBox { + top: -16px; + } +} + +/* Small mobile: Even more compact */ +@media screen and (max-width: 480px) { + #titlearea { + padding: var(--spacing-small); + } + + div.contents { + padding: 0; + } + + #doc-content { + padding-left: var(--spacing-small); + padding-right: var(--spacing-small); + } +} + +/* ============================================================================ + * SEARCH BAR + * ============================================================================ */ +#titlearea #projectalign + td { + position: absolute; + left: 20px; + top: 80px; +} + +#MSearchBox { + height: var(--searchbar-height); + background: var(--sidebar-bg); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--border-color); + overflow: hidden; + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--bn-red); + box-shadow: inset 0 0 0 1px var(--bn-red); +} + +#MSearchBox span.left { + left: 5px; + top: 1px; + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); + background: none; + background-image: none; +} + +#MSearchField { + font-size: var(--font-size-nav); + font-family: var(--font-family); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + border: none; + color: var(--page-text); +} + +.MSearchBoxActive #MSearchField { + color: var(--page-text); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); + background-repeat: no-repeat; +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; + background-color: var(--page-bg); + border: 1px solid var(--border-color); +} + +/* ============================================================================ + * NAVIGATION TREE + * ============================================================================ */ +#side-nav { + background-color: var(--sidebar-bg); +} + +#nav-tree { + background-color: var(--sidebar-bg); + overflow-x: auto; + overflow-y: auto; +} + +#nav-tree .label { + font-size: var(--font-size-nav); + color: var(--sidebar-text); +} + +#nav-tree a { + color: var(--sidebar-text); + text-decoration: none; +} + +#nav-tree a:hover { + text-decoration: underline; +} + +#nav-tree .arrow { + opacity: 0.6; + transition: opacity 0.2s; +} + +#nav-tree .item:hover .arrow { + opacity: 1; +} + +#nav-tree .selected { + background-color: var(--bn-red); + color: #ffffff; +} + +#nav-tree .selected a { + color: #ffffff; +} + +html.dark-mode #nav-tree .selected { + background-color: var(--bn-red); + color: #ffffff; +} + +html.dark-mode #nav-tree .selected a { + color: #ffffff; +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); +} + +#nav-tree .item:hover { + background-color: rgba(0,0,0,.05); +} + +html.dark-mode #nav-tree .item:hover { + background-color: rgba(0,0,0,.4); +} + +/* Undecorated root node */ +.children_ul a.index\.html { + display: initial; +} + +a.index\.html { + display: none; +} + +#nav-tree-contents > ul > li > .item { + height: 0px; +} + +/* ============================================================================ + * COLLAPSIBLE SECTIONS (dynsections.js) + * ============================================================================ */ +.arrowhead { + display: inline-block; + margin-right: 5px; + opacity: 0; + transition: opacity 0.2s; + font-size: 11px; + line-height: 1; + color: var(--text-color); +} + +.arrow:hover .arrowhead, +tr:hover .arrowhead { + opacity: 1; +} + +/* Right-pointing triangle when closed */ +.arrowhead.closed::before { + content: '▶'; +} + +/* Down-pointing triangle when opened */ +.arrowhead.opened::before { + content: '▼'; +} + +/* ============================================================================ + * CONTENT AREA + * ============================================================================ */ +div.contents, div.header .title, div.header .summary { + max-width: 100%; +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) 0 var(--spacing-medium) 0; +} + +div.header .summary { + margin: var(--spacing-medium) 0 0 0; +} + +div.headertitle { + padding: 0; + border-bottom: 0; + background-color: var(--page-bg); +} + +div.headertitle .title { + font-size: 2em; + font-weight: 600; + margin: var(--spacing-large) 0; +} + +div.contents { + padding: 0 var(--spacing-xlarge); +} + +div.contents p, div.contents li { + line-height: var(--line-height-content); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media screen and (max-width: 767px) { + div.contents { + padding: 0 var(--spacing-large); + } + + div.header .title { + padding: var(--spacing-medium) var(--spacing-large); + } +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +.contents hr { + border: none; + border-top: 1px solid var(--border-color); + margin: var(--spacing-large) 0; +} + +/* ============================================================================ + * TABLES + * ============================================================================ */ +table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + word-wrap: break-word; +} + +/* Content tables (HTML tables in documentation) */ +div.contents > table, +div.contents p + table, +div.textblock table { + margin: var(--spacing-medium) 0; + border: 1px solid var(--border-color); +} + +div.contents > table th, +div.contents p + table th, +div.textblock table th { + background-color: var(--table-header-bg); + color: var(--page-text); + padding: var(--spacing-small) var(--spacing-medium); + text-align: left; + border: 1px solid var(--border-color); + font-weight: 600; +} + +div.contents > table td, +div.contents p + table td, +div.textblock table td { + padding: var(--spacing-small) var(--spacing-medium); + border: 1px solid var(--border-color); + vertical-align: top; +} + +div.contents > table tr:nth-child(odd), +div.contents p + table tr:nth-child(odd), +div.textblock table tr:nth-child(odd) { + background-color: var(--page-bg); +} + +div.contents > table tr:nth-child(even), +div.contents p + table tr:nth-child(even), +div.textblock table tr:nth-child(even) { + background-color: var(--table-row-even); +} + +table.memberdecls { + width: 100%; +} + +table.memberdecls .memItemLeft { + white-space: normal; + word-wrap: break-word; + overflow-wrap: break-word; + padding: var(--spacing-small) var(--spacing-medium); + border-bottom: 1px solid var(--border-color); + width: 40%; +} + +table.memberdecls .memItemRight { + padding: var(--spacing-small) var(--spacing-medium); + border-bottom: 1px solid var(--border-color); + word-wrap: break-word; + overflow-wrap: break-word; + width: 60%; +} + +table.memberdecls td { + vertical-align: top; +} + +/* Markdown tables */ +table.markdownTable { + border-collapse: collapse; + width: 100%; + margin: var(--spacing-medium) 0; + border: 1px solid var(--border-color); +} + +table.markdownTable th { + background-color: var(--sidebar-bg); + color: var(--sidebar-text); + padding: var(--spacing-small) var(--spacing-medium); + text-align: left; + border: 1px solid var(--border-color); + font-weight: 600; +} + +table.markdownTable td { + padding: var(--spacing-small) var(--spacing-medium); + border: 1px solid var(--border-color); + vertical-align: top; +} + +table.markdownTable tr.markdownTableRowOdd { + background-color: var(--fragment-bg); +} + +table.markdownTable tr.markdownTableRowEven { + background-color: var(--page-bg); +} + +/* Detail level labels (default, inline, virtual, etc.) */ +table.mlabels { + border-spacing: 0; +} + +table.mlabels td.mlabels-left { + width: 100%; +} + +table.mlabels td.mlabels-right { + vertical-align: bottom; +} + +span.mlabel { + background: var(--bn-red); + color: #ffffff; + margin-left: 2px; + padding: 2px 5px; + border-radius: 6px; + font-size: 9pt; + white-space: nowrap; + font-weight: 600; +} + +/* Function signature tables */ +table.memname { + font-family: var(--font-family-monospace); + color: var(--code-text); + border-collapse: collapse; + border-spacing: 0; + width: auto; + table-layout: auto; +} + +table.memname td { + vertical-align: top; + font-family: var(--font-family-monospace); + padding: 0 10px 0 0; +} + +/* Keep function name on first column from wrapping */ +table.memname td.memname { + white-space: nowrap; + width: 1%; +} + +/* Constrain parameter type column width */ +table.memname td.paramtype { + white-space: nowrap; + width: 1%; +} + +/* Parameter names should not wrap and stay compact */ +table.memname td.paramname { + white-space: nowrap; +} + +/* Empty cells (paramkey) should not take space */ +table.memname td.paramkey { + width: 1%; +} + +/* Type/Namespace icons (C, N, S, etc.) */ +.icon { + display: inline-block; + background-color: var(--bn-red); + color: #ffffff; + font-family: var(--font-family-monospace); + font-size: 11px; + font-weight: 700; + padding: 3px 5px 2px 5px; + margin-right: 6px; + border-radius: 3px; + text-align: center; + min-width: 16px; + line-height: 1.2; + vertical-align: middle; +} + +table thead th { + background-color: var(--table-header-bg); + color: var(--page-text); + font-weight: 600; + padding: var(--spacing-small) var(--spacing-medium); + border-bottom: 1px solid var(--border-color); +} + +table tbody tr:nth-child(odd) { + background-color: var(--table-row-odd); +} + +table tbody tr:nth-child(even) { + background-color: var(--table-row-even); +} + +/* ============================================================================ + * CODE BLOCKS AND FRAGMENTS + * ============================================================================ */ +pre.fragment, div.fragment { + font-family: var(--font-family-monospace); + font-size: var(--font-size-code); + background-color: var(--fragment-bg); + color: var(--fragment-text); + border-radius: var(--border-radius-small); + padding: var(--spacing-medium); + overflow-x: auto; + overflow-y: auto; + border: 1px solid var(--fragment-border); + max-width: 100%; +} + +.line { + line-height: 20px; + font-family: var(--font-family-monospace); +} + +.lineno { + color: #797979; + background-color: #f4f4f5; + border-right: 1px solid var(--fragment-border); + padding-right: 8px; + padding-left: 8px; + margin-right: 8px; +} + +html.dark-mode .lineno { + color: #cccccc; + background-color: #35393c; +} + +/* Syntax highlighting */ +span.keyword { color: var(--syntax-keyword); } +span.keywordtype { color: var(--syntax-type); } +span.keywordflow { color: var(--syntax-flow); } +span.stringliteral { color: var(--syntax-string); } +span.comment { color: var(--syntax-comment); } +span.preprocessor { color: var(--syntax-preprocessor); } +span.lineno a { color: var(--syntax-comment); } + +/* ============================================================================ + * CONTENT BOXES (@note, @warning, etc.) + * ============================================================================ */ +dl.warning, dl.attention { + background-color: var(--warning-bg); + border-left: 4px solid var(--warning-border); + padding: var(--spacing-medium); + border-radius: var(--border-radius-small); + margin: var(--spacing-medium) 0; +} + +dl.note { + background-color: var(--note-bg); + border-left: 4px solid var(--note-border); + padding: var(--spacing-medium); + border-radius: var(--border-radius-small); + margin: var(--spacing-medium) 0; +} + +dl.todo { + background-color: var(--todo-bg); + border-left: 4px solid var(--todo-border); + padding: var(--spacing-medium); + border-radius: var(--border-radius-small); + margin: var(--spacing-medium) 0; +} + +dl.deprecated { + background-color: var(--deprecated-bg); + border-left: 4px solid var(--deprecated-border); + padding: var(--spacing-medium); + border-radius: var(--border-radius-small); + margin: var(--spacing-medium) 0; +} + +dl.bug { + background-color: var(--bug-bg); + border-left: 4px solid var(--bug-border); + padding: var(--spacing-medium); + border-radius: var(--border-radius-small); + margin: var(--spacing-medium) 0; +} + +/* ============================================================================ + * MEMBER DOCUMENTATION + * ============================================================================ */ +.memitem { + margin-bottom: var(--spacing-large); + position: relative; +} + +.memtitle { + background-color: var(--code-bg); + border: 1px solid var(--border-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding: var(--spacing-small) var(--spacing-medium); + font-size: 18px; + font-weight: 600; + font-family: var(--font-family-monospace); +} + +.memname { + font-family: var(--font-family-monospace); +} + +.memdoc { + border: 1px solid var(--border-color); + border-top: none; + border-radius: 0 0 var(--border-radius-small) var(--border-radius-small); + padding: var(--spacing-medium); + background-color: var(--page-bg); +} + +.memproto { + background-color: var(--fragment-bg); + border: 1px solid var(--border-color); + padding: var(--spacing-small) var(--spacing-medium); + border-radius: var(--border-radius-small); +} + +.paramname { + color: var(--bn-red-light); + font-style: italic; +} + +.paramtype .el { + color: var(--bn-red-dark); +} + +/* ============================================================================ + * THREAD SAFETY BADGES (Binary Ninja specific) + * ============================================================================ */ +dl.threadsafe { + position: absolute; + top: 0px; + right: 8px; + margin-top: 10px; + background-color: #d0d6e2; + font-weight: normal; + padding: 2px 10px; + border-radius: 4px; +} + +html.dark-mode dl.threadsafe { + background-color: #434956; +} + +.threadsafe dt { + padding-right: 35px; +} + +.threadsafe.Main.Thread.Only dt { + padding-right: 145px; +} + +.threadsafe.Yes dd { + display: inline; + margin-inline-start: 0; + position: absolute; + top: 1px; + right: 1px; + padding: 1px 6px 1px 5px; + background-color: #9af78c; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + width: 25px; + text-align: center; +} + +html.dark-mode .threadsafe.Yes dd { + background-color: #4e8646; +} + +.threadsafe.No dd { + display: inline; + margin-inline-start: 0; + position: absolute; + top: 1px; + right: 1px; + padding: 1px 6px 1px 5px; + background-color: #fb877d; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + width: 25px; + text-align: center; +} + +html.dark-mode .threadsafe.No dd { + background-color: #d0584d; +} + +.threadsafe.Main.Thread.Only dd { + display: inline; + margin-inline-start: 0; + position: absolute; + top: 1px; + right: 1px; + padding: 1px 6px 1px 5px; + background-color: #fb877d; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + width: 135px; + text-align: center; +} + +html.dark-mode .threadsafe.Main.Thread.Only dd { + background-color: #d0584d; +} + +img.thread { + max-width: 15px; + position: relative; + top: 2px; + padding-right: 3px; +} + +html.dark-mode img.thread { + filter: invert(0.7); +} + +/* ============================================================================ + * BINARY NINJA CUSTOMIZATIONS + * ============================================================================ */ + +/* External link icon */ +div.contents a[href^="http"]:after { + content: " " url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVR4Xn3PgQkAMQhDUXfqTu7kTtkpd5RA8AInfArtQ2iRXFWT2QedAfttj2FsPIOE1eCOlEuoWWjgzYaB/IkeGOrxXhqB+uA9Bfcm0lAZuh+YIeAD+cAqSz4kCMUAAAAASUVORK5CYII=); +} + +/* GitHub logo */ +.githublogo { + content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RERCMUIwOUY4NkNFMTFFM0FBNTJFRTMzNTJEMUJDNDYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RERCMUIwOUU4NkNFMTFFM0FBNTJFRTMzNTJEMUJDNDYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkU1MTc4QTJBOTlBMDExRTI5QTE1QkMxMDQ2QTg5MDREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkU1MTc4QTJCOTlBMDExRTI5QTE1QkMxMDQ2QTg5MDREIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+jUqS1wAAApVJREFUeNq0l89rE1EQx3e3gVJoSPzZeNEWPKgHoa0HBak0iHiy/4C3WvDmoZ56qJ7txVsPQu8qlqqHIhRKJZceesmhioQEfxTEtsoSpdJg1u/ABJ7Pmc1m8zLwgWTmzcw3L+/te+tHUeQltONgCkyCi2AEDHLsJ6iBMlgHL8FeoqokoA2j4CloRMmtwTmj7erHBXPgCWhG6a3JNXKdCiDl1sidVbXZkJoXQRi5t5BrxwoY71FzU8S4JuAIqFkJ2+BFSlEh525b/hr3+k/AklDkNsf6wTT4yv46KIMNpsy+iMdMc47HNWxbsgVcUn7FmLAzzoFAWDsBx+wVP6bUpp5ewI+DOeUx0Wd9D8F70BTGNjkWtqnhmT1JQAHcUgZd8Lo3rQb1LAT8eJVUfgGvHQigGp+V2Z0iAUUl8QH47kAA1XioxIo+bRN8OG8F/oBjwv+Z1nJgX5jpdzQDw0LCjsPmrcW7I/iHScCAEDj03FtD8A0EyuChHgg4KTlJQF3wZ7WELppnBX+dBFSVpJsOBWi1qiRgSwnOgoyD5hmuJdkWCVhTgnTvW3AgYIFrSbZGh0UW/Io5Vp+DQoK7o80pztWMemZbgxeNwCNwDbw1fIfgGZjhU6xPaJgBV8BdsMw5cbZoHsenwYFxkZzl83xTSKTiviCAfCsJLysH3POfC8m8NegyGAGfLP/VmGmfSChgXroR0RSWjEFv2J/nG84cuKFMf4sTCZqXuJd4KaXFVjEG3+tw4eXbNK/YC9oXXs3O8NY8y99L4BXY5cvLY/Bb2VZ58EOJVcB18DHJq9lRsKr8inyKGVjlmh29mtHs3AHfuhCwy1vXT/Nu2GKQt+UHsGdctyX6eQyNvc+5sfX9Dl7Pe2J/BRgAl2CpwmrsHR0AAAAASUVORK5CYII=); +} + +/* Group headers */ +td h2.groupheader, h2.groupheader { + border-bottom: 0px; + color: var(--page-text); + background: var(--page-bg); + font-weight: 600; + margin-top: var(--spacing-large); +} + +/* Table of Contents - Disabled */ +div.contents .toc { + display: none; +} + +div.toc { + display: none; +} + +/* ============================================================================ + * SCROLLBAR STYLING + * ============================================================================ */ +::-webkit-scrollbar { + width: 7px; + height: 7px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background-color: var(--border-color); + border-radius: var(--border-radius-small); +} + +::-webkit-scrollbar-thumb:hover { + background-color: var(--page-text-secondary); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb { + background-color: transparent; + border: 4px solid transparent; + border-radius: 12px; + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb { + background-color: var(--border-color); +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--sidebar-bg); +} + +/* Firefox scrollbar */ +#nav-tree, +div.fragment, +pre.fragment { + scrollbar-width: thin; + scrollbar-color: var(--border-color) transparent; +} + +/* ============================================================================ + * DARK MODE TOGGLE (Hidden - CSS-only system preference) + * ============================================================================ */ +#bn-darkmode-toggle { + display: none; +} + +/* ============================================================================ + * IMAGE HANDLING IN DARK MODE + * ============================================================================ */ +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +html.dark-mode .darkmode_inverted_image img, +html.dark-mode .darkmode_inverted_image object[type="image/svg+xml"] { + filter: brightness(89%) hue-rotate(180deg) invert(); +} diff --git a/api-docs/cppdocs/custom.css b/api-docs/cppdocs/custom.css deleted file mode 100644 index 3c7b8483..00000000 --- a/api-docs/cppdocs/custom.css +++ /dev/null @@ -1,200 +0,0 @@ - -/* external link icon */ -div.contents a[href ^= "http"]:after { - content: " " url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVR4Xn3PgQkAMQhDUXfqTu7kTtkpd5RA8AInfArtQ2iRXFWT2QedAfttj2FsPIOE1eCOlEuoWWjgzYaB/IkeGOrxXhqB+uA9Bfcm0lAZuh+YIeAD+cAqSz4kCMUAAAAASUVORK5CYII=); -} - -.githublogo { - content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RERCMUIwOUY4NkNFMTFFM0FBNTJFRTMzNTJEMUJDNDYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RERCMUIwOUU4NkNFMTFFM0FBNTJFRTMzNTJEMUJDNDYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkU1MTc4QTJBOTlBMDExRTI5QTE1QkMxMDQ2QTg5MDREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkU1MTc4QTJCOTlBMDExRTI5QTE1QkMxMDQ2QTg5MDREIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+jUqS1wAAApVJREFUeNq0l89rE1EQx3e3gVJoSPzZeNEWPKgHoa0HBak0iHiy/4C3WvDmoZ56qJ7txVsPQu8qlqqHIhRKJZceesmhioQEfxTEtsoSpdJg1u/ABJ7Pmc1m8zLwgWTmzcw3L+/te+tHUeQltONgCkyCi2AEDHLsJ6iBMlgHL8FeoqokoA2j4CloRMmtwTmj7erHBXPgCWhG6a3JNXKdCiDl1cidVbXZkJoXQRi5t5BrxwoY71FzU8S4JuAIqFkJ2+BFSlEh525b/hr3+k/AklDkNsf6wTT4yv46KIMNpsy+iMdMc47HNWxbsgVcUn7FmLAzzoFAWDsBx+wVP6bUpp5ewI+DOeUx0Wd9D8F70BTGNjkWtqnhmT1JQAHcUgZd8Lo3rQb1LAT8eJVUfgGvHQigGp+V2Z0iAUUl8QH47kAA1XioxIo+bRN8OG8F/oBjwv+Z1nJgX5jpdzQDw0LCjsPmrcW7I/iHScCAEDj03FtD8A0EyuChHgg4KTlJQF3wZ7WELppnBX+dBFSVpJsOBWi1qiRgSwnOgoyD5hmuJdkWCVhTgnTvW3AgYIFrSbZGh0UW/Io5Vp+DQoK7o80pztWMemZbgxeNwCNwDbw1fIfgGZjhU6xPaJgBV8BdsMw5cbZoHsenwYFxkZzl83xTSKTiviCAfCsJLysH3POfC8m8NegyGAGfLP/VmGmfSChgXroR0RSWjEFv2J/nG84cuKFMf4sTCZqXuJd4KaXFVjEG3+tw4eXbNK/YC9oXXs3O8NY8y99L4BXY5cvLY/Bb2VZ58EOJVcB18DHJq9lRsKr8inyKGVjlmh29mtHs3AHfuhCwy1vXT/Nu2GKQt+UHsGdctyX6eQyNvc+5sfX9Dl7Pe2J/BRgAl2CpwmrsHR0AAAAASUVORK5CYII=); -} - -/* search bar wrapper */ -#titlearea #projectalign + td { - position: absolute; - left: 20px; - top: 80px; -} - -doxygen-awesome-dark-mode-toggle { - display: inline-block !important; - position: absolute; - right: -27px; - top: 0px; - padding-top: 5px; - height: 29px; -} -/* -Doxygen by default does this horrible table layout thing where it tries to figure the default width of the left - column by taking the largest item in that column (the type), unwrapped, and making that the width for the entire column -We are working with C++, type declarations can be massive. So lock it to 350px and turn on word wrapping for the Types - column. -*/ -table.memberdecls .memItemLeft { - white-space: normal; - min-width: 350px; -} - -html.dark-mode { - --primary-color: #c74433!important; - --primary-dark-color: #d0584d !important;; - --primary-light-color: #a2382a !important;; -} -html { - --primary-color: #c74433!important; - --primary-dark-color: #d0584d !important;; - --primary-light-color: #a2382a !important;; -} - -.paramname { - color: var(--primary-light-color); -} -.paramtype .el { - color: var(--primary-dark-color) !important; -} - -tr#projectrow { - margin-top: 7px; - display: block; -} - -#MSearchBox span.left { - left: 5px; - top: 1px; -} - -input#MSearchField { - padding-left: 10px; - top: -1px; -} - -#MSearchSelect { - background-repeat: no-repeat !important; -} - -/* Replicating an "undecorated root node" */ - -.children_ul a.index\.html { - display: initial !important; -} - -a.index\.html { - display: none; -} - - -#nav-tree-contents > ul > li > .item { - height: 0px; -} - -/* --- */ - -/* Move the "Deprecated Items" item to the end of the list. */ -#nav-tree-contents > ul > li > ul.children_ul { - margin: 0px; - padding: 0px; - display: flex!important; - flex-direction: column!important; -} -#nav-tree-contents > ul > li > ul > li:nth-of-type(2) { - order: 9999999; -} - -/* Basic Mobile functionality fixes */ -@media screen and (max-width: 767px) { - div#top { - height: 125px; - } - div#MSearchBox { - top: -16px; - } - doxygen-awesome-dark-mode-toggle { - padding-top: 0px; - right: -22px; - } -} - -.memitem { - position:relative; -} - -dl.threadsafe { - position: absolute; - top: 0px; - right: 8px; - margin-top: 10px; - background-color: #434956; - font-weight: normal; - padding: 2px 10px; - border-radius: 4px; -} -.threadsafe dt { - padding-right: 35px; -} -.threadsafe.Main.Thread.Only dt { - padding-right: 145px; -} -.threadsafe.Yes dd { - display: inline!important; - margin-inline-start: 0; - position: absolute; - top: 1px; - right: 1px; - padding: 1px 6px 1px 5px; - background-color: #4e8646; - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; - width: 25px; - text-align: center; -} - -.threadsafe.No dd { - display: inline!important; - margin-inline-start: 0; - position: absolute; - top: 1px; - right: 1px; - padding: 1px 6px 1px 5px; - background-color: #d0584d; - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; - width: 25px; - text-align: center; -} - -.threadsafe.Main.Thread.Only dd { - display: inline!important; - margin-inline-start: 0; - position: absolute; - top: 1px; - right: 1px; - padding: 1px 6px 1px 5px; - background-color: #d0584d; - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; - width: 135px; - text-align: center; -} - -.light-mode dl.threadsafe { - background-color: #d0d6e2; -} -.light-mode .threadsafe.Yes dd { - background-color: #9af78c; -} -.light-mode .threadsafe.No dd { - background-color: #fb877d; -} -.light-mode .threadsafe.Main.Thread.Only dd { - background-color: #fb877d; -} - -img.thread { - max-width: 15px; - position: relative; - top: 2px; - padding-right: 3px; -} - -.dark-mode img.thread { - filter: invert(0.7); -} diff --git a/api-docs/cppdocs/doxygen-awesome-css/LICENSE b/api-docs/cppdocs/doxygen-awesome-css/LICENSE deleted file mode 100644 index 1d8b99a9..00000000 --- a/api-docs/cppdocs/doxygen-awesome-css/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 jothepro - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/api-docs/cppdocs/doxygen-awesome-css/README.md b/api-docs/cppdocs/doxygen-awesome-css/README.md deleted file mode 100644 index b823a109..00000000 --- a/api-docs/cppdocs/doxygen-awesome-css/README.md +++ /dev/null @@ -1,4 +0,0 @@ -This doxygen theme is from https://github.com/jothepro/doxygen-awesome-css - -Do not edit any of the files in this directory unless *absolutely necessary*; instead edit ../custom.css . - diff --git a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js b/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js deleted file mode 100644 index 440e4e08..00000000 --- a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js +++ /dev/null @@ -1,138 +0,0 @@ -// SPDX-License-Identifier: MIT -/** - -Doxygen Awesome -https://github.com/jothepro/doxygen-awesome-css - -Copyright (c) 2021 - 2025 jothepro - -*/ - -class DoxygenAwesomeDarkModeToggle extends HTMLElement { - // SVG icons from https://fonts.google.com/icons - // Licensed under the Apache 2.0 license: - // https://www.apache.org/licenses/LICENSE-2.0.html - static lightModeIcon = `` - static darkModeIcon = `` - static title = "Toggle Light/Dark Mode" - - static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" - static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" - - static _staticConstructor = function() { - DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference) - // Update the color scheme when the browsers preference changes - // without user interaction on the website. - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { - DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() - }) - // Update the color scheme when the tab is made visible again. - // It is possible that the appearance was changed in another tab - // while this tab was in the background. - document.addEventListener("visibilitychange", visibilityState => { - if (document.visibilityState === 'visible') { - DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() - } - }); - }() - - static init() { - $(function() { - $(document).ready(function() { - const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle') - toggleButton.title = DoxygenAwesomeDarkModeToggle.title - toggleButton.updateIcon() - - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { - toggleButton.updateIcon() - }) - document.addEventListener("visibilitychange", visibilityState => { - if (document.visibilityState === 'visible') { - toggleButton.updateIcon() - } - }); - - $(document).ready(function(){ - document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) - }) - $(window).resize(function(){ - document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) - }) - }) - }) - } - - constructor() { - super(); - this.onclick=this.toggleDarkMode - } - - /** - * @returns `true` for dark-mode, `false` for light-mode system preference - */ - static get systemPreference() { - return window.matchMedia('(prefers-color-scheme: dark)').matches - } - - /** - * @returns `true` for dark-mode, `false` for light-mode user preference - */ - static get userPreference() { - return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) || - (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)) - } - - static set userPreference(userPreference) { - DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference - if(!userPreference) { - if(DoxygenAwesomeDarkModeToggle.systemPreference) { - localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true) - } else { - localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey) - } - } else { - if(!DoxygenAwesomeDarkModeToggle.systemPreference) { - localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true) - } else { - localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey) - } - } - DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged() - } - - static enableDarkMode(enable) { - if(enable) { - DoxygenAwesomeDarkModeToggle.darkModeEnabled = true - document.documentElement.classList.add("dark-mode") - document.documentElement.classList.remove("light-mode") - } else { - DoxygenAwesomeDarkModeToggle.darkModeEnabled = false - document.documentElement.classList.remove("dark-mode") - document.documentElement.classList.add("light-mode") - } - } - - static onSystemPreferenceChanged() { - DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference - DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) - } - - static onUserPreferenceChanged() { - DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) - } - - toggleDarkMode() { - DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference - this.updateIcon() - } - - updateIcon() { - if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) { - this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon - } else { - this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon - } - } -} - -customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle); diff --git a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js b/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js deleted file mode 100644 index e0994dca..00000000 --- a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: MIT -/** - -Doxygen Awesome -https://github.com/jothepro/doxygen-awesome-css - -Copyright (c) 2022 - 2025 jothepro - -*/ - -class DoxygenAwesomeFragmentCopyButton extends HTMLElement { - constructor() { - super(); - this.onclick=this.copyContent - } - static title = "Copy to clipboard" - static copyIcon = `` - static successIcon = `` - static successDuration = 980 - static init() { - $(function() { - $(document).ready(function() { - if(navigator.clipboard) { - const fragments = document.getElementsByClassName("fragment") - for(const fragment of fragments) { - const fragmentWrapper = document.createElement("div") - fragmentWrapper.className = "doxygen-awesome-fragment-wrapper" - const fragmentCopyButton = document.createElement("doxygen-awesome-fragment-copy-button") - fragmentCopyButton.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon - fragmentCopyButton.title = DoxygenAwesomeFragmentCopyButton.title - - fragment.parentNode.replaceChild(fragmentWrapper, fragment) - fragmentWrapper.appendChild(fragment) - fragmentWrapper.appendChild(fragmentCopyButton) - - } - } - }) - }) - } - - - copyContent() { - const content = this.previousSibling.cloneNode(true) - // filter out line number from file listings - content.querySelectorAll(".lineno, .ttc").forEach((node) => { - node.remove() - }) - let textContent = content.textContent - // remove trailing newlines that appear in file listings - let numberOfTrailingNewlines = 0 - while(textContent.charAt(textContent.length - (numberOfTrailingNewlines + 1)) == '\n') { - numberOfTrailingNewlines++; - } - textContent = textContent.substring(0, textContent.length - numberOfTrailingNewlines) - navigator.clipboard.writeText(textContent); - this.classList.add("success") - this.innerHTML = DoxygenAwesomeFragmentCopyButton.successIcon - window.setTimeout(() => { - this.classList.remove("success") - this.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon - }, DoxygenAwesomeFragmentCopyButton.successDuration); - } -} - -customElements.define("doxygen-awesome-fragment-copy-button", DoxygenAwesomeFragmentCopyButton) diff --git a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-paragraph-link.js b/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-paragraph-link.js deleted file mode 100644 index 1c4c227e..00000000 --- a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-paragraph-link.js +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -/** - -Doxygen Awesome -https://github.com/jothepro/doxygen-awesome-css - -Copyright (c) 2022 - 2025 jothepro - -*/ - -class DoxygenAwesomeParagraphLink { - // Icon from https://fonts.google.com/icons - // Licensed under the Apache 2.0 license: - // https://www.apache.org/licenses/LICENSE-2.0.html - static icon = `` - static title = "Permanent Link" - static init() { - $(function() { - $(document).ready(function() { - document.querySelectorAll(".contents a.anchor[id], .contents .groupheader > a[id]").forEach((node) => { - let anchorlink = document.createElement("a") - anchorlink.setAttribute("href", `#${node.getAttribute("id")}`) - anchorlink.setAttribute("title", DoxygenAwesomeParagraphLink.title) - anchorlink.classList.add("anchorlink") - node.classList.add("anchor") - anchorlink.innerHTML = DoxygenAwesomeParagraphLink.icon - node.parentElement.appendChild(anchorlink) - }) - }) - }) - } -} diff --git a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css b/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css deleted file mode 100644 index 2ab5c768..00000000 --- a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css +++ /dev/null @@ -1,20 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/** - -Doxygen Awesome -https://github.com/jothepro/doxygen-awesome-css - -Copyright (c) 2021 - 2025 jothepro - -*/ - -@media screen and (min-width: 768px) { - - #MSearchBox { - width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - var(--searchbar-height) - 1px); - } - - #MSearchField { - width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 66px - var(--searchbar-height)); - } -} diff --git a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-sidebar-only.css b/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-sidebar-only.css deleted file mode 100644 index f7c644d6..00000000 --- a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome-sidebar-only.css +++ /dev/null @@ -1,105 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/** - -Doxygen Awesome -https://github.com/jothepro/doxygen-awesome-css - -Copyright (c) 2021 - 2025 jothepro - - */ - -html { - /* side nav width. MUST be = `TREEVIEW_WIDTH`. - * Make sure it is wide enough to contain the page title (logo + title + version) - */ - --side-nav-fixed-width: 335px; - --menu-display: none; - - --top-height: 120px; - --toc-sticky-top: -25px; - --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); -} - -#projectname { - white-space: nowrap; -} - - -@media screen and (min-width: 768px) { - html { - --searchbar-background: var(--page-background-color); - } - - #side-nav { - min-width: var(--side-nav-fixed-width); - max-width: var(--side-nav-fixed-width); - top: var(--top-height); - overflow: visible; - } - - #nav-tree, #side-nav { - height: calc(100vh - var(--top-height)) !important; - } - - #top { - display: block; - border-bottom: none; - height: var(--top-height); - margin-bottom: calc(0px - var(--top-height)); - max-width: var(--side-nav-fixed-width); - overflow: hidden; - background: var(--side-nav-background); - } - - #main-nav { - float: left; - padding-right: 0; - } - - .ui-resizable-handle { - display: none; - } - - .ui-resizable-e { - width: 0; - } - - #nav-path { - position: fixed; - right: 0; - left: calc(var(--side-nav-fixed-width) + 1px); - bottom: 0; - width: auto; - } - - #doc-content { - height: calc(100vh - 31px) !important; - padding-bottom: calc(3 * var(--spacing-large)); - padding-top: calc(var(--top-height) - 80px); - box-sizing: border-box; - margin-left: var(--side-nav-fixed-width) !important; - } - - #MSearchBox { - width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); - } - - #MSearchField { - width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); - } - - #MSearchResultsWindow { - left: var(--spacing-medium) !important; - right: auto; - } - - #nav-sync { - bottom: 4px; - right: auto; - left: 300px; - width: 35px; - top: auto !important; - user-select: none; - position: fixed - } -} diff --git a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome.css b/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome.css deleted file mode 100644 index f992c232..00000000 --- a/api-docs/cppdocs/doxygen-awesome-css/doxygen-awesome.css +++ /dev/null @@ -1,3020 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/** - -Doxygen Awesome -https://github.com/jothepro/doxygen-awesome-css - -Copyright (c) 2021 - 2025 jothepro - -*/ - -html { - /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ - --primary-color: #1779c4; - --primary-dark-color: #335c80; - --primary-light-color: #70b1e9; - --on-primary-color: #ffffff; - - --link-color: var(--primary-color); - - /* page base colors */ - --page-background-color: #ffffff; - --page-foreground-color: #2f4153; - --page-secondary-foreground-color: #6f7e8e; - - /* color for all separators on the website: hr, borders, ... */ - --separator-color: #dedede; - - /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ - --border-radius-large: 10px; - --border-radius-small: 5px; - --border-radius-medium: 8px; - - /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ - --spacing-small: 5px; - --spacing-medium: 10px; - --spacing-large: 16px; - --spacing-xlarge: 20px; - - /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ - --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); - - --odd-color: rgba(0,0,0,.028); - - /* font-families. will affect all text on the website - * font-family: the normal font for text, headlines, menus - * font-family-monospace: used for preformatted text in memtitle, code, fragments - */ - --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; - --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; - - /* font sizes */ - --page-font-size: 15.6px; - --navigation-font-size: 14.4px; - --toc-font-size: 13.4px; - --code-font-size: 14px; /* affects code, fragment */ - --title-font-size: 22px; - - /* content text properties. These only affect the page content, not the navigation or any other ui elements */ - --content-line-height: 27px; - /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ - --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); - - /* colors for various content boxes: @warning, @note, @deprecated @bug */ - --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 colors */ - --blockquote-background: #f8f9fa; - --blockquote-foreground: #636568; - - /* table colors */ - --tablehead-background: #f1f1f1; - --tablehead-foreground: var(--page-foreground-color); - - /* menu-display: block | none - * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. - * `GENERATE_TREEVIEW` MUST be enabled! - */ - --menu-display: block; - - --menu-focus-foreground: var(--on-primary-color); - --menu-focus-background: var(--primary-color); - --menu-selected-background: rgba(0,0,0,.05); - - - --header-background: var(--page-background-color); - --header-foreground: var(--page-foreground-color); - - /* searchbar colors */ - --searchbar-background: var(--side-nav-background); - --searchbar-foreground: var(--page-foreground-color); - - /* searchbar size - * (`searchbar-width` is only applied on screens >= 768px. - * on smaller screens the searchbar will always fill the entire screen width) */ - --searchbar-height: 33px; - --searchbar-width: 210px; - --searchbar-border-radius: var(--searchbar-height); - - /* code block colors */ - --code-background: #f5f5f5; - --code-foreground: var(--page-foreground-color); - - /* fragment colors */ - --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; - - /* sidebar navigation (treeview) colors */ - --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); - - /* height of an item in any tree / collapsible table */ - --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: .12s -} - -@media screen and (max-width: 767px) { - html { - --page-font-size: 16px; - --navigation-font-size: 16px; - --toc-font-size: 15px; - --code-font-size: 15px; /* affects code, fragment */ - --title-font-size: 22px; - } -} - -@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,.35); - - --odd-color: rgba(100,100,100,.06); - - --menu-selected-background: rgba(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: #999999; - --fragment-link: #98c0e3; - --fragment-preprocessor: #65cabe; - --fragment-linenumber-color: #cccccc; - --fragment-linenumber-background: #35393c; - --fragment-linenumber-border: #1f1f1f; - } -} - -/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ -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,.30); - - --odd-color: rgba(100,100,100,.06); - - --menu-selected-background: rgba(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: #999999; - --fragment-link: #98c0e3; - --fragment-preprocessor: #65cabe; - --fragment-linenumber-color: #cccccc; - --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); -} - -body, table, div, p, dl, #nav-tree .label, #nav-tree a, .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, -#page-nav ul.page-outline li a { - 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(--link-color) !important; - font-weight: 500; - background: none; -} - -a:hover { - text-decoration: underline; -} - -a.anchor { - scroll-margin-top: var(--spacing-large); - display: block; -} - -/* - Title and top navigation - */ - -#top { - background: var(--header-background); - border-bottom: 1px solid var(--separator-color); - position: relative; - z-index: 99; -} - -@media screen and (min-width: 768px) { - #top { - display: flex; - flex-wrap: wrap; - justify-content: space-between; - align-items: center; - } -} - -#main-nav { - flex-grow: 5; - padding: var(--spacing-small) var(--spacing-medium); - border-bottom: 0; -} - -#titlearea { - width: auto; - padding: var(--spacing-medium) var(--spacing-large); - background: none; - color: var(--header-foreground); - border-bottom: none; -} - -@media screen and (max-width: 767px) { - #titlearea { - padding-bottom: var(--spacing-small); - } -} - -#titlearea table tbody tr { - height: auto !important; -} - -#projectname { - font-size: var(--title-font-size); - font-weight: 600; -} - -#projectnumber { - font-family: inherit; - font-size: 60%; -} - -#projectbrief { - font-family: inherit; - font-size: 80%; -} - -#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); -} - -@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: 768px) { - .sm-dox li, .tablist li { - display: var(--menu-display); - } - - .sm-dox a span.sub-arrow { - top: 15px; - right: 10px; - box-sizing: content-box; - padding: 0; - margin: 0; - display: inline-block; - width: 5px; - height: 5px; - transform: rotate(45deg); - border-width: 0; - border-right: 2px solid var(--header-foreground); - border-bottom: 2px solid var(--header-foreground); - background: none; - } - - .sm-dox a:hover span.sub-arrow { - border-color: var(--menu-focus-foreground); - background: none; - } - - .sm-dox ul a span.sub-arrow { - transform: rotate(-45deg); - border-width: 0; - border-right: 2px solid var(--header-foreground); - border-bottom: 2px solid var(--header-foreground); - } - - .sm-dox ul a:hover span.sub-arrow { - border-color: var(--menu-focus-foreground); - background: none; - } -} - -.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; -} - -@keyframes slideInMenu { - from { - opacity: 0; - transform: translate(0px, -2px); - } - - to { - opacity: 1; - transform: translate(0px, 0px); - } -} - -.sm-dox ul a { - color: var(--page-foreground-color) !important; - background: none; - 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); -} - - -/* - Search box - */ - -#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-top: 0; - margin-right: 0; -} - -@media (min-width: 768px) { - .sm-dox li { - padding: 0; - } -} - -/* until Doxygen 1.9.4 */ -.left img#MSearchSelect { - left: 0; - user-select: none; - padding-left: 8px; -} - -/* Doxygen 1.9.5 */ -.left span#MSearchSelect { - left: 0; - user-select: none; - margin-left: 8px; - padding: 0; -} - -.left #MSearchSelect[src$=".png"] { - padding-left: 0 -} - -/* Doxygen 1.14.0 */ -.search-icon::before { - background: none; - top: 5px; -} - -.search-icon::after { - background: none; - top: 12px; -} - -.SelectionMark { - user-select: none; -} - -.tabs .left #MSearchSelect { - padding-left: 0; -} - -.tabs #MSearchBox { - position: absolute; - right: var(--spacing-medium); -} - -@media screen and (max-width: 767px) { - .tabs #MSearchBox { - position: relative; - right: 0; - margin-left: var(--spacing-medium); - margin-top: 0; - } -} - -#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; -} - -@media screen and (max-width: 767px) { - #main-menu > li:last-child { - height: 50px; - } -} - -#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); -} - -@keyframes slideInSearchResults { - from { - opacity: 0; - transform: translate(0, 15px); - } - - to { - opacity: 1; - transform: translate(0, 20px); - } -} - -#MSearchResultsWindow { - left: auto !important; - right: var(--spacing-medium); - 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; -} - -@media (prefers-color-scheme: dark) { - html:not(.light-mode) iframe#MSearchResults { - filter: invert() hue-rotate(180deg); - } -} - -html.dark-mode iframe#MSearchResults { - filter: invert() hue-rotate(180deg); -} - -#MSearchResults .SRPage { - background-color: transparent; -} - -#MSearchResults .SRPage .SREntry { - font-size: 10pt; - padding: var(--spacing-small) var(--spacing-medium); -} - -#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; -} - -@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; - width: auto !important; - } - - /* - * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 - */ - 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; - } -} - -/* - Tree view - */ - -#side-nav { - min-width: 8px; - max-width: 50vw; -} - - -#nav-tree, #top { - border-right: 1px solid var(--separator-color); -} - -@media screen and (max-width: 767px) { - #side-nav { - display: none; - } - - #doc-content { - margin-left: 0 !important; - } - - #top { - border-right: none; - } -} - -#nav-tree { - background: var(--side-nav-background); - margin-right: -1px; - padding: 0; -} - -#nav-tree .label { - font-size: var(--navigation-font-size); - line-height: var(--tree-item-height); -} - -#nav-tree span.label a:hover { - background: none; -} - -#nav-tree .item { - height: var(--tree-item-height); - line-height: var(--tree-item-height); - overflow: hidden; - text-overflow: ellipsis; - margin: 0; - padding: 0; -} - -#nav-tree-contents { - margin: 0; -} - -#main-menu > li:last-child { - height: auto; -} - -#nav-tree .item > a:focus { - outline: none; -} - -#nav-sync { - bottom: var(--spacing-medium); - right: var(--spacing-medium) !important; - top: auto !important; - user-select: none; -} - -div.nav-sync-icon { - border: 1px solid var(--separator-color); - border-radius: var(--border-radius-medium); - background: var(--page-background-color); - width: 30px; - height: 20px; -} - -div.nav-sync-icon:hover { - background: var(--page-background-color); -} - -span.sync-icon-left, div.nav-sync-icon:hover span.sync-icon-left { - border-left: 2px solid var(--primary-color); - border-top: 2px solid var(--primary-color); - top: 5px; - left: 6px; -} -span.sync-icon-right, div.nav-sync-icon:hover span.sync-icon-right { - border-right: 2px solid var(--primary-color); - border-bottom: 2px solid var(--primary-color); - top: 5px; - left: initial; - right: 6px; -} - -div.nav-sync-icon.active::after, div.nav-sync-icon.active:hover::after { - border-top: 2px solid var(--primary-color); - top: 9px; - left: 6px; - width: 19px; -} - -#nav-tree .selected { - text-shadow: none; - background-image: none; - background-color: transparent; - position: relative; - color: var(--primary-color) !important; - font-weight: 500; -} - -#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; -} - -#nav-tree span.arrowhead { - margin: 0 0 1px 2px; -} - -span.arrowhead { - border-color: var(--primary-light-color); -} - -.selected span.arrowhead { - border-color: var(--primary-color); -} - -#nav-tree-contents > ul > li:first-child > div > a { - opacity: 0; - pointer-events: none; -} - -.contents .arrow { - color: inherit; - cursor: pointer; - font-size: 45%; - vertical-align: middle; - margin-right: 2px; - font-family: serif; - height: auto; - padding-bottom: 4px; -} - -#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 { - background: none; -} - -.ui-resizable-e:hover { - background: var(--separator-color); -} - -/* - Contents - */ - -div.header { - border-bottom: 1px solid var(--separator-color); - background: none; - background-image: none; -} - -@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; - } -} - -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) + .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%; - padding: var(--spacing-medium) var(--spacing-xlarge); - word-break: break-word; -} - -div.header .summary { - width: auto; - display: block; - float: none; - padding: 0 var(--spacing-large); -} - -td.memSeparator { - border-color: var(--separator-color); -} - -span.mlabel { - background: var(--primary-color); - color: var(--on-primary-color); - border: none; - padding: 4px 9px; - border-radius: var(--border-radius-large); - margin-right: var(--spacing-medium); -} - -span.mlabel:last-of-type { - margin-right: 2px; -} - -div.contents { - padding: 0 var(--spacing-xlarge); -} - -div.contents p, div.contents li { - line-height: var(--content-line-height); -} - -div.contents div.dyncontent { - margin: var(--spacing-medium) 0; -} - -@media screen and (max-width: 767px) { - div.contents { - padding: 0 var(--spacing-large); - } - - div.header .title { - padding: var(--spacing-medium) var(--spacing-large); - } -} - -@media (prefers-color-scheme: dark) { - 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.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(); -} - -td h2.groupheader, h2.groupheader { - border-bottom: 0px; - 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: .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, .paramname em { - 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; -} - -/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ -.interactive_dotgraph .dotgraph iframe { - max-width: 100%; -} - -/* - Table of Contents - */ - -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: var(--page-background-color); - 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; -} - - -@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; - } -} - -/* - Page Outline (Doxygen >= 1.14.0) -*/ - -#page-nav { - background: var(--page-background-color); - border-left: 1px solid var(--separator-color); -} - -#page-nav #page-nav-resize-handle { - background: var(--separator-color); -} - -#page-nav #page-nav-resize-handle::after { - border-left: 1px solid var(--primary-color); - border-right: 1px solid var(--primary-color); -} - -#page-nav #page-nav-tree #page-nav-contents { - top: var(--spacing-large); -} - -#page-nav ul.page-outline { - margin: 0; - padding: 0; -} - -#page-nav ul.page-outline li a { - font-size: var(--toc-font-size) !important; - color: var(--page-secondary-foreground-color) !important; - display: inline-block; - line-height: calc(2 * var(--toc-font-size)); -} - -#page-nav ul.page-outline li a a.anchorlink { - display: none; -} - -#page-nav ul.page-outline li.vis ~ * a { - color: var(--page-foreground-color) !important; -} - -#page-nav ul.page-outline li.vis:not(.vis ~ .vis) a, #page-nav ul.page-outline li a:hover { - color: var(--primary-color) !important; -} - -#page-nav ul.page-outline .vis { - background: var(--page-background-color); - position: relative; -} - -#page-nav ul.page-outline .vis::after { - content: ""; - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 4px; - background: var(--page-secondary-foreground-color); -} - -#page-nav ul.page-outline .vis:not(.vis ~ .vis)::after { - top: 1px; - border-top-right-radius: var(--border-radius-small); -} - -#page-nav ul.page-outline .vis:not(:has(~ .vis))::after { - bottom: 1px; - border-bottom-right-radius: var(--border-radius-small); -} - - -#page-nav ul.page-outline .arrow { - display: inline-block; -} - -#page-nav ul.page-outline .arrow span { - display: none; -} - -@media screen and (max-width: 767px) { - #container { - grid-template-columns: initial !important; - } - - #page-nav { - display: none; - } -} - -/* - Code & Fragments - */ - -code, div.fragment, pre.fragment, span.tt { - border: 1px solid var(--separator-color); - overflow: hidden; -} - -code, span.tt { - display: inline; - background: var(--code-background); - color: var(--code-foreground); - padding: 2px 6px; - border-radius: var(--border-radius-small); -} - -div.fragment, pre.fragment { - border-radius: var(--border-radius-medium); - 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; -} - -@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; - } -} - -code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span, span.tt { - 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 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 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 warning, attention, note, deprecated, bug, ... - */ - -dl { - line-height: calc(1.65 * var(--page-font-size)); -} - -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: 0px; -} - -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); -} - -/* - memitem - */ - -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: 0px 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); - border-top-left-radius: 0; - 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 -} - -/* - reflist - */ - -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; -} - -/* - Table - */ - -.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.fieldinit, .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 tr.heading + tr[class^='memitem'] td.memItemLeft, -table.memberdecls tr.heading + tr[class^='memitem'] td.memItemRight, -table.memberdecls td.memItemLeft, -table.memberdecls td.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); -} - -@media screen and (min-width: 768px) { - - tr.heading + tr[class^='memitem'] td.memItemRight, tr.groupHeader + tr[class^='memitem'] td.memItemRight, tr.inherit_header + tr[class^='memitem'] td.memItemRight { - border-top-right-radius: var(--border-radius-small); - } - - table.memberdecls tr:last-child td.memItemRight, table.memberdecls tr:last-child td.mdescRight, table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemRight, table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemRight, table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescRight, table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescRight { - border-bottom-right-radius: var(--border-radius-small); - } - - table.memberdecls tr:last-child td.memItemLeft, table.memberdecls tr:last-child td.mdescLeft, table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemLeft, table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemLeft, table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescLeft, table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescLeft { - border-bottom-left-radius: var(--border-radius-small); - } - - tr.heading + tr[class^='memitem'] td.memItemLeft, tr.groupHeader + tr[class^='memitem'] td.memItemLeft, tr.inherit_header + tr[class^='memitem'] td.memItemLeft { - border-top-left-radius: var(--border-radius-small); - } - -} - -table.memname td.memname { - font-size: var(--memname-font-size); -} - -table.memberdecls .memTemplItemLeft, -table.memberdecls .template .memItemLeft, -table.memberdecls .memTemplItemRight, -table.memberdecls .template .memItemRight { - 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, table.memberdecls .template .memItemLeft { - border-radius: 0 0 0 var(--border-radius-small); - border-left: 1px solid var(--separator-color); - border-top: 0; -} - -table.memberdecls .memTemplItemRight, table.memberdecls .template .memItemRight { - 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; - border: 0; -} - -table.memberdecls [class^="memdesc"] { - box-shadow: none; -} - - -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 span.dynarrow { - left: 10px; -} - -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; -} - -tr.heading + tr[class^='memitem'] td.memItemLeft, tr.groupHeader + tr[class^='memitem'] td.memItemLeft, tr.inherit_header + tr[class^='memitem'] td.memItemLeft, tr.heading + tr[class^='memitem'] td.memItemRight, tr.groupHeader + tr[class^='memitem'] td.memItemRight, tr.inherit_header + tr[class^='memitem'] td.memItemRight { - border-top: 1px solid var(--separator-color); -} - -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); -} - -@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, - table.memberdecls .template .memItemLeft, - table.memberdecls .template .memItemRight, - table.memberdecls .template .memParams { - display: block; - text-align: left; - padding-left: var(--spacing-large); - margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); - border-right: none; - border-left: none; - border-radius: 0; - white-space: normal; - } - - table.memberdecls .memItemLeft, - table.memberdecls .mdescLeft, - table.memberdecls .memTemplItemLeft, - table.memberdecls .template .memItemLeft { - border-bottom: 0 !important; - padding-bottom: 0 !important; - } - - table.memberdecls .memTemplItemLeft, - table.memberdecls .template .memItemLeft { - padding-top: 0; - } - - table.memberdecls .mdescLeft { - margin-bottom: calc(0px - var(--page-font-size)); - } - - table.memberdecls .memItemRight, - table.memberdecls .mdescRight, - table.memberdecls .memTemplItemRight, - table.memberdecls .template .memItemRight { - border-top: 0 !important; - padding-top: 0 !important; - padding-right: var(--spacing-large); - padding-bottom: var(--spacing-medium); - 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 .5s; - } - - @keyframes fade { - 0% { - opacity: 0; - max-height: 0; - } - - 100% { - opacity: 1; - max-height: 200px; - } - } - - tr.heading + tr[class^='memitem'] td.memItemRight, tr.groupHeader + tr[class^='memitem'] td.memItemRight, tr.inherit_header + tr[class^='memitem'] td.memItemRight { - border-top-right-radius: 0; - } - - table.memberdecls tr:last-child td.memItemRight, table.memberdecls tr:last-child td.mdescRight, table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemRight, table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemRight, table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescRight, table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescRight { - border-bottom-right-radius: 0; - } - - table.memberdecls tr:last-child td.memItemLeft, table.memberdecls tr:last-child td.mdescLeft, table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemLeft, table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemLeft, table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescLeft, table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescLeft { - border-bottom-left-radius: 0; - } - - tr.heading + tr[class^='memitem'] td.memItemLeft, tr.groupHeader + tr[class^='memitem'] td.memItemLeft, tr.inherit_header + tr[class^='memitem'] td.memItemLeft { - border-top-left-radius: 0; - } -} - - -/* - Horizontal Rule - */ - -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 var(--separator-color), - -100px 0 var(--separator-color), - 500px 0 var(--separator-color), - -500px 0 var(--separator-color), - 900px 0 var(--separator-color), - -900px 0 var(--separator-color), - 1400px 0 var(--separator-color), - -1400px 0 var(--separator-color), - 1900px 0 var(--separator-color), - -1900px 0 var(--separator-color); -} - -.contents img, .contents .center, .contents center, .contents div.image object { - max-width: 100%; - overflow: auto; -} - -@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)); - } -} - -/* - Directories - */ -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); -} - -@media screen and (max-width: 767px) { - div.directory { - margin-left: calc(0px - var(--spacing-large)); - margin-right: calc(0px - var(--spacing-large)); - } -} - -@media (prefers-color-scheme: dark) { - html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { - filter: hue-rotate(180deg) invert(); - } -} - -html.dark-mode .iconfopen, html.dark-mode .iconfclosed { - filter: hue-rotate(180deg) invert(); -} - -/* - Class list - */ - -.classindex dl.odd { - background: var(--odd-color); - border-radius: var(--border-radius-small); -} - -.classindex dl.even { - background-color: transparent; -} - -/* - Class Index Doxygen 1.8 -*/ - -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; -} - -/* - Footer and nav-path - */ - -#nav-path { - width: 100%; -} - -#nav-path ul { - background-image: none; - background: var(--page-background-color); - border: none; - border-top: 1px solid var(--separator-color); - border-bottom: 0; - 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 a:hover { - text-shadow: none; -} - -.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 ul { - padding-left: 0; -} - -#nav-path li.navelem:has(.el):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:not(:has(.el)):after { - background: var(--page-background-color); - box-shadow: 1px -1px 0 1px var(--separator-color); - border-radius: 0 var(--border-radius-medium) 0 50px; -} - -#nav-path li.navelem:not(:has(.el)) { - margin-left: 0; -} - -#nav-path li.navelem:not(:has(.el)):hover, #nav-path li.navelem:not(:has(.el)):hover:after { - background-color: var(--separator-color); -} - -#nav-path li.navelem:has(.el):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); -} - -/* - Scrollbars for Webkit -*/ - -#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); -} - -#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; -} - -/* - Scrollbars for Firefox -*/ - -#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; -} - -/* - Optional Dark mode toggle button -*/ - -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-border-radius); - 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(.5); -} - -doxygen-awesome-dark-mode-toggle:hover { - background-color: rgba(0,0,0,.03); -} - -html.dark-mode doxygen-awesome-dark-mode-toggle:hover { - background-color: rgba(0,0,0,.18); -} - -/* - Optional fragment copy button -*/ -.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: .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(.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); -} - -@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; - } -} - -/* - Optional paragraph link button -*/ - -a.anchorlink { - font-size: 90%; - margin-left: var(--spacing-small); - color: var(--page-foreground-color) !important; - text-decoration: none; - opacity: .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: .45; -} - -h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { - display: inline-block; -} - -/* - Optional tab feature -*/ - -.tabbed > ul { - padding-inline-start: 0px; - 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; -} - -@media screen and (max-width: 767px) { - .tabs-overview-container { - margin: 0 calc(0px - var(--spacing-large)); - } - .tabs-overview { - padding: 0 var(--spacing-large) - } -} - -.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; - font-family: var(--font-family); - 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; -} - - -/* - Navigation Buttons -*/ - -.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 .08s ease-in-out, transform .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); -} - -@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; - } -} - -/* - Bordered image -*/ - -html.dark-mode .darkmode_inverted_image img, /* < doxygen 1.9.3 */ -html.dark-mode .darkmode_inverted_image object[type="image/svg+xml"] /* doxygen 1.9.3 */ { - filter: brightness(89%) hue-rotate(180deg) invert(); -} - -.bordered_image { - border-radius: var(--border-radius-small); - border: 1px solid var(--separator-color); - display: inline-block; - overflow: hidden; -} - -.bordered_image:empty { - border: none; -} - -html.dark-mode .bordered_image img, /* < doxygen 1.9.3 */ -html.dark-mode .bordered_image object[type="image/svg+xml"] /* doxygen 1.9.3 */ { - border-radius: var(--border-radius-small); -} - -/* - Button -*/ - -.primary-button { - display: inline-block; - cursor: pointer; - background: var(--primary-color); - color: var(--page-background-color) !important; - border-radius: var(--border-radius-medium); - padding: var(--spacing-small) var(--spacing-medium); - text-decoration: none; -} - -.primary-button:hover { - background: var(--primary-dark-color); -} \ No newline at end of file diff --git a/api-docs/cppdocs/header.html b/api-docs/cppdocs/header.html index cf41aa50..a73a36bb 100644 --- a/api-docs/cppdocs/header.html +++ b/api-docs/cppdocs/header.html @@ -1,37 +1,36 @@ - + - + -BinaryNinja C++ API: $title -BinaryNinja C++ API +$projectname: $title +$title + + + - - + - - + + + + $treeview $search $mathjax $extrastylesheet - - + - - +
- - +
@@ -41,7 +40,7 @@ $extrastylesheet - Logo + Logo @@ -50,6 +49,11 @@ $extrastylesheet + + +
$projectbrief
+ + diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 0dae43cd..fa8ec3e4 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -3189,46 +3189,45 @@ namespace BinaryNinja { Uses of tokens include plugins that parse the output of an architecture (though parsing IL is recommended), or additionally, applying color schemes appropriately. - ========================== ============================================ - InstructionTextTokenType Description - ========================== ============================================ - AddressDisplayToken **Not emitted by architectures** - AnnotationToken **Not emitted by architectures** - ArgumentNameToken **Not emitted by architectures** - BeginMemoryOperandToken The start of memory operand - CharacterConstantToken A printable character - CodeRelativeAddressToken **Not emitted by architectures** - CodeSymbolToken **Not emitted by architectures** - DataSymbolToken **Not emitted by architectures** - EndMemoryOperandToken The end of a memory operand - ExternalSymbolToken **Not emitted by architectures** - FieldNameToken **Not emitted by architectures** - FloatingPointToken Floating point number - HexDumpByteValueToken **Not emitted by architectures** - HexDumpInvalidByteToken **Not emitted by architectures** - HexDumpSkippedByteToken **Not emitted by architectures** - HexDumpTextToken **Not emitted by architectures** - ImportToken **Not emitted by architectures** - IndirectImportToken **Not emitted by architectures** - InstructionToken The instruction mnemonic - IntegerToken Integers - KeywordToken **Not emitted by architectures** - LocalVariableToken **Not emitted by architectures** - StackVariableToken **Not emitted by architectures** - NameSpaceSeparatorToken **Not emitted by architectures** - NameSpaceToken **Not emitted by architectures** - OpcodeToken **Not emitted by architectures** - OperandSeparatorToken The comma or delimiter that separates tokens - PossibleAddressToken Integers that are likely addresses - RegisterToken Registers - StringToken **Not emitted by architectures** - StructOffsetToken **Not emitted by architectures** - TagToken **Not emitted by architectures** - TextToken Used for anything not of another type. - CommentToken Comments - TypeNameToken **Not emitted by architectures** - AddressSeparatorToken **Not emitted by architectures** - ========================== ============================================ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InstructionTextTokenTypeDescription
AddressDisplayTokenNot emitted by architectures
AnnotationTokenNot emitted by architectures
ArgumentNameTokenNot emitted by architectures
BeginMemoryOperandTokenThe start of memory operand
CharacterConstantTokenA printable character
CodeRelativeAddressTokenNot emitted by architectures
CodeSymbolTokenNot emitted by architectures
DataSymbolTokenNot emitted by architectures
EndMemoryOperandTokenThe end of a memory operand
ExternalSymbolTokenNot emitted by architectures
FieldNameTokenNot emitted by architectures
FloatingPointTokenFloating point number
HexDumpByteValueTokenNot emitted by architectures
HexDumpInvalidByteTokenNot emitted by architectures
HexDumpSkippedByteTokenNot emitted by architectures
HexDumpTextTokenNot emitted by architectures
ImportTokenNot emitted by architectures
IndirectImportTokenNot emitted by architectures
InstructionTokenThe instruction mnemonic
IntegerTokenIntegers
KeywordTokenNot emitted by architectures
LocalVariableTokenNot emitted by architectures
StackVariableTokenNot emitted by architectures
NameSpaceSeparatorTokenNot emitted by architectures
NameSpaceTokenNot emitted by architectures
OpcodeTokenNot emitted by architectures
OperandSeparatorTokenThe comma or delimiter that separates tokens
PossibleAddressTokenIntegers that are likely addresses
RegisterTokenRegisters
StringTokenNot emitted by architectures
StructOffsetTokenNot emitted by architectures
TagTokenNot emitted by architectures
TextTokenUsed for anything not of another type.
CommentTokenComments
TypeNameTokenNot emitted by architectures
AddressSeparatorTokenNot emitted by architectures
*/ struct InstructionTextToken { @@ -4837,19 +4836,18 @@ namespace BinaryNinja { /*! Symbols are defined as one of the following types: - =========================== ================================================================= - BNSymbolType Description - =========================== ================================================================= - FunctionSymbol Symbol for function that exists in the current binary - ImportAddressSymbol Symbol defined in the Import Address Table - ImportedFunctionSymbol Symbol for a function that is not defined in the current binary - DataSymbol Symbol for data in the current binary - ImportedDataSymbol Symbol for data that is not defined in the current binary - ExternalSymbol Symbols for data and code that reside outside the BinaryView - LibraryFunctionSymbol Symbols for functions identified as belonging to a shared library - SymbolicFunctionSymbol Symbols for functions without a concrete implementation or which have been abstractly represented - LocalLabelSymbol Symbol for a local label in the current binary - =========================== ================================================================= + + + + + + + + + + + +
BNSymbolTypeDescription
FunctionSymbolSymbol for function that exists in the current binary
ImportAddressSymbolSymbol defined in the Import Address Table
ImportedFunctionSymbolSymbol for a function that is not defined in the current binary
DataSymbolSymbol for data in the current binary
ImportedDataSymbolSymbol for data that is not defined in the current binary
ExternalSymbolSymbols for data and code that reside outside the BinaryView
LibraryFunctionSymbolSymbols for functions identified as belonging to a shared library
SymbolicFunctionSymbolSymbols for functions without a concrete implementation or which have been abstractly represented
LocalLabelSymbolSymbol for a local label in the current binary
\return Symbol type */ @@ -9432,18 +9430,17 @@ namespace BinaryNinja { If the instruction is a branch instruction architecture plugins should add a branch of the proper type: - ===================== =================================================== - BNBranchType Description - ===================== =================================================== - UnconditionalBranch Branch will always be taken - FalseBranch False branch condition - TrueBranch True branch condition - CallDestination Branch is a call instruction (Branch with Link) - FunctionReturn Branch returns from a function - SystemCall System call instruction - IndirectBranch Branch destination is a memory address or register - UnresolvedBranch Branch destination is an unknown address - ===================== =================================================== + + + + + + + + + + +
BNBranchTypeDescription
UnconditionalBranchBranch will always be taken
FalseBranchFalse branch condition
TrueBranchTrue branch condition
CallDestinationBranch is a call instruction (Branch with Link)
FunctionReturnBranch returns from a function
SystemCallSystem call instruction
IndirectBranchBranch destination is a memory address or register
UnresolvedBranchBranch destination is an unknown address
\param[in] data pointer to the instruction data to retrieve info for \param[in] addr address of the instruction data to retrieve info for @@ -18513,44 +18510,42 @@ namespace BinaryNinja { levels. The levels and their associated storage are shown in the following table. Default setting values are optional, and if specified, saved in the schema itself. - ================= ========================== ============== ============================================== - Setting Level Settings Scope Preference Storage - ================= ========================== ============== ============================================== - Default SettingsDefaultScope Lowest Settings Schema - User SettingsUserScope - /settings.json - Project SettingsProjectScope - /settings.json - Resource SettingsResourceScope Highest Raw BinaryView (Storage in BNDB) - ================= ========================== ============== ============================================== + + + + + + +
Setting LevelSettings ScopePreferenceStorage
DefaultSettingsDefaultScopeLowestSettings Schema
UserSettingsUserScope-/settings.json
ProjectSettingsProjectScope-/settings.json
ResourceSettingsResourceScopeHighestRaw BinaryView (Storage in BNDB)
Settings are identified by a key, which is a string in the form of . or .. . Groups provide a simple way to categorize settings. Sub-groups are optional and multiple sub-groups are allowed. When defining a settings group, the \c RegisterGroup method allows for specifying a UI friendly title for use in the Binary Ninja UI. Defining a new setting requires a unique setting key and a JSON string of property, value pairs. The following table describes the available properties and values. - ================== ====================================== ================== ======== ======================================================================= - Property JSON Data Type Prerequisite Optional {Allowed Values} and Notes - ================== ====================================== ================== ======== ======================================================================= - "title" string None No Concise Setting Title - "type" string None No {"array", "boolean", "number", "string", "object"} - "sorted" boolean "type" is "array" Yes Automatically sort list items (default is false) - "isSerialized" boolean "type" is "string" Yes Treat the string as a serialized JSON object - "enum" array : {string} "type" is "array" Yes Enumeration definitions - "enumDescriptions" array : {string} "type" is "array" Yes Enumeration descriptions that match "enum" array - "minValue" number "type" is "number" Yes Specify 0 to infer unsigned (default is signed) - "maxValue" number "type" is "number" Yes Values less than or equal to INT_MAX result in a QSpinBox UI element - "precision" number "type" is "number" Yes Specify precision for a QDoubleSpinBox - "default" {array, boolean, number, string, null} None Yes Specify optimal default value - "aliases" array : {string} None Yes Array of deprecated setting key(s) - "description" string None No Detailed setting description - "ignore" array : {string} None Yes {"SettingsUserScope", "SettingsProjectScope", "SettingsResourceScope"} - "message" string None Yes An optional message with additional emphasis - "readOnly" bool None Yes Only enforced by UI elements - "optional" bool None Yes Indicates setting can be null - "hidden" bool "type" is "string" Yes Indicates the UI should conceal the content. The "ignore" property is required to specify the applicable storage scopes - "requiresRestart" bool None Yes Enable restart notification in the UI upon change - "uiSelectionAction" string "type" is "string" Yes {"file", "directory", } Informs the UI to add a button to open a selection dialog or run a registered UIAction - "quickSettingsGroup" string None Yes Groups related items in the quick settings context menu using dividers to separate groups - ================== ====================================== ================== ======== ======================================================================= + + + + + + + + + + + + + + + + + + + + + + +
PropertyJSON Data TypePrerequisiteOptional{Allowed Values} and Notes
"title"stringNoneNoConcise Setting Title
"type"stringNoneNo{"array", "boolean", "number", "string", "object"}
"sorted"boolean"type" is "array"YesAutomatically sort list items (default is false)
"isSerialized"boolean"type" is "string"YesTreat the string as a serialized JSON object
"enum"array : {string}"type" is "array"YesEnumeration definitions
"enumDescriptions"array : {string}"type" is "array"YesEnumeration descriptions that match "enum" array
"minValue"number"type" is "number"YesSpecify 0 to infer unsigned (default is signed)
"maxValue"number"type" is "number"YesValues less than or equal to INT_MAX result in a QSpinBox UI element
"precision"number"type" is "number"YesSpecify precision for a QDoubleSpinBox
"default"{array, boolean, number, string, null}NoneYesSpecify optimal default value
"aliases"array : {string}NoneYesArray of deprecated setting key(s)
"description"stringNoneNoDetailed setting description
"ignore"array : {string}NoneYes{"SettingsUserScope", "SettingsProjectScope", "SettingsResourceScope"}
"message"stringNoneYesAn optional message with additional emphasis
"readOnly"boolNoneYesOnly enforced by UI elements
"optional"boolNoneYesIndicates setting can be null
"hidden"bool"type" is "string"YesIndicates the UI should conceal the content. The "ignore" property is required to specify the applicable storage scopes
"requiresRestart"boolNoneYesEnable restart notification in the UI upon change
"uiSelectionAction"string"type" is "string"Yes{"file", "directory", <Registered UIAction Name>} Informs the UI to add a button to open a selection dialog or run a registered UIAction
"quickSettingsGroup"stringNoneYesGroups related items in the quick settings context menu using dividers to separate groups
\note In order to facilitate deterministic analysis results, settings from the default schema that impact analysis are serialized from Default, User, and Project scope into Resource scope during initial BinaryView analysis. This allows an analysis database to be opened -- cgit v1.3.1