diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 000000000..78c5f13a0 --- /dev/null +++ b/docs/404.html @@ -0,0 +1,58 @@ + + + + + + Page Not Found :: MrDocs + + + + + + + + + +
+ +
+
+

Page Not Found

+
+

The page you’re looking for does not exist. It may have been moved. You can return to the start page, or follow one of the links in the navigation to the left.

+
+
+

If you arrived on this page by clicking on a link, please notify the owner of the site that the link is broken. +If you typed the URL of this page manually, please double check that you entered the address correctly.

+
+
+
+ +
+ + + diff --git a/docs/_/css/boostlook.css b/docs/_/css/boostlook.css new file mode 100644 index 000000000..175896a88 --- /dev/null +++ b/docs/_/css/boostlook.css @@ -0,0 +1 @@ +:root{--bl-primary-color:#ff9f00;--bl-header-height:2.5rem;--light-bl-background:#fff;--light-bl-breadcrumbs-svg-color:#000;--light-bl-caret-svg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 -960 960 960' width='24'%3E%3Cpath d='M320-200v-560l440 280-440 280z'/%3E%3C/svg%3E");--light-bl-card-background-color:#fff;--light-bl-code-background:#fff;--light-bl-code-border-color:#dcdcdc;--light-bl-code-text-color:inherit;--light-bl-link-color:#005a9c;--light-bl-link-hover-color:rgba(0,90,156,0.7);--light-bl-hljs-attribute-color:#4682b4;--light-bl-hljs-doctag-color:#d14;--light-bl-hljs-keyword-color:#333;--light-bl-hljs-number-color:teal;--light-bl-hljs-section-color:#900;--light-bl-nav-link-color:#000;--light-bl-nav-fade-color:#fff;--light-bl-pasteboard-color:#e5e7eb;--light-bl-pre-background:#f8f8f8;--light-bl-primary-color:#ff9f00;--light-bl-quote-background:#fff;--light-bl-table-border-color:#e8e8e8;--light-bl-table-head-background:#f8f8f8;--dark-bl-border-color:#d1e4f2;--dark-bl-breadcrumbs-svg-color:#fff;--dark-bl-caret-svg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 -960 960 960' width='24' fill='%23ccc'%3E%3Cpath d='M320-200v-560l440 280-440 280z'/%3E%3C/svg%3E");--dark-bl-card-background-color:#172a34;--dark-bl-code-background:#141414;--dark-bl-code-border-color:transparent;--dark-bl-code-text-color:#fff;--dark-bl-link-color:#7dd3fc;--dark-bl-link-hover-color:#64a0d2;--dark-bl-hljs-attribute-color:#4682b4;--dark-bl-hljs-doctag-color:#ff6384;--dark-bl-hljs-keyword-color:#add8e6;--dark-bl-hljs-number-color:#48d1cc;--dark-bl-hljs-section-color:#ff453a;--dark-bl-nav-link-color:#000;--dark-bl-nav-fade-color:#172a34;--dark-bl-pasteboard-color:#040607;--dark-bl-pagination-color:#c8c8c8;--dark-bl-quote-background:#0b3b52;--dark-bl-quote-word-color:#d1e4f2;--dark-bl-tabpanel-background:#1c323b;--dark-bl-text-color:#d1e4f2}html{--bl-background:var(--light-bl-background);--bl-breadcrumbs-svg-color:var(--light-bl-breadcrumbs-svg-color);--bl-caret-svg:var(--light-bl-caret-svg);--bl-card-background-color:var(--light-bl-card-background-color);--bl-code-background:var(--light-bl-code-background);--bl-code-border-color:var(--light-bl-code-border-color);--bl-code-text-color:var(--light-bl-code-text-color);--bl-hljs-doctag-color:var(--light-bl-hljs-doctag-color);--bl-hljs-attribute-color:var(--light-bl-hljs-attribute-color);--bl-hljs-keyword-color:var(--light-bl-hljs-keyword-color);--bl-hljs-number-color:var(--light-bl-hljs-number-color);--bl-hljs-section-color:var(--light-bl-hljs-section-color);--bl-link-color:var(--light-bl-link-color);--bl-link-hover-color:var(--light-bl-link-hover-color);--bl-nav-link-color:var(--light-bl-nav-link-color);--bl-nav-fade-color:var(--light-bl-nav-fade-color);--bl-pasteboard-color:var(--light-bl-pasteboard-color);--bl-pre-background:var(--light-bl-pre-background);--bl-quote-background:var(--light-bl-quote-background);--bl-table-border-color:var(--light-bl-table-border-color);--bl-table-head-background:var(--light-bl-table-head-background)}html.dark{--bl-border-color:var(--dark-bl-border-color);--bl-breadcrumbs-svg-color:var(--dark-bl-breadcrumbs-svg-color);--bl-caret-svg:var(--dark-bl-caret-svg);--bl-card-background-color:var(--dark-bl-card-background-color);--bl-code-background:var(--dark-bl-code-background);--bl-code-border-color:var(--dark-bl-code-border-color);--bl-code-text-color:var(--dark-bl-code-text-color);--bl-hljs-attribute-color:var(--dark-bl-hljs-attribute-color);--bl-hljs-doctag-color:var(--dark-bl-hljs-doctag-color);--bl-hljs-keyword-color:var(--dark-bl-hljs-keyword-color);--bl-hljs-number-color:var(--dark-bl-hljs-number-color);--bl-hljs-section-color:var(--dark-bl-hljs-section-color);--bl-link-color:var(--dark-bl-link-color);--bl-link-hover-color:var(--dark-bl-link-hover-color);--bl-nav-link-color:var(--dark-bl-nav-link-color);--bl-nav-fade-color:var(--dark-bl-nav-fade-color);--bl-pasteboard-color:var(--dark-bl-pasteboard-color);--bl-pagination-color:var(--dark-bl-pagination-color);--bl-quote-background:var(--dark-bl-quote-background);--bl-quote-word-color:var(--dark-bl-quote-word-color);--bl-tabpanel-background:var(--dark-bl-tabpanel-background);--bl-text-color:var(--dark-bl-text-color)}@font-face{font-family:Noto Sans Display;font-style:normal;font-weight:400;font-stretch:semi-condensed;font-display:block;src:url(/_/fonts/NotoSansDisplay.ttf) format("truetype"),url(../../../../tools/boostlook/NotoSansDisplay.ttf) format("truetype"),url(https://cppalliance.org/fonts/NotoSansDisplay.ttf) format("truetype")}@font-face{font-family:Noto Sans Display;font-style:italic;font-weight:400;font-stretch:semi-condensed;font-display:block;src:url(/font/NotoSansDisplay-Italic.ttf) format("truetype"),url(../../../../tools/boostlook/NotoSansDisplay-Italic.ttf) format("truetype"),url(https://cppalliance.org/fonts/NotoSansDisplay-Italic.ttf) format("truetype")}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:400;font-stretch:semi-condensed;font-display:block;src:url(/_/boostlook/NotoSansMono.ttf) format("truetype"),url(../../../../tools/boostlook/NotoSansMono.ttf) format("truetype"),url(https://cppalliance.org/fonts/NotoSansMono.ttf) format("truetype")}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}*{margin:0}body{line-height:1.5;-webkit-font-smoothing:antialiased}canvas,img,picture,svg,video{display:block;max-width:100%}button,input,select,textarea{font:inherit}h1,h2,h3,h4,h5,h6,p{overflow-wrap:break-word}#__next,#root{isolation:isolate}.boostlook{font-family:Noto Sans Display!important;font-stretch:condensed}.boostlook h1,.boostlook h2,.boostlook h3,.boostlook h4,.boostlook h5,.boostlook h6{display:block;line-height:1;margin-top:1em;margin-bottom:1em;font-weight:500}.boostlook h1{font-size:1.75em}.boostlook h2{font-size:1.5em}.boostlook h3{font-size:1.375em}.boostlook h4{font-size:1.25em}.boostlook h5{font-size:1.125em}.boostlook h6{font-size:1em}.boostlook p{font-size:1rem;margin:1em 0}.boostlook .doc a,.boostlook a{color:var(--bl-link-color);text-decoration:none}.boostlook .doc a:hover,.boostlook a:hover{color:var(--bl-link-hover-color);cursor:pointer;text-decoration:none}.boostlook code{font-family:Noto Sans Mono,monospace}.boostlook h6:has(+table){margin-left:1em}.boostlook p code,.boostlook p kbd,.boostlook p pre,.boostlook p samp,.boostlook p tt,.boostlook table code{background-color:transparent!important}.boostlook .content div:has(>table){overflow-x:auto}.boostlook .colist>table code,.boostlook p code{color:var(--bl-code-text-color)!important}.boostlook .quoteblock,.boostlook .verseblock{background:var(--bl-quote-background);border-left:3px solid var(--bl-border-color);color:var(--bl-text-color)}.boostlook .quoteblock:before,.boostlook .verseblock:before{color:var(--bl-quote-word-color)}.boostlook .tabpanel{background-color:var(--bl-tabpanel-background)}.boostlook .hljs-keyword,.boostlook .hljs-selector-tag,.boostlook .hljs-subst{color:var(--bl-hljs-keyword-color)}.boostlook .hljs-number{color:var(--bl-hljs-number-color)}.boostlook .hljs-doctag,.boostlook .hljs-string{color:var(--bl-hljs-doctag-color)}.boostlook .hljs-section,.boostlook .hljs-selector-id,.boostlook .hljs-title{color:var(--bl-hljs-section-color)}.boostlook .pagination a,.boostlook p a:visited,.boostlook table a{color:var(--bl-link-color)}.boostlook .hljs-attribute,.boostlook .hljs-name,.boostlook .hljs-tag{color:var(--bl-hljs-attribute-color)}.boostlook nav.pagination span:before{color:var(--bl-pagination-color)}.article.toc2.toc-left{min-height:100vh;max-width:80rem;margin-left:auto;margin-right:auto;background-color:var(--bl-pasteboard-color);position:relative}.boostlook:not(:has(.doc)) pre{font-family:Noto Sans Mono,monospace;background-color:var(--bl-pre-background);margin:1em;padding:1rem;overflow-x:auto}.boostlook:not(:has(.doc)) table{border-collapse:collapse;margin:1em;border:1px solid var(--bl-table-border-color)}.boostlook:not(:has(.doc)) th{background-color:var(--bl-table-head-background);text-align:left;padding:.25em .55em;font-weight:550}.boostlook:not(:has(.doc)) td{border:1px solid var(--bl-table-border-color);padding:.25em .55em}.boostlook #header>h1{margin-top:0}.boostlook #toc>ul.sectlevel1{padding-left:0}.boostlook #toc ul{margin:0;padding:0 0 0 .5rem;line-height:1.5;font-size:1rem;list-style:none}.boostlook #toc .sectlevel1>li>a{font-weight:bolder}.boostlook #toc #toctitle{font-size:1.5rem}.boostlook,.boostlook #toc.toc2{background-color:var(--bl-card-background-color);padding:1rem 1.5rem}.boostlook #toc.toc2{position:static;padding-left:0}.boostlook #toc.toc2>ul{height:100%;overflow-y:auto;padding-bottom:4rem;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;z-index:0}.boostlook #toggle-toc{display:none}.boostlook #content .sect3:has(.tableblock){overflow-x:auto}@media screen and (min-width:768px){.article.toc2.toc-left{padding:1rem}.boostlook,.boostlook #toc.toc2{border-radius:.5rem}.boostlook #toc.toc2{position:fixed;width:17rem;left:max(1rem,calc(50% - 39rem));top:1rem;z-index:1000;height:calc(100vh - 2rem);padding:1rem;overflow:hidden}.boostlook{margin-left:18rem}.boostlook #toggle-toc{display:block;position:fixed;top:2.375rem;left:calc(max(1rem, calc(50% - 39rem)) + 14rem);background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;padding:0;cursor:pointer;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 -960 960 960' width='24' fill='%235f6368'%3E%3Cpath d='M680-280l-56-56 103-104H520v-80h207L624-624l56-56 200 200-200 200zm-400 0L80-480l200-200 56 56-103 104h207v80H233l103 104-56 56z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:50%;border-radius:.3125rem;width:2rem;text-indent:-9999px;z-index:1001}.boostlook #toggle-toc:hover{background-color:#f0f0f0;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.2);box-shadow:0 2px 5px rgba(0,0,0,.2)}.boostlook #toggle-toc:active{background-color:#e0e0e0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}html.toc-hidden .boostlook #toggle-toc{left:calc(max(1rem, calc(50% - 39rem)) - 1rem)}}html:not(.toc-hidden) .boostlook #toc{display:block}html.toc-hidden .boostlook #toc{display:none}html.toc-hidden .boostlook{margin-left:0}.boostlook .doc,.boostlook .doc i{line-height:1.5;font-family:Noto Sans Display}.boostlook .nav-menu .title{font-size:1.5rem}.boostlook .breadcrumbs ul li{font-size:.875rem!important}.boostlook .nav-panel-menu{overflow:visible}.boostlook .nav-close{display:none}.boostlook .nav-menu>.nav-list>.nav-list{margin-left:0}.boostlook .nav-menu>.nav-list>.nav-list>li{font-weight:bolder}.boostlook .nav-menu .nav-list li{line-height:1.5}.boostlook .nav-link,.boostlook .nav-menu a{cursor:pointer;color:var(--bl-nav-link-color);margin-right:-.5rem}.boostlook .nav-link:hover,.boostlook .nav-menu a:hover{color:var(--bl-link-hover-color)}.boostlook .nav-text{color:#828282}.boostlook .nav-list .is-current-page.is-active{position:relative}.boostlook .is-current-page.is-active:before{content:"";position:absolute;top:.3125rem;width:16px;height:16px;margin-left:-1.25rem;background-image:var(--bl-caret-svg);background-repeat:no-repeat;background-position:50%;background-size:16px}.boostlook .breadcrumbs{display:block}.boostlook .breadcrumbs ul li:first-of-type{display:-webkit-box;display:-ms-flexbox;display:flex}.boostlook .breadcrumbs svg{fill:var(--bl-breadcrumbs-svg-color)}.boostlook .doc .content pre code{background-color:var(--bl-code-background);border-color:var(--bl-code-border-color)}.boostlook .article .content{gap:1rem}.boostlook #content:has(.toc.sidebar){display:-webkit-box;display:-ms-flexbox;display:flex}.boostlook .nav{height:100%;padding-bottom:2rem}.boostlook .toc .toc-menu a{border-left:0;padding:.25rem 0 0}.boostlook .nav-menu .title{padding-left:1rem}.boostlook #toc.toc2:after{content:"";position:absolute;bottom:0;left:0;right:0;height:4rem;background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),color-stop(70%,var(--bl-nav-fade-color)));background:linear-gradient(180deg,hsla(0,0%,100%,0),var(--bl-nav-fade-color) 70%);pointer-events:none;z-index:1} \ No newline at end of file diff --git a/docs/_/css/search.css b/docs/_/css/search.css new file mode 100644 index 000000000..d3845333e --- /dev/null +++ b/docs/_/css/search.css @@ -0,0 +1,123 @@ +.search-result-dropdown-menu { + position: absolute; + z-index: 100; + display: block; + right: 0; + left: inherit; + top: 100%; + border-radius: 4px; + margin: 6px 0 0; + padding: 0; + text-align: left; + height: auto; + background: transparent; + border: none; + max-width: 600px; + min-width: 500px; + box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2), 0 2px 3px 0 rgba(0, 0, 0, 0.1); +} + +@media screen and (max-width: 768px) { + .search-result-dropdown-menu { + min-width: calc(100vw - 3.75rem); + } +} + +.search-result-dataset { + position: relative; + border: 1px solid #d9d9d9; + background: #fff; + border-radius: 4px; + overflow: auto; + padding: 8px; + max-height: calc(100vh - 5.25rem); + line-height: 1.5; +} + +.search-result-item { + display: flex; + margin-top: 0.5rem; +} + +.search-result-component-header { + color: #1e1e1e; + border-bottom: 1px solid #ddd; + margin-left: 0.5em; + margin-right: 0.5em; + padding-top: 0.25em; + padding-bottom: 0.25em; +} + +.search-result-document-title { + width: 33%; + border-right: 1px solid #ddd; + color: #02060c; + font-weight: 500; + font-size: 0.8rem; + padding: 0.5rem 0.5rem 0.5rem 0; + text-align: right; + position: relative; + word-wrap: break-word; +} + +.search-result-document-hit { + flex: 1; + font-size: 0.75rem; + color: #63676d; +} + +.search-result-document-hit > a { + color: inherit; + display: block; + padding: 0.55rem 0.25rem 0.55rem 0.75rem; +} + +.search-result-document-hit > a:hover { + background-color: rgba(69, 142, 225, 0.05); +} + +.search-result-document-hit .search-result-highlight { + color: #174d8c; + background: rgba(143, 187, 237, 0.1); + padding: 0.1em 0.05em; + font-weight: 500; +} + +.search-result-document-hit .search-result-section-title { + color: #303030; + font-weight: 500; + font-size: 1.05em; + margin-bottom: 0.25em; +} + +#search-input { + padding: 0.25em; +} + +#search-input:focus { + outline: none; +} + +#search-field { + display: flex; +} + +#search-field .filter { + background: #fff linear-gradient(180deg,#e1e1e1 0,#e1e1e1) no-repeat 0/1px 50%; + border: 1px solid #e1e1e1; + border-left: none; + border-radius: 0 0.1em 0.1em 0; + color: #5d5d5d; + cursor: pointer; + font-size: .875em; + display: flex; + align-items: center; + padding: 0 0.5rem; + white-space: nowrap; + overflow: hidden; +} + +#search-field.has-filter > input { + border-right: none; + border-radius: 0.1em 0 0 0.1em; +} diff --git a/docs/_/css/site.css b/docs/_/css/site.css new file mode 100644 index 000000000..05557942c --- /dev/null +++ b/docs/_/css/site.css @@ -0,0 +1 @@ +@import "https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200";@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(../font/roboto-latin-400-normal.woff2) format("woff2"),url(../font/roboto-latin-400-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:url(../font/roboto-latin-400-italic.woff2) format("woff2"),url(../font/roboto-latin-400-italic.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:url(../font/roboto-latin-500-normal.woff2) format("woff2"),url(../font/roboto-latin-500-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:italic;font-weight:500;src:url(../font/roboto-latin-500-italic.woff2) format("woff2"),url(../font/roboto-latin-500-italic.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:400;src:url(../font/roboto-mono-latin-400-normal.woff2) format("woff2"),url(../font/roboto-mono-latin-400-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:500;src:url(../font/roboto-mono-latin-500-normal.woff2) format("woff2"),url(../font/roboto-mono-latin-500-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:.83333rem;height:100%;scroll-behavior:smooth}@media screen and (min-width:1024px){html{font-size:1rem}}body{background:#fff;color:#314a57;font-family:Noto Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;line-height:var(--body-line-height);font-size:inherit;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{font-family:Noto Mono,SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}b,dt,strong,th{font-weight:600}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:var(--body-line-height);margin:0}button::-moz-focus-inner{border:none;padding:0}summary{cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}table{word-wrap:normal}object[type="image/svg+xml"]:not([width]){width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}::-webkit-input-placeholder{opacity:.5}::-moz-placeholder{opacity:.5}:-ms-input-placeholder{opacity:.5}::-ms-input-placeholder{opacity:.5}::placeholder{opacity:.5}@media (pointer:fine){@supports (scrollbar-width:thin){html{scrollbar-color:#c1c1c1 #eaf0f3}body *{scrollbar-width:thin;scrollbar-color:#c1c1c1 transparent}}html::-webkit-scrollbar{background-color:#eaf0f3;height:12px;width:12px}body ::-webkit-scrollbar{height:6px;width:6px}::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:#c1c1c1;border:3px solid transparent;border-radius:12px}body ::-webkit-scrollbar-thumb{border-width:1.75px;border-radius:6px}::-webkit-scrollbar-thumb:hover{background-color:#9c9c9c}}@media screen and (min-width:1024px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:var(--navbar-height);left:0;width:100%;font-size:1.0625rem;z-index:1;visibility:hidden}@media screen and (min-width:769px){.nav-container{width:16.875rem}}@media screen and (min-width:1024px){.nav-container{font-size:.96875rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible}.nav{position:relative;top:2.8125rem;height:calc(100vh - var(--navbar-height) - 2.8125rem)}@media screen and (min-width:769px){.nav{-webkit-box-shadow:.5px 0 3px #c1c1c1;box-shadow:.5px 0 3px #c1c1c1}}@media screen and (min-width:1024px){.nav{top:var(--navbar-height);-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - var(--navbar-height))}}.nav a{color:inherit}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{overflow-y:scroll;-ms-scroll-chaining:none;overscroll-behavior:none;height:calc(100% - 2.8125rem)}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;top:0;right:0;bottom:0;left:0}.nav-menu{min-height:100%;line-height:1.35;position:relative}.nav-menu h3.title{color:#424242;font-size:inherit;font-weight:600;margin:0;padding:.25em 0 .125em}.nav-list{list-style:none;margin:0 0 0 .75rem;padding:0}.nav-menu>.nav-list+.nav-list{margin-top:.5rem}.nav-item{margin-top:.5em}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.nav-item[data-depth="0"]>.nav-list:first-child{display:block;margin:0}.nav-item:not(.is-active)>.nav-list{display:none}.nav-item-toggle{background:transparent url(../img/caret.svg) no-repeat 50%/50%;border:none;outline:none;line-height:inherit;padding:0;position:absolute;height:1.35em;width:1.35em;margin-top:-.05em;margin-left:-1.35em}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.is-current-page>.nav-link,.is-current-page>.nav-text{font-weight:600}.nav-panel-explore{background:#eaf0f3;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;top:0;right:0;bottom:0;left:0}.nav-panel-explore:not(:first-child){top:auto;max-height:calc(50% + 2.8125rem)}.nav-panel-explore .context{font-size:.9375rem;-ms-flex-negative:0;flex-shrink:0;color:#5d5d5d;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;line-height:1;height:2.8125rem}.nav-panel-explore:not(:first-child) .context{cursor:pointer}.nav-panel-explore .context .version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit}.nav-panel-explore .context .version::after{content:"";background:url(../img/chevron.svg) no-repeat 100%/auto 100%;width:1.25em;height:.75em}.nav-panel-explore .components{line-height:1.15;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-shadow:inset 0 1px 5px #eaf0f3;box-shadow:inset 0 1px 5px #eaf0f3;background:#f0f0f0;padding:.5rem .75rem 0;margin:0;overflow-y:scroll;-ms-scroll-chaining:none;overscroll-behavior:none;max-height:100%;display:block}.nav-panel-explore:not(.is-active) .components{display:none}.nav-panel-explore .component{display:block}.nav-panel-explore .component+.component{margin-top:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:600}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-top:-.25rem;line-height:1;list-style:none}.nav-panel-explore .component .version{margin:.375rem .375rem 0 0}.nav-panel-explore .component .version a{border:1px solid #c1c1c1;border-radius:.25rem;opacity:.75;white-space:nowrap;padding:.125em .25em;display:inherit}.nav-panel-explore .component .is-current a{border-color:currentColor;opacity:.9;font-weight:600}@media screen and (max-width:1023.5px){aside.toc.sidebar{display:none}main>.content{overflow-x:auto}}@media screen and (min-width:1024px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 10.125rem;flex:0 0 10.125rem;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media screen and (min-width:1216px){aside.toc.sidebar{-ms-flex-preferred-size:13.5rem;flex-basis:13.5rem}}.toolbar{color:#5d5d5d;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#eaf0f3;-webkit-box-shadow:0 1px 0 #eaf0f3;box-shadow:0 1px 0 #eaf0f3;font-size:.9375rem;height:2.8125rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;position:sticky;top:var(--navbar-height);z-index:2}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu.svg) no-repeat 50% 47.5%;background-size:49%}.dark .nav-toggle,.nav-toggle{border:none;outline:none;line-height:inherit;padding:0;height:2.8125rem;width:2.8125rem;margin-right:-.25rem}.dark .nav-toggle{background:url(../img/dark-menu.svg) no-repeat 50% 47.5%;background-size:49%}@media screen and (min-width:1024px){.nav-toggle{display:none}}.nav-toggle.is-active{background-image:url(../img/back.svg);background-size:41.5%}.home-link{display:block;background:url(../img/home-o.svg) no-repeat 50%;height:1.40625rem;width:1.40625rem;margin:.70313rem}.home-link.is-current,.home-link:hover{background-image:url(../img/home.svg)}.edit-this-page{display:none;padding-right:.5rem}@media screen and (min-width:1024px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#8e8e8e}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;padding:0 .5rem 0 .75rem;font-size:.7rem;line-height:1.35}@media screen and (min-width:1024px){.breadcrumbs{display:block}}a+.breadcrumbs{padding-left:.05rem}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .5rem}.breadcrumbs li:last-of-type::after{content:none}.page-versions{margin:0 .2rem 0 auto;position:relative;line-height:1}@media screen and (min-width:1024px){.page-versions{margin-right:.7rem}}.page-versions .version-menu-toggle{color:inherit;background:url(../img/chevron.svg) no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;border:none;outline:none;line-height:inherit;padding:.5rem 1.5rem .5rem .5rem;position:relative;z-index:3}.page-versions .version-menu{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;background:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#f0f0f0)) no-repeat;background:linear-gradient(180deg,#f0f0f0 0,#f0f0f0) no-repeat;padding:1.375rem 1.5rem .5rem .5rem;position:absolute;top:0;right:0;white-space:nowrap}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.toc-menu{color:#5d5d5d}.toc.sidebar .toc-menu{margin-right:.75rem;position:sticky;top:calc(var(--navbar-height) + 2.8125rem)}.toc .toc-menu h3{color:#000;font-size:1rem;font-weight:600;line-height:1.3;margin:0 -.5px;padding-bottom:.25rem}.toc.sidebar .toc-menu h3{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:2.5rem;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.toc .toc-menu ul{font-size:.9375rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - var(--navbar-height) - 5.3125rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none}@supports (scrollbar-width:none){.toc.sidebar .toc-menu ul{scrollbar-width:none}}.toc .toc-menu ul::-webkit-scrollbar{width:0;height:0}@media screen and (min-width:1024px){.toc .toc-menu h3{font-size:.9375rem}.toc .toc-menu ul{font-size:.84375rem}}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.25rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}.toc .toc-menu a{color:inherit;border-left:2px solid #eaf0f3;display:inline-block;padding:.25rem 0 .25rem .5rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:hover{color:#1565c0}.toc .toc-menu a.is-active{border-left-color:#1565c0;color:#000}.sidebar.toc .toc-menu a:focus{background:#eaf0f3}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#000;font-family:Noto Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;line-height:1.15;margin:0 auto;max-width:45rem}@media screen and (min-width:1024px){.doc{-webkit-box-flex:1;-ms-flex:auto;flex:auto;font-size:.83333rem;margin:0 2rem;max-width:51.75rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#000;font-weight:600;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0;font-size:revert}.doc>h1.page:first-child{font-size:1.375rem;margin:1.5rem 0}@media screen and (min-width:769px){.doc>h1.page:first-child{margin-top:2.5rem}}.doc>h1.page:first-child+aside.toc.embedded{margin-top:-.5rem}.doc>h2#name+.sectionbody{margin-top:1rem}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#f0f0f0;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){border-bottom:1px solid #eaf0f3;margin-left:-1rem;margin-right:-1rem;padding:.4rem 1rem .1rem}.doc h3:not(.discrete),.doc h4:not(.discrete){font-weight:600}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before{content:"\00a7"}.doc h1:hover .anchor,.doc h2:hover .anchor,.doc h3:hover .anchor,.doc h4:hover .anchor,.doc h5:hover .anchor,.doc h6:hover .anchor{visibility:visible}.doc dl,.doc p{margin:0}.doc a{color:#1565c0}.doc a:hover{color:#104d92}.doc a.bare{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc a.unresolved{color:#d32f2f}.doc i.fa{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-style:normal}.doc .colist>table code,.doc p code,.doc thead code{color:#314a57;background:#eaf0f3;border-radius:.25em;font-size:.95em;padding:.125em .25em}.doc code,.doc pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc pre{font-size:inherit;line-height:1.5;margin:0}.doc blockquote{margin:0}.doc .paragraph.lead>p{font-size:1.125rem}.doc .right{float:right}.doc .left{float:left}.doc .float-gap.right{margin:0 1rem 1rem 0}.doc .float-gap.left{margin:0 0 1rem 1rem}.doc .float-group::after{content:"";display:table;clear:both}.doc .stretch{width:100%}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .hdlist,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .tabs,.doc .ulist,.doc .verseblock,.doc .videoblock,.doc details,.doc hr{margin:1rem 0 0}.doc table.tableblock{font-size:inherit;border:0}.doc .tablecontainer,.doc .tablecontainer+*,.doc :not(.tablecontainer)>table.tableblock,.doc :not(.tablecontainer)>table.tableblock+*{margin-top:1.5rem}.doc p.tableblock+p.tableblock{margin-top:.5rem}.doc td.tableblock>.content>:first-child{margin-top:0}.doc table.tableblock td,.doc table.tableblock th{padding:.5rem}.doc table.tableblock tr th{background-color:#f0f0f0;border:1px solid #dcdcdc}.doc table.tableblock,.doc table.tableblock>*>tr>*{border:0 solid #dcdcdc}.doc table.grid-all>*>tr>*{border-width:1px}.doc table.grid-cols>*>tr>*{border-width:0 1px}.doc table.grid-rows>*>tr>*{border-width:1px 0}.doc table.grid-all>thead th,.doc table.grid-rows>thead th{border-bottom-width:1px}.doc table.frame-all{border-width:0}.doc table.frame-ends{border-width:1px 0}.doc table.frame-sides{border-width:0 1px}.doc table.frame-none>colgroup+*>:first-child>*,.doc table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}.doc table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}.doc table.frame-ends>*>tr>:first-child,.doc table.frame-none>*>tr>:first-child{border-left-width:0}.doc table.frame-ends>*>tr>:last-child,.doc table.frame-none>*>tr>:last-child{border-right-width:0}.doc table.stripes-all>tbody>tr,.doc table.stripes-even>tbody>tr:nth-of-type(2n),.doc table.stripes-hover>tbody>tr:hover,.doc table.stripes-odd>tbody>tr:nth-of-type(odd){background:#eaf0f3}.doc table.tableblock>tfoot{background:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#fff));background:linear-gradient(180deg,#f0f0f0 0,#fff)}.doc .halign-left{text-align:left}.doc .halign-right{text-align:right}.doc .halign-center{text-align:center}.doc .valign-top{vertical-align:top}.doc .valign-bottom{vertical-align:bottom}.doc .valign-middle{vertical-align:middle}.doc .admonitionblock{margin:1.4rem 0 0;padding:1rem;background:#fff;border:1px solid #dcdcdc}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:inherit}.doc .admonitionblock td.content>.title+*,.doc .admonitionblock td.content>:not(.title):first-child{margin-top:0}.doc .admonitionblock pre{font-size:inherit}.doc .admonitionblock>table{table-layout:fixed;position:relative;width:100%}.doc .admonitionblock>table tr{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.25em}.doc .admonitionblock td.content{padding:0 1.7rem;width:100%;word-wrap:anywhere}.doc .admonitionblock .icon{font-size:inherit;padding:0 0 0 1.25rem;line-height:1;font-weight:600;color:#000!important;min-height:1.25rem}.doc .admonitionblock.caution .icon{color:#fff;background:no-repeat url(../img/caution.svg)}.doc .admonitionblock.important .icon{color:#fff;background:no-repeat url(../img/important.svg)}.doc .admonitionblock.note .icon{color:#fff;background:no-repeat url(../img/note.svg)}.doc .admonitionblock.tip .icon{color:#fff;background:no-repeat url(../img/tip.svg)}.doc .admonitionblock.warning .icon{color:#fff;background:no-repeat url(../img/warning.svg)}.doc .admonitionblock .icon i{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;padding:0 .35rem}.doc .admonitionblock .icon i::after{content:attr(title)}.doc .imageblock,.doc .videoblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock.text-left,.doc .videoblock.text-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.doc .imageblock.text-right,.doc .videoblock.text-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.doc .image>img,.doc .image>object,.doc .image>svg,.doc .imageblock img,.doc .imageblock object,.doc .imageblock svg{display:inline-block;height:auto;max-width:100%;vertical-align:middle}.doc .image:not(.left):not(.right)>img{margin-top:-.2em}.doc .videoblock iframe{max-width:100%;vertical-align:middle}#preamble .abstract blockquote{background:#f0f0f0;border-left:5px solid #eaf0f3;color:#4a4a4a;font-size:1rem;padding:.75em 1em}.doc .quoteblock,.doc .verseblock{background:#fefefe;border-left:3px solid #5d5d5d;color:#5d5d5d}.doc .quoteblock{padding:.25rem 1.5rem 1.25rem}.doc .quoteblock .attribution{color:#8e8e8e;font-size:inherit;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc .verseblock{font-size:inherit;padding:1rem 2rem}.doc .verseblock pre{font-family:inherit;font-size:inherit}.doc ol,.doc ul{margin:0;padding:0 0 0 2rem}.doc ul{list-style-type:disc}.doc ol.none,.doc ol.unnumbered,.doc ol.unstyled,.doc ul.checklist,.doc ul.no-bullet,.doc ul.none,.doc ul.unstyled{list-style-type:none}.doc ol.unnumbered,.doc ul.no-bullet{padding-left:1.25rem}.doc ol.unstyled,.doc ul.unstyled{padding-left:0}.doc ul.circle{list-style-type:circle}.doc ul.disc{list-style-type:disc}.doc ul.square{list-style-type:square}.doc ul.circle ul:not([class]),.doc ul.disc ul:not([class]),.doc ul.square ul:not([class]){list-style:inherit}.doc ol.arabic{list-style-type:decimal}.doc ol.decimal{list-style-type:decimal-leading-zero}.doc ol.loweralpha{list-style-type:lower-alpha}.doc ol.upperalpha{list-style-type:upper-alpha}.doc ol.lowerroman{list-style-type:lower-roman}.doc ol.upperroman{list-style-type:upper-roman}.doc ol.lowergreek{list-style-type:lower-greek}.doc ul.checklist{padding-left:1.75rem}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem;margin-left:-1.25rem}.doc ul.checklist i.fa-check-square-o::before{content:"\2713"}.doc ul.checklist i.fa-square-o::before{content:"\274f"}.doc .dlist .dlist,.doc .dlist .olist,.doc .dlist .ulist,.doc .olist .dlist,.doc .olist .olist,.doc .olist .ulist,.doc .olist li+li,.doc .ulist .dlist,.doc .ulist .olist,.doc .ulist .ulist,.doc .ulist li+li{margin-top:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption,.doc .videoblock .title{color:#5d5d5d;font-size:inherit;font-style:italic;font-weight:600;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.35rem}.doc .tableblock caption{text-align:left}.doc .olist .title,.doc .ulist .title{font-style:italic;font-weight:600;margin-bottom:.25rem}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc details{margin-left:1rem}.doc details>summary{display:block;position:relative;line-height:1.15;margin-bottom:.5rem}.doc details>summary::-webkit-details-marker{display:none}.doc details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.275em;left:-1rem;-webkit-transform:translateX(15%);transform:translateX(15%)}.doc details[open]>summary::before{border-color:currentColor transparent transparent;border-width:.5rem .3rem 0;-webkit-transform:translateY(15%);transform:translateY(15%)}.doc details>summary::after{content:"";width:1rem;height:1em;position:absolute;top:.075em;left:-1rem}.doc details.result{margin-top:.25rem}.doc details.result>summary{color:#5d5d5d;font-style:italic;margin-bottom:0}.doc details.result>.content{margin-left:-1rem}.doc .exampleblock>.content,.doc details.result>.content{background:#fff;border:.125rem solid #5d5d5d;border-radius:0;padding:.75rem}.doc .exampleblock>.content::after,.doc details.result>.content::after{content:"";display:table;clear:both}.doc .exampleblock>.content>:first-child,.doc details>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#eaf0f3;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.40625rem;font-weight:600;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc .listingblock pre:not(.highlight),.doc .literalblock pre,.doc pre.highlight code{background:none;border:1px solid #dcdcdc;display:block;overflow-x:auto;padding:.685em;font-size:inherit}.doc .listingblock>.content{position:relative}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:grey;font-family:Noto Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:.8125rem;line-height:1;white-space:nowrap;z-index:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase;letter-spacing:.075em}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1em;height:1em}.doc .source-toolbox .copy-icon{-webkit-box-flex:0;-ms-flex:none;flex:none;width:inherit;height:inherit}.doc .source-toolbox img.copy-icon{-webkit-filter:invert(50.2%);filter:invert(50.2%)}.doc .source-toolbox svg.copy-icon{fill:currentColor}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#000;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .5s;transition:opacity .5s ease .5s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#000;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .25rem 1.5rem}.doc .dlist dd:last-of-type{margin-bottom:0}.doc td.hdlist1,.doc td.hdlist2{padding:.5rem 0 0;vertical-align:top}.doc tr:first-child>.hdlist1,.doc tr:first-child>.hdlist2{padding-top:0}.doc td.hdlist1{font-weight:600;padding-right:.25rem}.doc td.hdlist2{padding-left:.25rem}.doc .colist{font-size:1rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Noto Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:.84375rem;font-style:normal;line-height:1.2;text-align:center;width:1.25em;height:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc hr{border:solid #eaf0f3;border-width:2px 0 0;height:0}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.75rem;background:#eaf0f3;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #fff inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #fff;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:1rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq,.doc .path{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:600;line-height:.90909}.doc :not(pre).nowrap{white-space:nowrap}.doc .nobreak{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;word-wrap:normal}#footnotes{font-size:.85em;line-height:1.5;margin:2rem -.5rem 0}.doc td.tableblock>.content #footnotes{margin:2rem 0 0}#footnotes hr{border-top-width:1px;margin-top:0;width:20%}#footnotes .footnote{margin:.5em 0 0 1em}#footnotes .footnote+.footnote{margin-top:.25em}#footnotes .footnote>a:first-of-type{display:inline-block;margin-left:-2em;text-align:right;width:1.5em}nav.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;border-top:1px solid #eaf0f3;line-height:1;margin:2rem -1rem -1rem;padding:.75rem 1rem 0}.dark nav.pagination{border-top:1px solid var(#051a26)}nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#8e8e8e;font-size:.75em;padding-bottom:.1em}nav.pagination .prev::before{content:"Prev"}nav.pagination .next::before{content:"Next"}nav.pagination a{font-weight:600;line-height:1.3;position:relative}nav.pagination a::after,nav.pagination a::before{color:#8e8e8e;font-weight:400;font-size:1.5em;line-height:.75;position:absolute;top:0;width:1rem}nav.pagination .prev a::before{content:"\2039";-webkit-transform:translateX(-100%);transform:translateX(-100%)}nav.pagination .next a::after{content:"\203a"}.spirit-nav{text-align:right;padding-top:.5em}.spirit-nav a{color:#fff;padding-left:.5em;display:inline-block;vertical-align:middle}.spirit-nav img{border-width:0;vertical-align:middle}html.is-clipped--navbar{overflow-y:hidden}.navbar{background:#eaf0f3;color:#314a57;font-size:1rem;height:var(--navbar-height);position:fixed;top:0;width:100%;z-index:4;border-bottom:2px solid #d1d5db}.navbar a{text-decoration:none}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:auto;flex:auto;padding-left:1rem}.navbar-brand .navbar-item{color:#314a57}.navbar-brand .navbar-item:first-child{-ms-flex-item-align:center;align-self:center;padding:0;font-size:1.375rem;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1}.navbar-brand .navbar-item:first-child a{color:inherit;word-wrap:normal}.navbar-brand .navbar-item:first-child :not(:last-child){padding-right:.375rem}.navbar-brand .navbar-item.search{-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}#search-input{color:#333;font-family:inherit;font-size:.95rem;width:150px;border:1px solid #dbdbdb;border-radius:.1em;line-height:1.5;padding:0 .25em}#search-input:disabled{background-color:#dbdbdb;cursor:not-allowed;pointer-events:all!important}#search-input:disabled::-webkit-input-placeholder{color:#4c4c4c}#search-input:disabled::-moz-placeholder{color:#4c4c4c}#search-input:disabled:-ms-input-placeholder{color:#4c4c4c}#search-input:disabled::-ms-input-placeholder{color:#4c4c4c}#search-input:disabled::placeholder{color:#4c4c4c}#search-input:focus{outline:none}.navbar-burger{background:none;border:none;outline:none;line-height:1;position:relative;width:3rem;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-left:auto;min-width:0}.navbar-burger span{background-color:#314a57;height:1.5px;width:1rem}.navbar-burger:not(.is-active) span{-webkit-transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out}.navbar-burger span+span{margin-top:.25rem}.navbar-burger.is-active span+span{margin-top:-1.5px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.navbar-item,.navbar-link{color:#314a57;display:block;line-height:1.15;padding:.5rem 1rem}.navbar-item.has-dropdown{padding:0}.navbar-item .icon{width:1.25rem;height:1.25rem;display:block}.navbar-item .icon img,.navbar-item .icon svg{fill:currentColor;width:inherit;height:inherit}.navbar-link{padding-right:2.5em}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-dropdown .navbar-item.has-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-dropdown .navbar-item small{color:#8e8e8e;font-size:.75rem}.navbar-divider{background-color:#eaf0f3;border:none;height:1px;margin:.25rem 0}.navbar .button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border:1px solid #eaf0f3;border-radius:.15rem;height:1.75rem;color:#314a57;padding:0 .75em;white-space:nowrap}@media screen and (max-width:768.5px){.navbar-brand .navbar-item.search{padding-left:0;padding-right:0}}@media screen and (min-width:769px){#search-input{width:200px}}@media screen and (max-width:1023.5px){.navbar-brand{height:inherit}.navbar-brand .navbar-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-menu{background:#fff;-webkit-box-shadow:0 8px 16px rgba(10,10,10,.1);box-shadow:0 8px 16px rgba(10,10,10,.1);max-height:calc(100vh - var(--navbar-height));overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none;padding:.5rem 0}.navbar-menu:not(.is-active){display:none}.navbar-menu .navbar-link:hover,.navbar-menu a.navbar-item:hover{background:#eaf0f3}}@media screen and (min-width:1024px){.navbar-burger{display:none}.navbar,.navbar-end,.navbar-item,.navbar-link,.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-item,.navbar-link{position:relative;-webkit-box-flex:0;-ms-flex:none;flex:none}.navbar-item:not(.has-dropdown),.navbar-link{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-link::after{border-width:0 0 1px 1px;border-style:solid;content:"";display:block;height:.5em;pointer-events:none;position:absolute;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);width:.5em;margin-top:-.375em;right:1.125em;top:50%}.navbar-end .navbar-link,.navbar-end>.navbar-item{color:#314a57}.navbar-end .navbar-item.has-dropdown:hover .navbar-link,.navbar-end .navbar-link:hover,.navbar-end>a.navbar-item:hover{background:#eaf0f3;color:#314a57}.navbar-end .navbar-link::after{border-color:currentColor}.navbar-dropdown{background:#fff;border:1px solid #eaf0f3;border-top:none;border-radius:0 0 .25rem .25rem;display:none;top:100%;left:0;min-width:100%;position:absolute}.navbar-dropdown .navbar-item{padding:.5rem 3rem .5rem 1rem;white-space:nowrap}.navbar-dropdown .navbar-item small{position:relative;right:-2rem}.navbar-dropdown .navbar-item:last-child{border-radius:inherit}.navbar-dropdown.is-right{left:auto;right:0}.navbar-dropdown a.navbar-item:hover{background:#eaf0f3}}footer.footer{background-color:#eaf0f3;color:#5d5d5d;font-size:.9375rem;line-height:1.15;padding:.5rem 1.5rem}.footer p{margin:0}.footer a{color:#314a57}/*! Adapted from the GitHub style by Vasily Polovnyov */.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:500}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:500}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:500}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:500}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:500}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375rem}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}.nav-container,.navbar>:not(.navbar-brand),.toolbar,aside.toc,nav.pagination{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .admonitionblock td.icon{-webkit-print-color-adjust:exact;color-adjust:exact}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #eaf0f3;color:#8e8e8e;padding:.25rem .5rem 0}.footer *{color:inherit}}/*! tailwindcss v3.2.7 | MIT License | https://tailwindcss.com*/*,::after,::before{-webkit-box-sizing:border-box;box-sizing:border-box;border:0 solid #e5e7eb}::after,::before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;-webkit-font-feature-settings:normal;font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{opacity:1;color:#9ca3af}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::-ms-input-placeholder,textarea::-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::after,::before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.relative{position:relative}.sticky{position:sticky}.block{display:block}.table{display:table}.contents{display:contents}.resize{resize:both}body,html{height:100%;min-height:100vh}html.is-clipped--nav{overflow-y:visible}@media screen and (min-width:769px){.body{display:-webkit-box;display:-ms-flexbox;display:flex;padding:1rem 1rem 0}}body.article{background-color:#e5e7eb}.max-width-reset{max-width:none}.dark .nav-link,.dark .nav-menu a,.dark .nav-text{color:#ccc}html.is-clipped--nav div#content{display:none;visibility:hidden}html:not(.is-clipped--nav) div#content{display:block;visibility:visible}@media screen and (max-width:768px){.content{width:100%}}@media screen and (min-width:1024px){.doc{margin:0}}aside.nav{position:static;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;height:auto;overflow-y:auto}.dark aside.nav,.dark div.toolbar{background-color:transparent!important}html.is-clipped--nav .nav-close{display:block;visibility:visible}.nav .panels{height:auto}.nav-list{margin-left:0}.nav-list>.nav-list{margin-left:1rem}.nav-menu{padding:0}.nav-panel-menu{overflow-y:auto}.nav-toggle.is-active~.spirit-nav{display:none;visibility:hidden}.nav-toggle{background-position-x:0;background-position-y:50%}.nav-close{display:none;background:url(../img/back.svg) 0 40% no-repeat;background-size:41.5%;border:none;outline:none;line-height:inherit;padding:0;height:2rem;width:3rem;margin-right:-.25rem}.dark .nav-close{background:url(../img/dark-back.svg) 0 40% no-repeat;background-size:41.5%}.nav-container.is-active{position:static;padding:.5rem 1rem 2rem}.nav-link,.nav-menu a,.nav-text{color:#000}@media screen and (min-width:769px){.nav-toggle{display:none;visibility:hidden}.nav-toggle.is-active~.spirit-nav{display:block;visibility:visible}.nav-container{position:sticky;top:1rem;bottom:1rem;left:1rem;height:calc(100vh - 2rem);visibility:visible;min-width:16rem;overflow-y:auto;font-size:1rem!important}.nav-container.is-active{padding-left:1rem;padding-top:1rem}}.toolbar{background-color:#fff;-webkit-box-shadow:unset;box-shadow:unset;height:2rem;position:static;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%}.dark div.toolbar{background-color:#08283a}.toolbar .material-symbols-outlined{font-variation-settings:"FILL" 1,"wght" 700,"GRAD" 200,"opsz" 20!important;color:#000;font-size:18px}.dark .toolbar .material-symbols-outlined{color:#fff}@media screen and (min-width:769px){.toolbar{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}}@media screen and (min-width:1024px){.toolbar{-webkit-box-align:center;-ms-flex-align:center;align-items:center}}.breadcrumbs,.toolbar .breadcrumbs ul{padding-left:0}.breadcrumbs a{color:#424242;font-weight:500}.breadcrumbs li::after{padding:0 .25rem}@media screen and (min-width:769px){.breadcrumbs{display:block;visibility:visible}}.edit-this-page{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin-top:2rem;padding:0}.spirit-nav{padding-top:0}.spirit-nav a{width:1.5rem}.toc.sidebar .toc-menu{top:0}.toc.sidebar{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.toc.sidebar .toc-menu h3{height:auto;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;color:#424242}.toc.embedded{padding-top:.5rem}nav.pagination{padding:1rem}nav.pagination a::after,nav.pagination a::before{width:.75rem}.topnavbar+div.body{margin-left:auto;margin-right:auto;max-width:80rem} \ No newline at end of file diff --git a/docs/_/css/vendor/tabs.css b/docs/_/css/vendor/tabs.css new file mode 100644 index 000000000..27438a4c2 --- /dev/null +++ b/docs/_/css/vendor/tabs.css @@ -0,0 +1 @@ +/*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0} \ No newline at end of file diff --git a/docs/_/font/roboto-latin-400-italic.woff b/docs/_/font/roboto-latin-400-italic.woff new file mode 100644 index 000000000..ebee16b9e Binary files /dev/null and b/docs/_/font/roboto-latin-400-italic.woff differ diff --git a/docs/_/font/roboto-latin-400-italic.woff2 b/docs/_/font/roboto-latin-400-italic.woff2 new file mode 100644 index 000000000..e1b7a79f9 Binary files /dev/null and b/docs/_/font/roboto-latin-400-italic.woff2 differ diff --git a/docs/_/font/roboto-latin-400-normal.woff b/docs/_/font/roboto-latin-400-normal.woff new file mode 100644 index 000000000..9eaa94f9b Binary files /dev/null and b/docs/_/font/roboto-latin-400-normal.woff differ diff --git a/docs/_/font/roboto-latin-400-normal.woff2 b/docs/_/font/roboto-latin-400-normal.woff2 new file mode 100644 index 000000000..020729ef8 Binary files /dev/null and b/docs/_/font/roboto-latin-400-normal.woff2 differ diff --git a/docs/_/font/roboto-latin-500-italic.woff b/docs/_/font/roboto-latin-500-italic.woff new file mode 100644 index 000000000..b6ad1c5be Binary files /dev/null and b/docs/_/font/roboto-latin-500-italic.woff differ diff --git a/docs/_/font/roboto-latin-500-italic.woff2 b/docs/_/font/roboto-latin-500-italic.woff2 new file mode 100644 index 000000000..ae1933f38 Binary files /dev/null and b/docs/_/font/roboto-latin-500-italic.woff2 differ diff --git a/docs/_/font/roboto-latin-500-normal.woff b/docs/_/font/roboto-latin-500-normal.woff new file mode 100644 index 000000000..d39bb52a5 Binary files /dev/null and b/docs/_/font/roboto-latin-500-normal.woff differ diff --git a/docs/_/font/roboto-latin-500-normal.woff2 b/docs/_/font/roboto-latin-500-normal.woff2 new file mode 100644 index 000000000..29342a8de Binary files /dev/null and b/docs/_/font/roboto-latin-500-normal.woff2 differ diff --git a/docs/_/font/roboto-mono-latin-400-normal.woff b/docs/_/font/roboto-mono-latin-400-normal.woff new file mode 100644 index 000000000..be3eb4c4c Binary files /dev/null and b/docs/_/font/roboto-mono-latin-400-normal.woff differ diff --git a/docs/_/font/roboto-mono-latin-400-normal.woff2 b/docs/_/font/roboto-mono-latin-400-normal.woff2 new file mode 100644 index 000000000..f8894bab5 Binary files /dev/null and b/docs/_/font/roboto-mono-latin-400-normal.woff2 differ diff --git a/docs/_/font/roboto-mono-latin-500-normal.woff b/docs/_/font/roboto-mono-latin-500-normal.woff new file mode 100644 index 000000000..43ca6a1b9 Binary files /dev/null and b/docs/_/font/roboto-mono-latin-500-normal.woff differ diff --git a/docs/_/font/roboto-mono-latin-500-normal.woff2 b/docs/_/font/roboto-mono-latin-500-normal.woff2 new file mode 100644 index 000000000..b4f2bf8c2 Binary files /dev/null and b/docs/_/font/roboto-mono-latin-500-normal.woff2 differ diff --git a/docs/_/img/Boost_Brandmark_WhiteBoost_Transparent.svg b/docs/_/img/Boost_Brandmark_WhiteBoost_Transparent.svg new file mode 100644 index 000000000..fe77a17a7 --- /dev/null +++ b/docs/_/img/Boost_Brandmark_WhiteBoost_Transparent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/Boost_Symbol_Transparent.svg b/docs/_/img/Boost_Symbol_Transparent.svg new file mode 100755 index 000000000..6320b867b --- /dev/null +++ b/docs/_/img/Boost_Symbol_Transparent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/arrow-left.svg b/docs/_/img/arrow-left.svg new file mode 100644 index 000000000..320f6c77a --- /dev/null +++ b/docs/_/img/arrow-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/arrow-right.svg b/docs/_/img/arrow-right.svg new file mode 100644 index 000000000..8ae735ad1 --- /dev/null +++ b/docs/_/img/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/arrow-up.svg b/docs/_/img/arrow-up.svg new file mode 100644 index 000000000..8c48c7af6 --- /dev/null +++ b/docs/_/img/arrow-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/back.svg b/docs/_/img/back.svg new file mode 100644 index 000000000..bf7d30e9a --- /dev/null +++ b/docs/_/img/back.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/caret.svg b/docs/_/img/caret.svg new file mode 100644 index 000000000..1af41bc6e --- /dev/null +++ b/docs/_/img/caret.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/caution.svg b/docs/_/img/caution.svg new file mode 100644 index 000000000..dfcb836df --- /dev/null +++ b/docs/_/img/caution.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/chevron.svg b/docs/_/img/chevron.svg new file mode 100644 index 000000000..40e962aff --- /dev/null +++ b/docs/_/img/chevron.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/dark-back.svg b/docs/_/img/dark-back.svg new file mode 100644 index 000000000..b4bd3b167 --- /dev/null +++ b/docs/_/img/dark-back.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/dark-menu.svg b/docs/_/img/dark-menu.svg new file mode 100644 index 000000000..2c2345b9a --- /dev/null +++ b/docs/_/img/dark-menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/home-o.svg b/docs/_/img/home-o.svg new file mode 100644 index 000000000..95d193b77 --- /dev/null +++ b/docs/_/img/home-o.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/home.png b/docs/_/img/home.png new file mode 100644 index 000000000..5584aacb0 Binary files /dev/null and b/docs/_/img/home.png differ diff --git a/docs/_/img/home.svg b/docs/_/img/home.svg new file mode 100644 index 000000000..e63ca19f7 --- /dev/null +++ b/docs/_/img/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/important.svg b/docs/_/img/important.svg new file mode 100644 index 000000000..f0c7878a6 --- /dev/null +++ b/docs/_/img/important.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/menu.svg b/docs/_/img/menu.svg new file mode 100644 index 000000000..8b43b2e00 --- /dev/null +++ b/docs/_/img/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/next.png b/docs/_/img/next.png new file mode 100644 index 000000000..59800b4e8 Binary files /dev/null and b/docs/_/img/next.png differ diff --git a/docs/_/img/note.svg b/docs/_/img/note.svg new file mode 100644 index 000000000..7bda42a79 --- /dev/null +++ b/docs/_/img/note.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/octicons-16.svg b/docs/_/img/octicons-16.svg new file mode 100644 index 000000000..e3b4e2022 --- /dev/null +++ b/docs/_/img/octicons-16.svg @@ -0,0 +1 @@ +Octicons v11.2.0 by GitHub - https://primer.style/octicons/ - License: MIT \ No newline at end of file diff --git a/docs/_/img/prev.png b/docs/_/img/prev.png new file mode 100644 index 000000000..d88a40f92 Binary files /dev/null and b/docs/_/img/prev.png differ diff --git a/docs/_/img/tip.svg b/docs/_/img/tip.svg new file mode 100644 index 000000000..dbdae3ece --- /dev/null +++ b/docs/_/img/tip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/img/up.png b/docs/_/img/up.png new file mode 100644 index 000000000..17d9c3ec4 Binary files /dev/null and b/docs/_/img/up.png differ diff --git a/docs/_/img/warning.svg b/docs/_/img/warning.svg new file mode 100644 index 000000000..e82b19178 --- /dev/null +++ b/docs/_/img/warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_/js/search-ui.js b/docs/_/js/search-ui.js new file mode 100644 index 000000000..53a8dde4d --- /dev/null +++ b/docs/_/js/search-ui.js @@ -0,0 +1,448 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.antoraSearch = {})); +})(this, (function (exports) { 'use strict'; + + function buildHighlightedText (text, positions, snippetLength) { + const textLength = text.length; + const validPositions = positions + .filter((position) => position.length > 0 && position.start + position.length <= textLength); + + if (validPositions.length === 0) { + return [ + { + type: 'text', + text: text.slice(0, snippetLength >= textLength ? textLength : snippetLength) + (snippetLength < textLength ? '...' : ''), + }, + ] + } + + const orderedPositions = validPositions.sort((p1, p2) => p1.start - p2.start); + const range = { + start: 0, + end: textLength, + }; + const firstPosition = orderedPositions[0]; + if (snippetLength && text.length > snippetLength) { + const firstPositionStart = firstPosition.start; + const firstPositionLength = firstPosition.length; + const firstPositionEnd = firstPositionStart + firstPositionLength; + + range.start = firstPositionStart - snippetLength < 0 ? 0 : firstPositionStart - snippetLength; + range.end = firstPositionEnd + snippetLength > textLength ? textLength : firstPositionEnd + snippetLength; + } + const nodes = []; + if (firstPosition.start > 0) { + nodes.push({ + type: 'text', + text: (range.start > 0 ? '...' : '') + text.slice(range.start, firstPosition.start), + }); + } + let lastEndPosition = 0; + const positionsWithinRange = orderedPositions + .filter((position) => position.start >= range.start && position.start + position.length <= range.end); + + for (const position of positionsWithinRange) { + const start = position.start; + const length = position.length; + const end = start + length; + if (lastEndPosition > 0) { + // create text Node from the last end position to the start of the current position + nodes.push({ + type: 'text', + text: text.slice(lastEndPosition, start), + }); + } + nodes.push({ + type: 'mark', + text: text.slice(start, end), + }); + lastEndPosition = end; + } + if (lastEndPosition < range.end) { + nodes.push({ + type: 'text', + text: text.slice(lastEndPosition, range.end) + (range.end < textLength ? '...' : ''), + }); + } + + return nodes + } + + /** + * Taken and adapted from: https://github.com/olivernn/lunr.js/blob/aa5a878f62a6bba1e8e5b95714899e17e8150b38/lib/tokenizer.js#L24-L67 + * @param lunr + * @param text + * @param term + * @return {{start: number, length: number}} + */ + function findTermPosition (lunr, term, text) { + const str = text.toLowerCase(); + const len = str.length; + + for (let sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { + const char = str.charAt(sliceEnd); + const sliceLength = sliceEnd - sliceStart; + + if ((char.match(lunr.tokenizer.separator) || sliceEnd === len)) { + if (sliceLength > 0) { + const value = str.slice(sliceStart, sliceEnd); + // QUESTION: if we get an exact match without running the pipeline should we stop? + if (value.includes(term)) { + // returns the first match + return { + start: sliceStart, + length: value.length, + } + } + } + sliceStart = sliceEnd + 1; + } + } + + // not found! + return { + start: 0, + length: 0, + } + } + + /* global CustomEvent, globalThis */ + + const config = document.getElementById('search-ui-script').dataset; + const snippetLength = parseInt(config.snippetLength || 100, 10); + const siteRootPath = config.siteRootPath || ''; + appendStylesheet(config.stylesheet); + const searchInput = document.getElementById('search-input'); + const searchResultContainer = document.createElement('div'); + searchResultContainer.classList.add('search-result-dropdown-menu'); + searchInput.parentNode.appendChild(searchResultContainer); + const facetFilterInput = document.querySelector('#search-field input[type=checkbox][data-facet-filter]'); + + function appendStylesheet (href) { + if (!href) return + const link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = href; + document.head.appendChild(link); + } + + function highlightPageTitle (title, terms) { + const positions = getTermPosition(title, terms); + return buildHighlightedText(title, positions, snippetLength) + } + + function highlightSectionTitle (sectionTitle, terms) { + if (sectionTitle) { + const text = sectionTitle.text; + const positions = getTermPosition(text, terms); + return buildHighlightedText(text, positions, snippetLength) + } + return [] + } + + function highlightText (doc, terms) { + const text = doc.text; + const positions = getTermPosition(text, terms); + return buildHighlightedText(text, positions, snippetLength) + } + + function getTermPosition (text, terms) { + const positions = terms + .map((term) => findTermPosition(globalThis.lunr, term, text)) + .filter((position) => position.length > 0) + .sort((p1, p2) => p1.start - p2.start); + + if (positions.length === 0) { + return [] + } + return positions + } + + function highlightHit (searchMetadata, sectionTitle, doc) { + const terms = {}; + for (const term in searchMetadata) { + const fields = searchMetadata[term]; + for (const field in fields) { + terms[field] = [...(terms[field] || []), term]; + } + } + return { + pageTitleNodes: highlightPageTitle(doc.title, terms.title || []), + sectionTitleNodes: highlightSectionTitle(sectionTitle, terms.title || []), + pageContentNodes: highlightText(doc, terms.text || []), + } + } + + function createSearchResult (result, store, searchResultDataset) { + let currentComponent; + result.forEach(function (item) { + const ids = item.ref.split('-'); + const docId = ids[0]; + const doc = store.documents[docId]; + let sectionTitle; + if (ids.length > 1) { + const titleId = ids[1]; + sectionTitle = doc.titles.filter(function (item) { + return String(item.id) === titleId + })[0]; + } + const metadata = item.matchData.metadata; + const highlightingResult = highlightHit(metadata, sectionTitle, doc); + const componentVersion = store.componentVersions[`${doc.component}/${doc.version}`]; + if (componentVersion !== undefined && currentComponent !== componentVersion) { + const searchResultComponentHeader = document.createElement('div'); + searchResultComponentHeader.classList.add('search-result-component-header'); + const { title, displayVersion } = componentVersion; + const componentVersionText = `${title}${doc.version && displayVersion ? ` ${displayVersion}` : ''}`; + searchResultComponentHeader.appendChild(document.createTextNode(componentVersionText)); + searchResultDataset.appendChild(searchResultComponentHeader); + currentComponent = componentVersion; + } + searchResultDataset.appendChild(createSearchResultItem(doc, sectionTitle, item, highlightingResult)); + }); + } + + function createSearchResultItem (doc, sectionTitle, item, highlightingResult) { + const documentTitle = document.createElement('div'); + documentTitle.classList.add('search-result-document-title'); + highlightingResult.pageTitleNodes.forEach(function (node) { + let element; + if (node.type === 'text') { + element = document.createTextNode(node.text); + } else { + element = document.createElement('span'); + element.classList.add('search-result-highlight'); + element.innerText = node.text; + } + documentTitle.appendChild(element); + }); + const documentHit = document.createElement('div'); + documentHit.classList.add('search-result-document-hit'); + const documentHitLink = document.createElement('a'); + documentHitLink.href = siteRootPath + doc.url + (sectionTitle ? '#' + sectionTitle.hash : ''); + documentHit.appendChild(documentHitLink); + if (highlightingResult.sectionTitleNodes.length > 0) { + const documentSectionTitle = document.createElement('div'); + documentSectionTitle.classList.add('search-result-section-title'); + documentHitLink.appendChild(documentSectionTitle); + highlightingResult.sectionTitleNodes.forEach(function (node) { + let element; + if (node.type === 'text') { + element = document.createTextNode(node.text); + } else { + element = document.createElement('span'); + element.classList.add('search-result-highlight'); + element.innerText = node.text; + } + documentSectionTitle.appendChild(element); + }); + } + highlightingResult.pageContentNodes.forEach(function (node) { + let element; + if (node.type === 'text') { + element = document.createTextNode(node.text); + } else { + element = document.createElement('span'); + element.classList.add('search-result-highlight'); + element.innerText = node.text; + } + documentHitLink.appendChild(element); + }); + const searchResultItem = document.createElement('div'); + searchResultItem.classList.add('search-result-item'); + searchResultItem.appendChild(documentTitle); + searchResultItem.appendChild(documentHit); + searchResultItem.addEventListener('mousedown', function (e) { + e.preventDefault(); + }); + return searchResultItem + } + + function createNoResult (text) { + const searchResultItem = document.createElement('div'); + searchResultItem.classList.add('search-result-item'); + const documentHit = document.createElement('div'); + documentHit.classList.add('search-result-document-hit'); + const message = document.createElement('strong'); + message.innerText = 'No results found for query "' + text + '"'; + documentHit.appendChild(message); + searchResultItem.appendChild(documentHit); + return searchResultItem + } + + function clearSearchResults (reset) { + if (reset === true) searchInput.value = ''; + searchResultContainer.innerHTML = ''; + } + + function filter (result, documents) { + const facetFilter = facetFilterInput && facetFilterInput.checked && facetFilterInput.dataset.facetFilter; + if (facetFilter) { + const [field, value] = facetFilter.split(':'); + return result.filter((item) => { + const ids = item.ref.split('-'); + const docId = ids[0]; + const doc = documents[docId]; + return field in doc && doc[field] === value + }) + } + return result + } + + function search (index, documents, queryString) { + // execute an exact match search + let query; + let result = filter( + index.query(function (lunrQuery) { + const parser = new globalThis.lunr.QueryParser(queryString, lunrQuery); + parser.parse(); + query = lunrQuery; + }), + documents + ); + if (result.length > 0) { + return result + } + // no result, use a begins with search + result = filter( + index.query(function (lunrQuery) { + lunrQuery.clauses = query.clauses.map((clause) => { + if (clause.presence !== globalThis.lunr.Query.presence.PROHIBITED) { + clause.term = clause.term + '*'; + clause.wildcard = globalThis.lunr.Query.wildcard.TRAILING; + clause.usePipeline = false; + } + return clause + }); + }), + documents + ); + if (result.length > 0) { + return result + } + // no result, use a contains search + result = filter( + index.query(function (lunrQuery) { + lunrQuery.clauses = query.clauses.map((clause) => { + if (clause.presence !== globalThis.lunr.Query.presence.PROHIBITED) { + clause.term = '*' + clause.term + '*'; + clause.wildcard = globalThis.lunr.Query.wildcard.LEADING | globalThis.lunr.Query.wildcard.TRAILING; + clause.usePipeline = false; + } + return clause + }); + }), + documents + ); + return result + } + + function searchIndex (index, store, text) { + clearSearchResults(false); + if (text.trim() === '') { + return + } + const result = search(index, store.documents, text); + const searchResultDataset = document.createElement('div'); + searchResultDataset.classList.add('search-result-dataset'); + searchResultContainer.appendChild(searchResultDataset); + if (result.length > 0) { + createSearchResult(result, store, searchResultDataset); + } else { + searchResultDataset.appendChild(createNoResult(text)); + } + } + + function confineEvent (e) { + e.stopPropagation(); + } + + function debounce (func, wait, immediate) { + let timeout; + return function () { + const context = this; + const args = arguments; + const later = function () { + timeout = null; + if (!immediate) func.apply(context, args); + }; + const callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + } + } + + function enableSearchInput (enabled) { + if (facetFilterInput) { + facetFilterInput.disabled = !enabled; + } + searchInput.disabled = !enabled; + searchInput.title = enabled ? '' : 'Loading index...'; + } + + function isClosed () { + return searchResultContainer.childElementCount === 0 + } + + function executeSearch (index) { + const debug = 'URLSearchParams' in globalThis && new URLSearchParams(globalThis.location.search).has('lunr-debug'); + const query = searchInput.value; + try { + if (!query) return clearSearchResults() + searchIndex(index.index, index.store, query); + } catch (err) { + if (err instanceof globalThis.lunr.QueryParseError) { + if (debug) { + console.debug('Invalid search query: ' + query + ' (' + err.message + ')'); + } + } else { + console.error('Something went wrong while searching', err); + } + } + } + + function toggleFilter (e, index) { + searchInput.focus(); + if (!isClosed()) { + executeSearch(index); + } + } + + function initSearch (lunr, data) { + const start = performance.now(); + const index = { index: lunr.Index.load(data.index), store: data.store }; + enableSearchInput(true); + searchInput.dispatchEvent( + new CustomEvent('loadedindex', { + detail: { + took: performance.now() - start, + }, + }) + ); + searchInput.addEventListener( + 'keydown', + debounce(function (e) { + if (e.key === 'Escape' || e.key === 'Esc') return clearSearchResults(true) + executeSearch(index); + }, 100) + ); + searchInput.addEventListener('click', confineEvent); + searchResultContainer.addEventListener('click', confineEvent); + if (facetFilterInput) { + facetFilterInput.parentElement.addEventListener('click', confineEvent); + facetFilterInput.addEventListener('change', (e) => toggleFilter(e, index)); + } + document.documentElement.addEventListener('click', clearSearchResults); + } + + // disable the search input until the index is loaded + enableSearchInput(false); + + exports.initSearch = initSearch; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/docs/_/js/site.js b/docs/_/js/site.js new file mode 100644 index 000000000..e094f19b0 --- /dev/null +++ b/docs/_/js/site.js @@ -0,0 +1,6 @@ +!function(){"use strict";var s,o,r=/^sect(\d)$/,t=document.querySelector(".nav-container"),n=document.querySelector(".nav-toggle"),a=t.querySelector(".nav"),e=t.querySelector(".nav-close"),l=(n.addEventListener("click",function(e){if(n.classList.contains("is-active"))return u(e);v(e);e=document.documentElement;e.classList.add("is-clipped--nav"),n.classList.add("is-active"),t.classList.add("is-active"),e.addEventListener("click",u)}),t.addEventListener("click",v),e.addEventListener("click",u),t.querySelector("[data-panel=menu]"));function i(){var e,t,n=window.location.hash;if(n&&(n.indexOf("%")&&(n=decodeURIComponent(n)),!(e=l.querySelector('.nav-link[href="'+n+'"]')))){n=document.getElementById(n.slice(1));if(n)for(var i=n,c=document.querySelector("article.doc");(i=i.parentNode)&&i!==c;){var a=i.id;if((a=a||(a=r.test(i.className))&&(i.firstElementChild||{}).id)&&(e=l.querySelector('.nav-link[href="#'+a+'"]')))break}}if(e)t=e.parentNode;else{if(!o)return;e=(t=o).querySelector(".nav-link")}t!==s&&(p(l,".nav-item.is-active").forEach(function(e){e.classList.remove("is-active","is-current-path","is-current-page")}),t.classList.add("is-current-page"),d(s=t),m(l,e))}function d(e){for(var t,n=e.parentNode;!(t=n.classList).contains("nav-menu");)"LI"===n.tagName&&t.contains("nav-item")&&t.add("is-active","is-current-path"),n=n.parentNode;e.classList.add("is-active")}function c(){var e,t,n,i;this.classList.toggle("is-active")&&(e=parseFloat(window.getComputedStyle(this).marginTop),t=this.getBoundingClientRect(),n=l.getBoundingClientRect(),0<(i=(t.bottom-n.top-n.height+e).toFixed()))&&(l.scrollTop+=Math.min((t.top-n.top-e).toFixed(),i))}function u(e){v(e);e=document.documentElement;e.classList.remove("is-clipped--nav"),n.classList.remove("is-active"),t.classList.remove("is-active"),e.removeEventListener("click",u)}function v(e){e.stopPropagation()}function m(e,t){var n=e.getBoundingClientRect(),i=n.height,c=window.getComputedStyle(a);"sticky"===c.position&&(i-=n.top-parseFloat(c.top)),e.scrollTop=Math.max(0,.5*(t.getBoundingClientRect().height-i)+t.offsetTop)}function p(e,t){return[].slice.call(e.querySelectorAll(t))}l&&(e=t.querySelector("[data-panel=explore]"),s=l.querySelector(".is-current-page"),(o=s)?(d(s),m(l,s.querySelector(".nav-link"))):l.scrollTop=0,p(l,".nav-item-toggle").forEach(function(e){var t=e.parentElement,e=(e.addEventListener("click",c.bind(t)),function(e,t){e=e.nextElementSibling;return(!e||!t||e[e.matches?"matches":"msMatchesSelector"](t))&&e}(e,".nav-text"));e&&(e.style.cursor="pointer",e.addEventListener("click",c.bind(t)))}),e&&e.querySelector(".context").addEventListener("click",function(){p(a,"[data-panel]").forEach(function(e){e.classList.toggle("is-active")})}),l.addEventListener("mousedown",function(e){1":"")+".sect"+c);r.push("h"+(i+1)+"[id]")}else r.push("h1[id].sect0");n.push(r.join(">"))}m=n.join(","),f=d.parentNode;var a,s=[].slice.call((f||document).querySelectorAll(m));if(!s.length)return e.parentNode.removeChild(e);var l={},u=s.reduce(function(e,t){var o=document.createElement("a"),n=(o.textContent=t.textContent,l[o.href="#"+t.id]=o,document.createElement("li"));return n.dataset.level=parseInt(t.nodeName.slice(1),10)-1,n.appendChild(o),e.appendChild(n),e},document.createElement("ul")),f=e.querySelector(".toc-menu"),m=(f||((f=document.createElement("div")).className="toc-menu"),document.createElement("h3")),e=(m.textContent=e.dataset.title||"Contents",f.appendChild(m),f.appendChild(u),!document.getElementById("toc")&&d.querySelector("h1.page ~ :not(.is-before-toc)"));e&&((m=document.createElement("aside")).className="toc embedded",m.appendChild(f.cloneNode(!0)),e.parentNode.insertBefore(m,e)),window.addEventListener("load",function(){p(),window.addEventListener("scroll",p)})}}function p(){var n,i,t,e=window.pageYOffset,o=1.15*h(document.documentElement,"fontSize"),r=d.offsetTop;e&&window.innerHeight+e+2>=document.documentElement.scrollHeight?(a=Array.isArray(a)?a:Array(a||0),n=[],i=s.length-1,s.forEach(function(e,t){var o="#"+e.id;t===i||e.getBoundingClientRect().top+h(e,"paddingTop")>r?(n.push(o),a.indexOf(o)<0&&l[o].classList.add("is-active")):~a.indexOf(o)&&l[a.shift()].classList.remove("is-active")}),u.scrollTop=u.scrollHeight-u.offsetHeight,a=1r)return!0;t="#"+e.id}),t?t!==a&&(a&&l[a].classList.remove("is-active"),(e=l[t]).classList.add("is-active"),u.scrollHeight>u.offsetHeight&&(u.scrollTop=Math.max(0,e.offsetTop+e.offsetHeight-u.offsetHeight)),a=t):a&&(l[a].classList.remove("is-active"),a=void 0))}function h(e,t){return parseFloat(window.getComputedStyle(e)[t])}}(); +!function(){"use strict";var o=document.querySelector("article.doc"),t=document.querySelector(".toolbar");function i(e){return e&&(~e.indexOf("%")?decodeURIComponent(e):e).slice(1)}function r(e){if(e){if(e.altKey||e.ctrlKey)return;window.location.hash="#"+this.id,e.preventDefault()}window.scrollTo(0,function e(t,n){return o.contains(t)?e(t.offsetParent,t.offsetTop+n):n}(this,0)-t.getBoundingClientRect().bottom)}window.addEventListener("load",function e(t){var n;(n=i(window.location.hash))&&(n=document.getElementById(n))&&(r.bind(n)(),setTimeout(r.bind(n),0)),window.removeEventListener("load",e)}),Array.prototype.slice.call(document.querySelectorAll('a[href^="#"]')).forEach(function(e){var t;(t=i(e.hash))&&(t=document.getElementById(t))&&e.addEventListener("click",r.bind(t))})}(); +!function(){"use strict";var t,e=document.querySelector(".page-versions .version-menu-toggle");e&&(t=document.querySelector(".page-versions"),e.addEventListener("click",function(e){t.classList.toggle("is-active"),e.stopPropagation()}),document.documentElement.addEventListener("click",function(){t.classList.remove("is-active")}))}(); +!function(){"use strict";var t=document.querySelector(".navbar-burger");t&&t.addEventListener("click",function(t){t.stopPropagation(),document.documentElement.classList.toggle("is-clipped--navbar"),this.classList.toggle("is-active");t=document.getElementById(this.dataset.target);{var e;t.classList.toggle("is-active")&&(t.style.maxHeight="",e=window.innerHeight-Math.round(t.getBoundingClientRect().top),parseInt(window.getComputedStyle(t).maxHeight,10)!==e)&&(t.style.maxHeight=e+"px")}}.bind(t))}(); +!function(){"use strict";var o=/^\$ (\S[^\\\n]*(\\\n(?!\$ )[^\\\n]*)*)(?=\n|$)/gm,s=/( ) *\\\n *|\\\n( ?) */g,l=/ +$/gm,e=(document.getElementById("site-script")||{dataset:{}}).dataset,d=null==e.uiRootPath?".":e.uiRootPath,r=e.svgAs,p=window.navigator.clipboard;[].slice.call(document.querySelectorAll(".doc pre.highlight, .doc .literalblock pre")).forEach(function(e){var t,n,a,c;if(e.classList.contains("highlight"))(i=(t=e.querySelector("code")).dataset.lang)&&"console"!==i&&((a=document.createElement("span")).className="source-lang",a.appendChild(document.createTextNode(i)));else{if(!e.innerText.startsWith("$ "))return;var i=e.parentNode.parentNode;i.classList.remove("literalblock"),i.classList.add("listingblock"),e.classList.add("highlightjs","highlight"),(t=document.createElement("code")).className="language-console hljs",t.dataset.lang="console",t.appendChild(e.firstChild),e.appendChild(t)}(i=document.createElement("div")).className="source-toolbox",a&&i.appendChild(a),p&&((n=document.createElement("button")).className="copy-button",n.setAttribute("title","Copy to clipboard"),"svg"===r?((a=document.createElementNS("http://www.w3.org/2000/svg","svg")).setAttribute("class","copy-icon"),(c=document.createElementNS("http://www.w3.org/2000/svg","use")).setAttribute("href",d+"/img/octicons-16.svg#icon-clippy"),a.appendChild(c),n.appendChild(a)):((c=document.createElement("img")).src=d+"/img/octicons-16.svg#view-clippy",c.alt="copy icon",c.className="copy-icon",n.appendChild(c)),(a=document.createElement("span")).className="copy-toast",a.appendChild(document.createTextNode("Copied!")),n.appendChild(a),i.appendChild(n)),e.parentNode.appendChild(i),n&&n.addEventListener("click",function(e){var t=e.innerText.replace(l,"");"console"===e.dataset.lang&&t.startsWith("$ ")&&(t=function(e){var t,n=[];for(;t=o.exec(e);)n.push(t[1].replace(s,"$1$2"));return n.join(" && ")}(t));window.navigator.clipboard.writeText(t).then(function(){this.classList.add("clicked"),this.offsetHeight,this.classList.remove("clicked")}.bind(this),function(){})}.bind(n,t))})}(); \ No newline at end of file diff --git a/docs/_/js/vendor/highlight.js b/docs/_/js/vendor/highlight.js new file mode 100644 index 000000000..fb959813b --- /dev/null +++ b/docs/_/js/vendor/highlight.js @@ -0,0 +1 @@ +!function(){function e(e){return{aliases:["adoc"],contains:[e.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),e.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",relevance:10,variants:[{begin:"^(={1,5}) .+?( \\1)?$"},{begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{className:"strong",begin:"\\B\\*(?![\\*\\s])",end:"(\\n{2}|\\*)",contains:[{begin:"\\\\*\\w",relevance:0}]},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0},{className:"emphasis",begin:"_(?![_\\s])",end:"(\\n{2}|_)",relevance:0},{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}}function n(e){var n={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},a={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]};return{aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,a,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},n]}}function a(e){var n={begin:g="["+(g="a-zA-Z_\\-!.?+*=<>&#'")+"]["+g+"0-9/;:]*",relevance:0},a={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},t=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i=e.COMMENT(";","$",{relevance:0}),s={className:"literal",begin:/\b(true|false|nil)\b/},r={begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+g},o=e.COMMENT("\\^\\{","\\}"),c={className:"symbol",begin:"[:]{1,2}"+g},d={begin:"\\(",end:"\\)"},u={endsWithParent:!0,relevance:0},g={keywords:{"builtin-name":"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},lexemes:g,className:"name",begin:g,starts:u},n=[d,t,l,o,i,c,r,a,s,n];return d.contains=[e.COMMENT("comment",""),g,u],u.contains=n,r.contains=n,o.contains=[r],{aliases:["clj"],illegal:/\S/,contains:[d,t,l,o,i,c,r,a,s]}}function t(e){function n(e){return"(?:"+e+")?"}var a="decltype\\(auto\\)",t="[a-zA-Z_]\\w*::",i={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},s={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},{begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},r={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:n(t)+e.IDENT_RE,relevance:0},t=n(t)+e.IDENT_RE+"\\s*\\(",c={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,s],u={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:c,contains:d.concat([{begin:/\(/,end:/\)/,keywords:c,contains:d.concat(["self"]),relevance:0}]),relevance:0},a={className:"function",begin:"((decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<.*?>)?)[\\*&\\s]+)+"+t,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:c,illegal:/[^\w\s\*&:<>]/,contains:[{begin:a,keywords:c,relevance:0},{begin:t,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,r,i,{begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,r,i]}]},i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:c,illegal:"",keywords:c,contains:["self",i]},{begin:e.IDENT_RE+"::",keywords:c},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:l,strings:s,keywords:c}}}function i(e){return{aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"},contains:[{className:"variable",begin:"\\${",end:"}"},e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}function s(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},t={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},i=e.inherit(t,{illegal:/\n/}),s={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},s]},c=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]}),s=(s.contains=[o,l,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})],{variants:[o,l,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}),r=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},s,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[e.TITLE_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+r+"\\s+)+"+e.IDENT_RE+"\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[s,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}}function r(e){var n={className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}};return{case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,{begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[n]}]}]}}function l(e){return{aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}function o(e){return{aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"/}]}]}]},s={className:"string",begin:"~[A-Z](?="+s+")",contains:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin:/\/}]},r={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},l={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},o=e.inherit(l,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),s=[r,s,i,e.HASH_COMMENT_MODE,o,l,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[r,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:n+":(?!:)",relevance:0},{className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"->"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[e.HASH_COMMENT_MODE,{className:"regexp",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return{lexemes:n,keywords:a,contains:t.contains=s}}function d(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],keywords:n,illegal:"|<-"}]}}function _(e){var n="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",a={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0};return{aliases:["jsp"],keywords:n,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:n,relevance:0,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},a,{className:"meta",begin:"@[A-Za-z]+"}]}}function m(e){var n="<>",a="",t=/<[A-Za-z0-9\\._:-]+/,i=/\/[A-Za-z0-9\\._:-]+>|\/>/,s="[A-Za-z$_][0-9A-Za-z$_]*",r={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:r,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},d={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,o]},o=(o.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,u,l,e.REGEXP_MODE],o.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]));return{aliases:["js","jsx","mjs","cjs"],keywords:r,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,u,e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:s+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,l,{begin:/[{,\n]\s*/,relevance:0,contains:[{begin:s+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:s,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+s+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:s},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,contains:o}]}]},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:n,end:a},{begin:t,end:i}],subLanguage:"xml",contains:[{begin:t,end:i,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:s}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:o}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor get set",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}function b(e){var n={literal:"true false null"},a=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],t=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],i={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:n},s={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(i,{begin:/:/})].concat(a),illegal:"\\S"},e={begin:"\\[",end:"\\]",contains:[e.inherit(i)],illegal:"\\S"};return t.push(s,e),a.forEach(function(e){t.push(e)}),{contains:t,keywords:n,illegal:"\\S"}}function p(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},t={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},i={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,i,t]}]},t=(t.contains.push(i),{className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"}),s={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(i,{className:"meta-string"})]}]},r={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0},l=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},c=o;return c.variants[1].contains=[o],o.variants[1].contains=[c],{aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,l,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,t,s,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,l],relevance:0},e.C_LINE_COMMENT_MODE,l,t,s,i,e.C_NUMBER_MODE]},l]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},t,s]},i,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},r]}}function f(e){var n="\\[=*\\[",a="\\]=*\\]",t={begin:n,end:a,contains:["self"]},i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,a,{contains:[t],relevance:10})];return{lexemes:e.UNDERSCORE_IDENT_RE,keywords:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:i}].concat(i)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:n,end:a,contains:[t],relevance:5}])}}function E(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^\\s*([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"quote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"^```\\w*\\s*$",end:"^```[ ]*$"},{begin:"`.+?`"},{begin:"^( {4}|\\t)",end:"$",relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}function h(e){var n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},a={className:"subst",begin:/\$\{/,end:/}/,keywords:n},e=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",contains:[a],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return{aliases:["nixos"],keywords:n,contains:a.contains=e}}function N(e){return{disableAutodetect:!0}}function y(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,a="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],keywords:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},lexemes:n,illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+a.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:a,lexemes:n,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}function v(e){var n="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",a={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},t={begin:"->{",end:"}"},i={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},s=[e.BACKSLASH_ESCAPE,a,i],i=[i,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),t,{className:"string",contains:s,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return a.contains=i,{aliases:["pl","pm"],lexemes:/[\w\.]+/,keywords:n,contains:t.contains=i}}function w(e){var n={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},a={className:"meta",begin:/<\?(php)?|\?>/},t={className:"string",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},i={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[a]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},a,{className:"keyword",begin:/\$this\b/},n,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",n,e.C_BLOCK_COMMENT_MODE,t,i]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},t,i]}}function O(e){var n="[ \\t\\f]*",a="("+n+"[:=]"+n+"|[ \\t\\f]+)",t="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",i="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:a,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:t+a,returnBegin:!0,contains:[{className:"attr",begin:t,endsParent:!0,relevance:0}],starts:s},{begin:i+a,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:i,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:i+n+"$"}]}}function M(e){var n=e.COMMENT("#","$"),a="([A-Za-z_]|::)(\\w|::)*",t=e.inherit(e.TITLE_MODE,{begin:a}),a={className:"variable",begin:"\\$"+a},i={className:"string",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]};return{aliases:["pp"],contains:[n,a,i,{beginKeywords:"class",end:"\\{|;",illegal:/=/,contains:[t,n]},{beginKeywords:"define",end:/\{/,contains:[{className:"section",begin:e.IDENT_RE,endsParent:!0}]},{begin:e.IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\S/,contains:[{className:"keyword",begin:e.IDENT_RE},{begin:/\{/,end:/\}/,keywords:{keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},relevance:0,contains:[i,n,{begin:"[a-zA-Z_]+\\s*=>",returnBegin:!0,end:"=>",contains:[{className:"attr",begin:e.IDENT_RE}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},a]}],relevance:0}]}}function x(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},t={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},i={begin:/\{\{/,relevance:0},i={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,i,t]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,i,t]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,i,t]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i,t]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},s={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},r={className:"params",begin:/\(/,end:/\)/,contains:["self",a,s,i,e.HASH_COMMENT_MODE]};return t.contains=[i,s,a],{aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,s,{beginKeywords:"if",relevance:0},i,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,r,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}function C(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},t={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},t=[e.COMMENT("#","$",{contains:[t]}),e.COMMENT("^\\=begin","^\\=end",{contains:[t],relevance:10}),e.COMMENT("^__END__","\\n$")],s={className:"subst",begin:"#\\{",end:"}",keywords:a},r={className:"string",contains:[e.BACKSLASH_ESCAPE,s],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},{begin:/\w+/,endSameAsBegin:!0,contains:[e.BACKSLASH_ESCAPE,s]}]}]},l={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},r=[r,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(t)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),l].concat(t)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[r,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,s],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(t),relevance:0}].concat(t);return s.contains=r,{aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:t.concat([{begin:/^\s*=>/,starts:{end:"$",contains:l.contains=r}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:r}}]).concat(r)}}function k(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",a="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{aliases:["rs"],keywords:{keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:a},lexemes:e.IDENT_RE+"!?",illegal:""}]}}function S(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},n={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},a={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0};return{keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},a,{className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]},{className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[a]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[a]},t]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}function T(e){return{aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}function A(e){var n=e.COMMENT("--","$");return{case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,lexemes:/[\w\.]+/,keywords:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,n,e.HASH_COMMENT_MODE]}}function R(e){var n={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},a=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:n,contains:[]},i={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},s={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[s],{keywords:n,contains:[i,e.C_LINE_COMMENT_MODE,a,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},s,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,contains:["self",s,i,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:n,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,a]}]}}function B(e){var n={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},a={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},t=e.inherit(a,{begin:"\\(",end:"\\)"}),i=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),s=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),r={endsWithParent:!0,illegal:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,s,i,t,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,t,s,i]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[r],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[r],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},r]}]}}function U(e){var n="true false yes no null",a={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]};return{case_insensitive:!0,aliases:["yml","YAML","yaml"],contains:[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!"+e.UNDERSCORE_IDENT_RE},{className:"type",begin:"!!"+e.UNDERSCORE_IDENT_RE},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:e.C_NUMBER_RE+"\\b"},a]}}var D,L,I={};D=function(t){var a,u=[],s=Object.keys,w=Object.create(null),r=Object.create(null),O=!0,n=/^(no-?highlight|plain|text)$/i,l=/\blang(?:uage)?-([\w-]+)\b/i,i=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,M="",x="Could not find the language '{}', did you forget to load/include a language module?",C={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},o="of and for in not or if then".split(" ");function k(e){return e.replace(/&/g,"&").replace(//g,">")}function g(e){return e.nodeName.toLowerCase()}function c(e){return n.test(e)}function d(e){var n,a={},t=Array.prototype.slice.call(arguments,1);for(n in e)a[n]=e[n];return t.forEach(function(e){for(n in e)a[n]=e[n]}),a}function _(e){var i=[];return function e(n,a){for(var t=n.firstChild;t;t=t.nextSibling)3===t.nodeType?a+=t.nodeValue.length:1===t.nodeType&&(i.push({event:"start",offset:a,node:t}),a=e(t,a),g(t).match(/br|hr|img|input/)||i.push({event:"stop",offset:a,node:t}));return a}(e,0),i}function m(e,n,a){var t=0,i="",s=[];function r(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function o(e){i+=""}function c(e){("start"===e.event?l:o)(e.node)}for(;e.length||n.length;){var d=r();if(i+=k(a.substring(t,d[0].offset)),t=d[0].offset,d===e){for(s.reverse().forEach(o);c(d.splice(0,1)[0]),(d=r())===e&&d.length&&d[0].offset===t;);s.reverse().forEach(l)}else"start"===d[0].event?s.push(d[0].node):s.pop(),c(d.splice(0,1)[0])}return i+k(a.substr(t))}function b(n){return n.variants&&!n.cached_variants&&(n.cached_variants=n.variants.map(function(e){return d(n,{variants:null},e)})),n.cached_variants||(function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(n)?[d(n,{starts:n.starts?d(n.starts):null})]:Object.isFrozen(n)?[d(n)]:[n])}function p(e){if(a&&!e.langApiRestored){for(var n in e.langApiRestored=!0,a)e[n]&&(e[a[n]]=e[n]);(e.contains||[]).concat(e.variants||[]).forEach(p)}}function f(n,t){var i={};return"string"==typeof n?a("keyword",n):s(n).forEach(function(e){a(e,n[e])}),i;function a(a,e){(e=t?e.toLowerCase():e).split(" ").forEach(function(e){var n,e=e.split("|");i[e[0]]=[a,(n=e[0],(e=e[1])?Number(e):function(e){return-1!=o.indexOf(e.toLowerCase())}(n)?0:1)]})}}function S(t){function d(e){return e&&e.source||e}function u(e,n){return new RegExp(d(e),"m"+(t.case_insensitive?"i":"")+(n?"g":""))}function i(i){var s={},r=[],l={},a=1;function e(e,n){s[a]=e,r.push([e,n]),a+=new RegExp(n.toString()+"|").exec("").length-1+1}for(var n=0;n')+n+(a?"":M)):n:""}function r(){var e,n,a,t,i;if(!m.keywords)return k(E);for(a="",m.lexemesRe.lastIndex=e=0,n=m.lexemesRe.exec(E);n;)a+=k(E.substring(e,n.index)),t=m,i=n,i=_.case_insensitive?i[0].toLowerCase():i[0],(t=t.keywords.hasOwnProperty(i)&&t.keywords[i])?(h+=t[1],a+=s(t[0],k(n[0]))):a+=k(n[0]),e=m.lexemesRe.lastIndex,n=m.lexemesRe.exec(E);return a+k(E.substr(e))}function l(){var e,n;p+=null!=m.subLanguage?(n="string"==typeof m.subLanguage)&&!w[m.subLanguage]?k(E):(e=n?T(m.subLanguage,E,!0,b[m.subLanguage]):A(E,m.subLanguage.length?m.subLanguage:void 0),0")+'"');if("end"===n.type){e=d(n);if(null!=e)return e}return E+=a,a.length}var _=R(n);if(!_)throw console.error(x.replace("{}",n)),new Error('Unknown language: "'+n+'"');S(_);for(var m=a||_,b={},p="",f=m;f!==_;f=f.parent)f.className&&(p=s(f.className,"",!0)+p);var E="",h=0;try{for(var N,y,v=0;;){if(m.terminators.lastIndex=v,!(N=m.terminators.exec(i)))break;y=g(i.substring(v,N.index),N),v=N.index+y}for(g(i.substr(v)),f=m;f.parent;f=f.parent)f.className&&(p+=M);return{relevance:h,value:p,illegal:!1,language:n,top:m}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{illegal:!0,relevance:0,value:k(i)};if(O)return{relevance:0,value:k(i),language:n,top:m,errorRaised:e};throw e}}function A(a,e){e=e||C.languages||s(w);var t={relevance:0,value:k(a)},i=t;return e.filter(R).filter(v).forEach(function(e){var n=T(e,a,!1);n.language=e,n.relevance>i.relevance&&(i=n),n.relevance>t.relevance&&(i=t,t=n)}),i.language&&(t.second_best=i),t}function E(e){return C.tabReplace||C.useBR?e.replace(i,function(e,n){return C.useBR&&"\n"===e?"
":C.tabReplace?n.replace(/\t/g,C.tabReplace):""}):e}function h(e){var n,a,t,i,s=function(e){var n,a,t,i,s,r=e.className+" ";if(r+=e.parentNode?e.parentNode.className:"",a=l.exec(r))return(s=R(a[1]))||(console.warn(x.replace("{}",a[1])),console.warn("Falling back to no-highlight mode for this block.",e)),s?a[1]:"no-highlight";for(n=0,t=(r=r.split(/\s+/)).length;n/g,"\n"):a=e,i=a.textContent,n=s?T(s,i,!0):A(i),(a=_(a)).length&&((t=document.createElement("div")).innerHTML=n.value,n.value=m(a,_(t),i)),n.value=E(n.value),e.innerHTML=n.value,e.className=(a=e.className,t=s,i=n.language,t=t?r[t]:i,i=[a.trim()],a.match(/\bhljs\b/)||i.push("hljs"),-1===a.indexOf(t)&&i.push(t),i.join(" ").trim()),e.result={language:n.language,re:n.relevance},n.second_best&&(e.second_best={language:n.second_best.language,re:n.second_best.relevance}))}function N(){var e;N.called||(N.called=!0,e=document.querySelectorAll("pre code"),u.forEach.call(e,h))}var y={disableAutodetect:!0};function R(e){return e=(e||"").toLowerCase(),w[e]||w[r[e]]}function v(e){e=R(e);return e&&!e.disableAutodetect}return t.highlight=T,t.highlightAuto=A,t.fixMarkup=E,t.highlightBlock=h,t.configure=function(e){C=d(C,e)},t.initHighlighting=N,t.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",N,!1),window.addEventListener("load",N,!1)},t.registerLanguage=function(n,e){var a;try{a=e(t)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",n)),!O)throw e;console.error(e),a=y}p(w[n]=a),a.rawDefinition=e.bind(null,t),a.aliases&&a.aliases.forEach(function(e){r[e]=n})},t.listLanguages=function(){return s(w)},t.getLanguage=R,t.requireLanguage=function(e){var n=R(e);if(n)return n;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},t.autoDetection=v,t.inherit=d,t.debugMode=function(){O=!1},t.IDENT_RE="[a-zA-Z]\\w*",t.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",t.NUMBER_RE="\\b\\d+(\\.\\d+)?",t.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",t.BINARY_NUMBER_RE="\\b(0b[01]+)",t.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",t.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},t.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},t.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},t.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},t.COMMENT=function(e,n,a){e=t.inherit({className:"comment",begin:e,end:n,contains:[]},a||{});return e.contains.push(t.PHRASAL_WORDS_MODE),e.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),e},t.C_LINE_COMMENT_MODE=t.COMMENT("//","$"),t.C_BLOCK_COMMENT_MODE=t.COMMENT("/\\*","\\*/"),t.HASH_COMMENT_MODE=t.COMMENT("#","$"),t.NUMBER_MODE={className:"number",begin:t.NUMBER_RE,relevance:0},t.C_NUMBER_MODE={className:"number",begin:t.C_NUMBER_RE,relevance:0},t.BINARY_NUMBER_MODE={className:"number",begin:t.BINARY_NUMBER_RE,relevance:0},t.CSS_NUMBER_MODE={className:"number",begin:t.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},t.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[t.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[t.BACKSLASH_ESCAPE]}]},t.TITLE_MODE={className:"title",begin:t.IDENT_RE,relevance:0},t.UNDERSCORE_TITLE_MODE={className:"title",begin:t.UNDERSCORE_IDENT_RE,relevance:0},t.METHOD_GUARD={begin:"\\.\\s*"+t.UNDERSCORE_IDENT_RE,relevance:0},[t.BACKSLASH_ESCAPE,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,t.PHRASAL_WORDS_MODE,t.COMMENT,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.HASH_COMMENT_MODE,t.NUMBER_MODE,t.C_NUMBER_MODE,t.BINARY_NUMBER_MODE,t.CSS_NUMBER_MODE,t.REGEXP_MODE,t.TITLE_MODE,t.UNDERSCORE_TITLE_MODE,t.METHOD_GUARD].forEach(function(e){!function n(a){Object.freeze(a);var t="function"==typeof a;Object.getOwnPropertyNames(a).forEach(function(e){!a.hasOwnProperty(e)||null===a[e]||"object"!=typeof a[e]&&"function"!=typeof a[e]||t&&("caller"===e||"callee"===e||"arguments"===e)||Object.isFrozen(a[e])||n(a[e])});return a}(e)}),t},L="object"==typeof window&&window||"object"==typeof self&&self,void 0===I||I.nodeType?L&&(L.hljs=D({}),"function"==typeof define)&&define.amd&&define([],function(){return L.hljs}):D(I);!function(){"use strict";I.registerLanguage("asciidoc",e),I.registerLanguage("bash",n),I.registerLanguage("clojure",a),I.registerLanguage("cpp",t),I.registerLanguage("cmake",i),I.registerLanguage("cs",s),I.registerLanguage("css",r),I.registerLanguage("diff",l),I.registerLanguage("dockerfile",o),I.registerLanguage("elixir",c),I.registerLanguage("go",d),I.registerLanguage("groovy",u),I.registerLanguage("haskell",g),I.registerLanguage("java",_),I.registerLanguage("javascript",m),I.registerLanguage("json",b),I.registerLanguage("kotlin",p),I.registerLanguage("lua",f),I.registerLanguage("markdown",E),I.registerLanguage("nix",h),I.registerLanguage("none",N),I.registerLanguage("objectivec",y),I.registerLanguage("perl",v),I.registerLanguage("php",w),I.registerLanguage("properties",O),I.registerLanguage("puppet",M),I.registerLanguage("python",x),I.registerLanguage("ruby",C),I.registerLanguage("rust",k),I.registerLanguage("scala",S),I.registerLanguage("shell",T),I.registerLanguage("sql",A),I.registerLanguage("swift",R),I.registerLanguage("xml",B),I.registerLanguage("yaml",U),[].slice.call(document.querySelectorAll("pre code.hljs[data-lang]")).forEach(function(e){I.highlightBlock(e)})}()}(); \ No newline at end of file diff --git a/docs/_/js/vendor/lunr.js b/docs/_/js/vendor/lunr.js new file mode 100644 index 000000000..cdc94cd39 --- /dev/null +++ b/docs/_/js/vendor/lunr.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ +!function(){var e=function(t){var r=new e.Builder;return r.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),r.searchPipeline.add(e.stemmer),t.call(r,r),r.build()};e.version="2.3.9",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},e.utils.clone=function(e){if(null===e||void 0===e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i0){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docs/_/js/vendor/tabs.js b/docs/_/js/vendor/tabs.js new file mode 100644 index 000000000..aa1855ce7 --- /dev/null +++ b/docs/_/js/vendor/tabs.js @@ -0,0 +1,2 @@ +!function(){/*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */ +"use strict";var t,r=(document.currentScript||{}).dataset||{},d=Array.prototype.forEach;function u(t){var e,a=this.tab,n=this.tabs||(this.tabs=a.closest(".tabs")),i=this.panel||(this.panel=document.getElementById(a.getAttribute("aria-controls")));d.call(n.querySelectorAll(".tablist .tab"),function(t){p(t,t===a)}),d.call(n.querySelectorAll(".tabpanel"),function(t){y(t,t!==i)}),!this.isSync&&"syncStorageKey"in r&&"syncGroupId"in n.dataset&&(n=r.syncStorageKey+"-"+n.dataset.syncGroupId,window[(r.syncStorageScope||"local")+"Storage"].setItem(n,a.dataset.syncId)),t&&(~(e=(n=window.location).hash?n.href.indexOf("#"):-1)&&window.history.replaceState(null,"",n.href.slice(0,e)),t.preventDefault())}function b(t){u.call(this,t);var a=this.tabs,n=this.tab,t=a.getBoundingClientRect().y,t=(d.call(document.querySelectorAll(".tabs"),function(e){e!==a&&e.dataset.syncGroupId===a.dataset.syncGroupId&&d.call(e.querySelectorAll(".tablist .tab"),function(t){t.dataset.syncId===n.dataset.syncId&&u.call({tabs:e,tab:t,isSync:!0})})}),a.getBoundingClientRect().y-t);(t=t&&Math.round(t))&&window.scrollBy({top:t,behavior:"instant"})}function e(t,e,a){d.call(t,function(t){t.classList[a](e)})}function y(t,e){t.classList[(t.hidden=e)?"add":"remove"]("is-hidden")}function p(t,e){t.setAttribute("aria-selected",""+e),t.classList[e?"add":"remove"]("is-selected"),t.tabIndex=e?0:-1}function a(){var t=window.location.hash.slice(1);t&&(t=document.getElementById(~t.indexOf("%")?decodeURIComponent(t):t))&&t.classList.contains("tab")&&("syncId"in t.dataset?b:u).call({tab:t})}(t=document.querySelectorAll(".tabs")).length&&(d.call(t,function(s){var l,o=s.classList.contains("is-sync")?{}:void 0,t=s.querySelector(".tablist ul");if(t.setAttribute("role","tablist"),d.call(t.querySelectorAll("li"),function(t,e){var a,n;if(t.setAttribute("role",t.className="tab"),!(a=t.id)){if(!(i=t.querySelector("a[id]")))return;t.id=a=i.parentNode.removeChild(i).id}var i=s.querySelector('.tabpanel[aria-labelledby~="'+a+'"]');i&&(t.tabIndex=-1,o&&((n=t.textContent.trim())in o?n=void 0:o[t.dataset.syncId=n]=t),e||(l={tab:t,panel:i},o)?y(i,!0):p(t,!0),t.setAttribute("aria-controls",i.id),i.setAttribute("role","tabpanel"),d.call(i.querySelectorAll("table.tableblock"),function(t){var e=Object.assign(document.createElement("div"),{className:"tablecontainer"});t.parentNode.insertBefore(e,t).appendChild(t)}),t.addEventListener("click",(void 0===n?u:b).bind({tabs:s,tab:t,panel:i})))}),o&&l){for(var e,a,n=0,i=s.classList,c=i.length;n!==c;n++)if((a=i.item(n)).startsWith("data-sync-group-id=")){s.dataset.syncGroupId=e=i.remove(a)||a.slice(19).replace(/\u00a0/g," ");break}void 0===e&&(s.dataset.syncGroupId=e=Object.keys(o).sort().join("|"));t="syncStorageKey"in r&&window[(r.syncStorageScope||"local")+"Storage"].getItem(r.syncStorageKey+"-"+e),t=t&&o[t];t&&Object.assign(l,{tab:t,panel:document.getElementById(t.getAttribute("aria-controls"))}),p(l.tab,!0),y(l.panel,!1)}}),a(),e(t,"is-loading","remove"),window.setTimeout(e.bind(null,t,"is-loaded","add"),0),window.addEventListener("hashchange",a))}(); \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 000000000..49bb7a103 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,9 @@ + + + + + + +Redirect Notice +

Redirect Notice

+

The page you requested has been relocated to https://www.mrdocs.com/mrdocs/develop/index.html.

diff --git a/docs/mrdocs/develop/_attachments/mrdocs.schema.json b/docs/mrdocs/develop/_attachments/mrdocs.schema.json new file mode 100644 index 000000000..b77be7d54 --- /dev/null +++ b/docs/mrdocs/develop/_attachments/mrdocs.schema.json @@ -0,0 +1,252 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "properties": { + "addons": { + "default": "/share/mrdocs/addons", + "description": "Path to the Addons directory. The Addons directory contains the template files used by generators to create the documentation. When a custom Addons directory is not specified, the default templates are used. The default templates are located at the `share/mrdocs/addons` directory of the MrDocs installation. Users can create custom templates by copying the default templates to a custom directory and specifying the custom directory using this option.", + "title": "Path to the Addons directory", + "type": "string" + }, + "anonymous-namespaces": { + "default": "always", + "description": "Determine whether symbols in anonymous namespaces should be extracted. When set to `always`, symbols in anonymous namespaces are always extracted. When set to `dependency`, symbols in anonymous namespaces are extracted only if they are referenced by the source code. When set to `never`, symbols in anonymous namespaces are never extracted.", + "enum": [ + "always", + "dependency", + "never" + ], + "title": "Extraction policy for anonymous namespaces" + }, + "base-url": { + "default": "", + "description": "Base URL for links to source code. The base URL is used to create links to the source code in the documentation. The base URL is combined with the path to the source file to create the link.", + "title": "Base URL for links to source code", + "type": "string" + }, + "cmake": { + "default": "", + "description": "When the compilation-database option is a CMakeLists.txt file, these arguments are passed to the cmake command to generate the compilation_database.json.", + "title": "CMake arguments when generating the compilation database from CMakeLists.txt", + "type": "string" + }, + "compilation-database": { + "default": "", + "description": "Path to the compilation database or a build script to generate it. The compilation database is a JSON file that contains the compiler commands used to build the source code. The compilation database is used to extract the compiler flags and the source files used to build the source code and extract symbols. This option also accepts the path to a build script such as CMakeLists.txt to be used to generate the compilation database. In this case, MrDocs will look for CMake in `PATH` or in `CMAKE_ROOT` and run the script to generate the compilation database file.", + "title": "Path to the compilation database", + "type": "string" + }, + "defines": { + "default": [], + "description": "Additional defines passed to the compiler when building the source code. These defines are added to the compilation database regardless of the strategy to generate it.", + "items": { + "type": "string" + }, + "title": "Additional defines passed to the compiler", + "type": "array" + }, + "detect-sfinae": { + "default": true, + "description": "When set to true, MrDocs detects SFINAE expressions in the source code and extracts them as part of the documentation. Expressions such as `std::enable_if<...>` are detected, removed, and documented as a requirement.", + "title": "Detect SFINAE expressions", + "type": "boolean" + }, + "filters": { + "properties": { + "symbols": { + "description": "Symbol filters. Symbols that match these filters are extracted. The filters are applied to the fully qualified name of the symbol.", + "properties": { + "exclude": { + "default": [], + "description": "Specifies symbol exclusion patterns. Symbols that match these patterns are not extracted. The patterns are applied to the fully qualified name of the symbol.", + "items": { + "type": "string" + }, + "title": "Specifies symbol exclusion patterns", + "type": "array" + }, + "include": { + "default": [], + "description": "Specifies symbol inclusion patterns. Symbols that match these patterns are extracted. The patterns are applied to the fully qualified name of the symbol.", + "items": { + "type": "string" + }, + "title": "Specifies symbol inclusion patterns", + "type": "array" + } + }, + "required": [], + "title": "Symbol filters", + "type": "object" + } + }, + "required": [], + "title": "Filters", + "type": "object" + }, + "generate": { + "default": "adoc", + "enum": [ + "adoc", + "html", + "xml" + ], + "title": "Generator used to create the documentation" + }, + "ignore-failures": { + "default": false, + "description": "When set to true, MrDocs continues to generate the documentation even if there are AST visitation failures. AST visitation failures occur when the source code contains constructs that are not supported by MrDocs.", + "title": "Whether AST visitation failures should not stop the program", + "type": "boolean" + }, + "ignore-map-errors": { + "default": false, + "description": "When set to true, MrDocs continues to generate the documentation even if some files are not mapped correctly. Files are not mapped correctly when the source file is not found or the compilation database does not contain the compiler flags for the source file.", + "title": "Continue if files are not mapped correctly", + "type": "boolean" + }, + "implementation-defined": { + "default": [], + "description": "Namespaces for symbols rendered as \"implementation-defined\". Symbols in these namespaces are not extracted and are rendered as \"implementation-defined\" in the documentation. This option is used to exclude symbols from the documentation that are considered part of the private API of the project.", + "items": { + "type": "string" + }, + "title": "Namespaces for symbols rendered as \"implementation-defined\"", + "type": "array" + }, + "inaccessible-bases": { + "default": "always", + "description": "Determine whether inaccessible base classes should be extracted. When set to `always`, inaccessible base classes are always extracted. When set to `dependency`, inaccessible base classes are extracted only if they are referenced by the source code. When set to `never`, inaccessible base classes are never extracted.", + "enum": [ + "always", + "dependency", + "never" + ], + "title": "Extraction policy for inaccessible base classes" + }, + "inaccessible-members": { + "default": "always", + "description": "Determine whether inaccessible members should be extracted. When set to `always`, inaccessible members are always extracted. When set to `dependency`, inaccessible members are extracted only if they are referenced by the source code. When set to `never`, inaccessible members are never extracted.", + "enum": [ + "always", + "dependency", + "never" + ], + "title": "Extraction policy for inaccessible members" + }, + "includes": { + "default": [], + "description": "Include paths. These paths are used to add directories to the include search path. The include search path is used to search for headers. The headers are used to provide declarations and definitions of symbols. The headers are part of the project and are checked for warnings and errors.", + "items": { + "type": "string" + }, + "title": "Include paths", + "type": "array" + }, + "input": { + "description": "Include files to extract. Only the files listed in this option are extracted. The paths are relative to the mrdocs configuration file.", + "properties": { + "file-patterns": { + "default": [], + "description": "File patterns to include. Only the files that match these patterns are extracted. The patterns are relative to the input directories.", + "items": { + "type": "string" + }, + "title": "File patterns to include", + "type": "array" + }, + "include": { + "default": [], + "description": "Input directories to include. Only the files in these directories are extracted. The paths are relative to the mrdocs configuration file.", + "items": { + "type": "string" + }, + "title": "Input directories to include", + "type": "array" + } + }, + "required": [], + "title": "Include files to extract", + "type": "object" + }, + "multipage": { + "default": true, + "description": "Generates a multipage documentation. The output directory must be a directory. This option acts as a hint to the generator to create a multipage documentation. Whether the hint is followed or not depends on the generator.", + "title": "Generate a multipage documentation", + "type": "boolean" + }, + "output": { + "default": "/reference-output", + "description": "Multipage generators expect a directory. Single page generators expect a file or a directory where the file will be created. If the directory does not exist, it will be created.", + "title": "Directory or file for generating output", + "type": "string" + }, + "referenced-declarations": { + "default": "dependency", + "description": "Determine whether external declarations should be extracted when they are referenced in the source code. When set to `always`, external declarations are always extracted. When set to `dependency`, external declarations are extracted only if they are referenced by the source code. When set to `never`, external declarations are never extracted.", + "enum": [ + "always", + "dependency", + "never" + ], + "title": "Extraction policy for references to external declarations" + }, + "report": { + "default": 1, + "description": "The reporting level determines the amount of information displayed during the generation of the documentation. The levels are: 0 - no output, 1 - errors only, 2 - errors and warnings, 3 - errors, warnings, and information, 4 - errors, warnings, information, and debug information.", + "maximum": 4, + "minimum": 0, + "title": "The minimum reporting level: 0 to 4", + "type": "integer" + }, + "see-below": { + "default": [], + "description": "Namespaces for symbols rendered as \"see-below\". Symbols in these namespaces are not extracted and are rendered as \"see-below\" in the documentation. This option is used to exclude symbols from the documentation that are considered part of the private API of the project.", + "items": { + "type": "string" + }, + "title": "Namespaces for symbols rendered as \"see-below\"", + "type": "array" + }, + "source-root": { + "default": "", + "title": "Path to the root directory of the source code", + "type": "string" + }, + "stdlib-includes": { + "default": [ + "/share/mrdocs/libcxx", + "/share/mrdocs/clang" + ], + "description": "Standard Library include paths. These paths are used to replace the standard library paths provided by the compiler.", + "items": { + "type": "string" + }, + "title": "Standard Library include paths", + "type": "array" + }, + "system-includes": { + "default": [], + "description": "System include paths. These paths are used to add directories to the system include search path. The system include search path is used to search for system headers. The system headers are headers that are provided by the system and are not part of the project. The system headers are used to provide the standard library headers and other system headers. The system headers are not part of the project and are not checked for warnings and errors.", + "items": { + "type": "string" + }, + "title": "System include paths", + "type": "array" + }, + "use-system-stdlib": { + "default": false, + "description": "True if the compiler has to use just the system standard library. When set to true, the compiler uses the system standard library instead of the standard library provided by the compiler.", + "title": "Use the system standard library", + "type": "boolean" + }, + "verbose": { + "default": false, + "description": "Verbose output. When set to true, MrDocs outputs additional information during the generation of the documentation.", + "title": "Verbose output", + "type": "boolean" + } + }, + "required": [], + "title": "MrDocs Configuration", + "type": "object" +} \ No newline at end of file diff --git a/docs/mrdocs/develop/_images/MrDocsBanner.jpg b/docs/mrdocs/develop/_images/MrDocsBanner.jpg new file mode 100644 index 000000000..e9a23de51 Binary files /dev/null and b/docs/mrdocs/develop/_images/MrDocsBanner.jpg differ diff --git a/docs/mrdocs/develop/commands.html b/docs/mrdocs/develop/commands.html new file mode 100644 index 000000000..b5e0ed897 --- /dev/null +++ b/docs/mrdocs/develop/commands.html @@ -0,0 +1,184 @@ + + + + + + Commands :: MrDocs + + + + + + + + +
+ +
+
+ +

Commands

+
+
+
+

The code should be documented with the Doc Comment format, also informally known as "javadoc" format or Doxygen-style comments.

+
+
+

In its most basic form, these are usually comment blocks between /** and */ placed above a class, function, or field declaration:

+
+
+
+
/** The main information about a person
+
+    This class represents a person with
+    a name and an age. This is the
+    information about a person that
+    we need to store in our system.
+ */
+struct person
+{
+    std::string name;
+    int age;
+}
+
+/** A function to greet a person
+
+    This function takes a person and
+    prints a greeting message.
+
+    @param p The person to greet
+ */
+void greet(person const& p);
+
+
+
+

A common alternative is to use ///, especially for single-line comments:

+
+
+
+
/// A constant representing the number of hours in a day
+static constexpr int hours_in_day = 24;
+
+
+
+

Both the class and the function above have doc comments with a brief sentence and a detailed description. +Most doc comments will contain these two sections, which could also be explicitly marked with @brief and @details commands.

+
+
+

Doc comments can also contain a number of special commands such as @param that are used to document the parameters of a function.

+
+
+
+
+

Style

+
+
+

The following commands can be used to format the text in the doc comments:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

Description

@a

Formats the text in italics

@e

Formats the text in italics

@em

Formats the text in italics

@b

Formats the text in bold

@strong

Formats the text in bold

+
+
+ +
+
+ +
+ + diff --git a/docs/mrdocs/develop/config-file.html b/docs/mrdocs/develop/config-file.html new file mode 100644 index 000000000..af07ba3ec --- /dev/null +++ b/docs/mrdocs/develop/config-file.html @@ -0,0 +1,1364 @@ + + + + + + The Configuration File :: MrDocs + + + + + + + + +
+ +
+
+ +

The Configuration File

+
+
+
+

MrDocs uses a configuration file to control how the documentation is generated. +The file is used to specify options such as the generator to use, additional compilation options, and filters.

+
+
+

Here’s an example of a configuration file:

+
+
+
+
source-root: ../include
+multipage: false
+generate: adoc
+
+
+
+

The Usage page provides a detailed explanation of what to combine options from the configuration file and the command line. +The Reference section provides a detailed explanation of the options available.

+
+
+
+
+

YAML Schema

+
+
+

To get linting and autocompletion in the config file, a schema for the config can be specified. +In JetBrains IDEs, # $schema: <url> can be used to bind a schema to a file. +In editors with plugins based on the YAML language server, # yaml-language-server: $schema=<url> can be used. +The schema for mrdocs.yml is provided here. +The following shows an example of a file specifying an inline-schema that’s compatible with JetBrains IDEs and editors using the YAML language server.

+
+
+
+
# $schema: https://mrdocs.com/docs/mrdocs/develop/_attachments/mrdocs.schema.json
+# yaml-language-server: $schema=https://mrdocs.com/docs/mrdocs/develop/_attachments/mrdocs.schema.json
+
+source-root: ../include
+multipage: false
+generate: adoc
+
+
+
+
+
+

Build Options

+
+
+

A number of options can be used to specify with which compile options MrDocs should be run.

+
+
+
+
source-root: ..
+compilation-database: ../CMakeLists.txt
+cmake: '-D MRDOCS_BUILD=ON'
+defines: 'MRDOCS_BUILD'
+
+
+
+

The compile options primarily come from the compilation-database file. +When this file is generated from a CMakeLists.txt script, the cmake option can be used to specify additional options to pass to CMake.

+
+
+

Additionally, the defines option can be used to specify preprocessor definitions that should be used when generating the documentation. +These definitions are included in all targets of the compilation database.

+
+
+
+
+

Generators

+
+
+

MrDocs supports multiple output formats that can be specified via the generate option:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
FormatDescription

adoc

AsciiDoc format.

html

HTML format.

xml

XML format.

+
+
    +
  • +

    Asciidoc is a text-based format that is easy to read and write. +It can also be converted to other formats such as HTML and Markdown.

    +
  • +
  • +

    HTML can be generated directly with the html format.

    +
  • +
  • +

    XML is a structured format that can be used in tests or as an intermediary format for other tools.

    +
  • +
+
+
+

The generate option can be used to specify the output format:

+
+
+
+
# ...
+generate: adoc
+# ...
+
+
+
+

Generator Templates

+
+

MrDocs attempts to support various alternatives for customizing the output format and style without complex workflows to post-process XML output. +For the Asciidoc and HTML generators, the desired customization can usually be achieved by modifying the templates used to generate the output.

+
+
+

In the root of the installation directory, you will find the share/mrdocs/addons/generator directory. +This directory contains the templates used to generate the documentation with the markup formats. +Users can create a copy of these files and provide their own addons directory via the addons option. +This allows users to customize the output format to their needs.

+
+
+
+
addons: /path/to/custom/addons
+
+
+
+

One advantage of custom templates over post-processing XML files is the ability to access symbols as a graph. +If symbol A refers to symbol B, some properties of symbol B are likely to be required in the documentation of A. +All templates and generators can access a reference to B by searching the symbol tree or simply by accessing the elements A refers to.

+
+
+
+
+
+

Filters

+
+
+

Symbol Filters

+
+

Not all symbols in a project may be relevant to the documentation. +MrDocs provides a way to filter out symbols based on their names.

+
+
+
+
filters:
+  symbols: (1)
+    exclude: (2)
+    include: (3)
+
+
+
+ + + + + + + + + + + + + +
1Optional symbols key
2Optional exclude key
3Optional include key
+
+
+

Symbol filter patterns are specified using (optionally) qualified names, and may contain wildcards:

+
+
+
+
filters:
+  symbols:
+    exclude:
+      - 'A::B'
+      - 'A::f*'
+
+
+
+

If a symbol matches a pattern in the exclude list, that symbol and its members will not be extracted:

+
+
+
+
filters:
+  symbols:
+    exclude:
+      - 'A'
+
+
+
+
+
// ok, does not match any excluded pattern
+void f0();
+
+namespace A // matches the pattern 'A', will not be extracted
+{
+    // enclosing namespace matches an excluded pattern:
+    // the symbol will not be extracted
+    void f1();
+}
+
+
+
+

The filters.symbols.include key can be used to override the exclude list for specific symbols. +A symbol which matches an included pattern and an excluded pattern will be extracted.

+
+
+

This permits fine-grained control of extraction for individual members of a class or namespace:

+
+
+
+
filters:
+  symbols:
+    exclude:
+      - 'A'
+    include:
+      - 'A::g*'
+
+
+
+
+
namespace A
+{
+    // enclosing namespace matches an excluded pattern, will not be extracted
+    void f0();
+
+    // ok, matches the pattern 'A::g*' which overrides the exclude list
+    void g0();
+}
+
+
+
+

In order for a filter pattern to match a symbol, it must consist of simple identifiers that match the name as written in its declaration: namespace aliases, typedef-names, and decltype specifiers naming the symbol cannot be used.

+
+
+ + + + + +
+ + +Specifying include patterns is only useful when the pattern would match a subset of symbols matched by an exclude pattern. +An include pattern without a subsuming exclude pattern will be ignored. +
+
+
+
+

File Filters

+
+

Symbols can also be filtered based on the files they are declared in. +This can be useful for excluding files that exclusively contain implementation details or test code.

+
+
+
+
input:
+  include:
+      - ../include  (1)
+  file-patterns:
+      - *.hpp       (2)
+
+
+
+ + + + + + + + + +
1A list of directories to include. +Only symbols defined in these files will be extracted.
2A list of file patterns to include. +Only symbols defined in files matching these patterns will be extracted.
+
+
+
+

Private Symbols

+
+

The implementation-detail and see-below options can be used to designate namespaces as implementation detail namespaces.

+
+
+
+
implementation-detail: 'impl'
+see-below: 'see_below'
+
+
+
+

If a namespace is designated as an implementation detail namespace, all symbols within that namespace will be marked as implementation details in the documentation.

+
+
+
+
namespace impl
+{
+    class A {};
+}
+
+/// @brief A foo function
+A foo();
+
+
+
+

The impl namespace is designated as an implementation detail namespace, so all symbols within it will be marked as implementation details in the documentation. +This means the symbol A would not be documented and the function foo could be documented as follows:

+
+
+
+
/* implementation detail */ foo();
+
+
+
+

On the other hand, if a namespace is designated as a see_below namespace, all symbols within that namespace will be marked as "see below" in the documentation.

+
+
+
+
namespace see_below
+{
+    class B {};
+}
+
+
+
+

In the documentation, the symbol B would be marked as "see-below" and could be documented as:

+
+
+
+
class B { /* see below */ };
+
+
+
+
+
+
+

Reference

+
+
+

The following options can be defined both in the configuration file and on the command line, where the command line options always take precedence.

+
+
+

+ +Command Line Options +

+

Options that can only be provided via the command line

+

The following options can be used to control the general behavior of MrDocs and can only be provided via the command line. These include options to specify inputs and the configuration file, which cannot be set on the configuration file itself.

+ +++++ + + + + + + + + + + + + + + + + + + + +
NameDescriptionDefault
+inputs +
+(list of paths) +

+(Command line only) +
Configuration or compilation database files[]
+config +
+(file path) +

+(Required, Command line only) +
MrDocs configuration file"<cwd>/mrdocs.yml"
+

inputs

+

Configuration or compilation database files

+

The inputs are configuration files or compilation database files that used to generate the documentation. When the input ends with mrdocs.yml, it is interpreted as a configuration file, the file is read and the options are used to generate the documentation as if it was provided to the config option. When the input ends with compilation_database.json or CMakeLists.txt, it is interpreted as a compilation database file, the file is read and the compiler flags are used to generate the documentation as if it was provided to the compilation-database option.

+

+

+
    +
  • Type: list of paths
  • +
  • Command line only
  • +
  • Default value: []
  • +
  • This command is a command line sink. Any command line argument that is not recognized by the parser will be passed to this command.
  • +
+
+

+

config

+

MrDocs configuration file

+

The configuration file is a YAML file that contains the options used to generate the documentation. The configuration file is read and the options are used to generate the documentation. The configuration file can be used to specify the source code, the output directory, the compilation database, the generator, and the filters.

+

+

+
    +
  • Type: file path
  • +
  • Required
  • +
  • Command line only
  • +
  • Default value: "<cwd>/mrdocs.yml"
  • +
  • Relative paths are relative to: "&lt;cwd&gt;"
  • +
+
+

+
+
+

+ +Paths +

+

Paths to the source code and output directories

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionDefault
+source-root +
+(directory path) +
Path to the root directory of the source code"<config-dir>"
+output +
+(path) +
Directory or file for generating output"<config-dir>/reference-output"
+compilation-database +
+(file path) +
Path to the compilation database
+

source-root

+

Path to the root directory of the source code

+

+

+
    +
  • Type: directory path
  • +
  • Default value: "<config-dir>"
  • +
  • Relative paths are relative to: "&lt;config-dir&gt;"
  • +
+
+

+

output

+

Directory or file for generating output

+

Multipage generators expect a directory. Single page generators expect a file or a directory where the file will be created. If the directory does not exist, it will be created.

+

+

+
    +
  • Type: path
  • +
  • Default value: "<config-dir>/reference-output"
  • +
  • Relative paths are relative to: "&lt;config-dir&gt;"
  • +
+
+

+

compilation-database

+

Path to the compilation database

+

Path to the compilation database or a build script to generate it. The compilation database is a JSON file that contains the compiler commands used to build the source code. The compilation database is used to extract the compiler flags and the source files used to build the source code and extract symbols. This option also accepts the path to a build script such as CMakeLists.txt to be used to generate the compilation database. In this case, MrDocs will look for CMake in PATH or in CMAKE_ROOT and run the script to generate the compilation database file.

+

+

+
    +
  • Type: file path
  • +
  • Default value:
  • +
  • Relative paths are relative to: "&lt;config-dir&gt;"
  • +
+
+

+
+
+

+ +Build options +

+

Options for building the source code

+

When MrDocs is responsible to running the build scripts and generating the compilation database, these options are used to build the source code.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionDefault
+cmake +
+(string) +
CMake arguments when generating the compilation database from CMakeLists.txt
+defines +
+(list of strings) +
Additional defines passed to the compiler[]
+use-system-stdlib +
+(boolean) +
Use the system standard libraryfalse
+stdlib-includes +
+(list of paths) +
Standard Library include paths["<mrdocs-root>/share/mrdocs/libcxx", "<mrdocs-root>/share/mrdocs/clang"]
+system-includes +
+(list of paths) +
System include paths[]
+includes +
+(list of paths) +
Include paths[]
+

cmake

+

CMake arguments when generating the compilation database from CMakeLists.txt

+

When the compilation-database option is a CMakeLists.txt file, these arguments are passed to the cmake command to generate the compilation_database.json.

+

+

+
    +
  • Type: string
  • +
  • Default value:
  • +
+
+

+

defines

+

Additional defines passed to the compiler

+

Additional defines passed to the compiler when building the source code. These defines are added to the compilation database regardless of the strategy to generate it.

+

+

+
    +
  • Type: list of strings
  • +
  • Default value: []
  • +
+
+

+

use-system-stdlib

+

Use the system standard library

+

True if the compiler has to use just the system standard library. When set to true, the compiler uses the system standard library instead of the standard library provided by the compiler.

+

+

+
    +
  • Type: boolean
  • +
  • Default value: false
  • +
+
+

+

stdlib-includes

+

Standard Library include paths

+

Standard Library include paths. These paths are used to replace the standard library paths provided by the compiler.

+

+

+
    +
  • Type: list of paths
  • +
  • Default value: ["<mrdocs-root>/share/mrdocs/libcxx", "<mrdocs-root>/share/mrdocs/clang"]
  • +
  • Relative paths are relative to: "&lt;config-dir&gt;"
  • +
+
+

+

system-includes

+

System include paths

+

System include paths. These paths are used to add directories to the system include search path. The system include search path is used to search for system headers. The system headers are headers that are provided by the system and are not part of the project. The system headers are used to provide the standard library headers and other system headers. The system headers are not part of the project and are not checked for warnings and errors.

+

+

+
    +
  • Type: list of paths
  • +
  • Default value: []
  • +
+
+

+

includes

+

Include paths

+

Include paths. These paths are used to add directories to the include search path. The include search path is used to search for headers. The headers are used to provide declarations and definitions of symbols. The headers are part of the project and are checked for warnings and errors.

+

+

+
    +
  • Type: list of paths
  • +
  • Default value: []
  • +
+
+

+
+
+

+ +Generators +

+

Generators to create the documentation and their options

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionDefault
+generate +
+(enum) +
Generator used to create the documentation"adoc"
+multipage +
+(boolean) +
Generate a multipage documentationtrue
+base-url +
+(string) +
Base URL for links to source code
+addons +
+(path) +
Path to the Addons directory"<mrdocs-root>/share/mrdocs/addons"
+

generate

+

Generator used to create the documentation

+

+

+
    +
  • Type: enum
  • +
  • Default value: "adoc"
  • +
  • Allowed values: ["adoc", "html", "xml"]
  • +
+
+

+

multipage

+

Generate a multipage documentation

+

Generates a multipage documentation. The output directory must be a directory. This option acts as a hint to the generator to create a multipage documentation. Whether the hint is followed or not depends on the generator.

+

+

+
    +
  • Type: boolean
  • +
  • Default value: true
  • +
+
+

+

base-url

+

Base URL for links to source code

+

Base URL for links to source code. The base URL is used to create links to the source code in the documentation. The base URL is combined with the path to the source file to create the link.

+

+

+
    +
  • Type: string
  • +
  • Default value:
  • +
+
+

+

addons

+

Path to the Addons directory

+

Path to the Addons directory. The Addons directory contains the template files used by generators to create the documentation. When a custom Addons directory is not specified, the default templates are used. The default templates are located at the share/mrdocs/addons directory of the MrDocs installation. Users can create custom templates by copying the default templates to a custom directory and specifying the custom directory using this option.

+

+

+
    +
  • Type: path
  • +
  • Default value: "<mrdocs-root>/share/mrdocs/addons"
  • +
  • Relative paths are relative to: "&lt;config-dir&gt;"
  • +
+
+

+
+
+

+ +Filters +

+

Filters to include or exclude files and symbols from the documentation

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionDefault
+referenced-declarations +
+(enum) +
Extraction policy for references to external declarations"dependency"
+anonymous-namespaces +
+(enum) +
Extraction policy for anonymous namespaces"always"
+inaccessible-members +
+(enum) +
Extraction policy for inaccessible members"always"
+inaccessible-bases +
+(enum) +
Extraction policy for inaccessible base classes"always"
+see-below +
+(list of strings) +
Namespaces for symbols rendered as "see-below"[]
+implementation-defined +
+(list of strings) +
Namespaces for symbols rendered as "implementation-defined"[]
+input +
+(object) +
Include files to extract
+filters +
+(object) +
Filters
+

referenced-declarations

+

Extraction policy for references to external declarations

+

Determine whether external declarations should be extracted when they are referenced in the source code. When set to always, external declarations are always extracted. When set to dependency, external declarations are extracted only if they are referenced by the source code. When set to never, external declarations are never extracted.

+

+

+
    +
  • Type: enum
  • +
  • Default value: "dependency"
  • +
  • Allowed values: ["always", "dependency", "never"]
  • +
+
+

+

anonymous-namespaces

+

Extraction policy for anonymous namespaces

+

Determine whether symbols in anonymous namespaces should be extracted. When set to always, symbols in anonymous namespaces are always extracted. When set to dependency, symbols in anonymous namespaces are extracted only if they are referenced by the source code. When set to never, symbols in anonymous namespaces are never extracted.

+

+

+
    +
  • Type: enum
  • +
  • Default value: "always"
  • +
  • Allowed values: ["always", "dependency", "never"]
  • +
+
+

+

inaccessible-members

+

Extraction policy for inaccessible members

+

Determine whether inaccessible members should be extracted. When set to always, inaccessible members are always extracted. When set to dependency, inaccessible members are extracted only if they are referenced by the source code. When set to never, inaccessible members are never extracted.

+

+

+
    +
  • Type: enum
  • +
  • Default value: "always"
  • +
  • Allowed values: ["always", "dependency", "never"]
  • +
+
+

+

inaccessible-bases

+

Extraction policy for inaccessible base classes

+

Determine whether inaccessible base classes should be extracted. When set to always, inaccessible base classes are always extracted. When set to dependency, inaccessible base classes are extracted only if they are referenced by the source code. When set to never, inaccessible base classes are never extracted.

+

+

+
    +
  • Type: enum
  • +
  • Default value: "always"
  • +
  • Allowed values: ["always", "dependency", "never"]
  • +
+
+

+

see-below

+

Namespaces for symbols rendered as "see-below"

+

Namespaces for symbols rendered as "see-below". Symbols in these namespaces are not extracted and are rendered as "see-below" in the documentation. This option is used to exclude symbols from the documentation that are considered part of the private API of the project.

+

+

+
    +
  • Type: list of strings
  • +
  • Default value: []
  • +
+
+

+

implementation-defined

+

Namespaces for symbols rendered as "implementation-defined"

+

Namespaces for symbols rendered as "implementation-defined". Symbols in these namespaces are not extracted and are rendered as "implementation-defined" in the documentation. This option is used to exclude symbols from the documentation that are considered part of the private API of the project.

+

+

+
    +
  • Type: list of strings
  • +
  • Default value: []
  • +
+
+

+

input

+

Include files to extract

+

Include files to extract. Only the files listed in this option are extracted. The paths are relative to the mrdocs configuration file.

+

+

+
    +
  • Type: object (See below)
  • +
+
+

+

filters

+

Filters

+

+

+
    +
  • Type: object (See below)
  • +
+
+

+

input suboptions

+ +++++ + + + + + + + + + + + + + + + + + + + +
NameDescriptionDefault
+input.include +
+(list of paths) +
Input directories to include[]
+input.file-patterns +
+(list of strings) +
File patterns to include[]
+

input.include

+

Input directories to include

+

Input directories to include. Only the files in these directories are extracted. The paths are relative to the mrdocs configuration file.

+

+

+
    +
  • Type: list of paths
  • +
  • Default value: []
  • +
+
+

+

input.file-patterns

+

File patterns to include

+

File patterns to include. Only the files that match these patterns are extracted. The patterns are relative to the input directories.

+

+

+
    +
  • Type: list of strings
  • +
  • Default value: []
  • +
+
+

+

filters suboptions

+ +++++ + + + + + + + + + + + + + + +
NameDescriptionDefault
+filters.symbols +
+(object) +
Symbol filters
+

filters.symbols

+

Symbol filters

+

Symbol filters. Symbols that match these filters are extracted. The filters are applied to the fully qualified name of the symbol.

+

+

+
    +
  • Type: object (See below)
  • +
+
+

+

symbols suboptions

+ +++++ + + + + + + + + + + + + + + + + + + + +
NameDescriptionDefault
+filters.symbols.include +
+(list of strings) +
Specifies symbol inclusion patterns[]
+filters.symbols.exclude +
+(list of strings) +
Specifies symbol exclusion patterns[]
+

filters.symbols.include

+

Specifies symbol inclusion patterns

+

Specifies symbol inclusion patterns. Symbols that match these patterns are extracted. The patterns are applied to the fully qualified name of the symbol.

+

+

+
    +
  • Type: list of strings
  • +
  • Default value: []
  • +
+
+

+

filters.symbols.exclude

+

Specifies symbol exclusion patterns

+

Specifies symbol exclusion patterns. Symbols that match these patterns are not extracted. The patterns are applied to the fully qualified name of the symbol.

+

+

+
    +
  • Type: list of strings
  • +
  • Default value: []
  • +
+
+

+
+
+

+ +Metadata +

+

Metadata and C++ constructs to extract

+ +++++ + + + + + + + + + + + + + + +
NameDescriptionDefault
+detect-sfinae +
+(boolean) +
Detect SFINAE expressionstrue
+

detect-sfinae

+

Detect SFINAE expressions

+

When set to true, MrDocs detects SFINAE expressions in the source code and extracts them as part of the documentation. Expressions such as std::enable_if<...> are detected, removed, and documented as a requirement.

+

+

+
    +
  • Type: boolean
  • +
  • Default value: true
  • +
+
+

+
+
+

+ +Miscellaneous +

+

Miscellaneous options

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionDefault
+concurrency +
+(unsigned integer) +

+(Command line only) +
Number of threads to use0
+verbose +
+(boolean) +
Verbose outputfalse
+report +
+(unsigned integer) +
The minimum reporting level: 0 to 41
+ignore-map-errors +
+(boolean) +
Continue if files are not mapped correctlyfalse
+ignore-failures +
+(boolean) +
Whether AST visitation failures should not stop the programfalse
+

concurrency

+

Number of threads to use

+

The desired level of concurrency: 0 for hardware-suggested.

+

+

+
    +
  • Type: unsigned integer
  • +
  • Command line only
  • +
  • Default value: 0
  • +
  • Minimum value: 0
  • +
+
+

+

verbose

+

Verbose output

+

Verbose output. When set to true, MrDocs outputs additional information during the generation of the documentation.

+

+

+
    +
  • Type: boolean
  • +
  • Default value: false
  • +
+
+

+

report

+

The minimum reporting level: 0 to 4

+

The reporting level determines the amount of information displayed during the generation of the documentation. The levels are: 0 - no output, 1 - errors only, 2 - errors and warnings, 3 - errors, warnings, and information, 4 - errors, warnings, information, and debug information.

+

+

+
    +
  • Type: unsigned integer
  • +
  • Default value: 1
  • +
  • Minimum value: 0
  • +
  • Maximum value: 4
  • +
+
+

+

ignore-map-errors

+

Continue if files are not mapped correctly

+

When set to true, MrDocs continues to generate the documentation even if some files are not mapped correctly. Files are not mapped correctly when the source file is not found or the compilation database does not contain the compiler flags for the source file.

+

+

+
    +
  • Type: boolean
  • +
  • Default value: false
  • +
+
+

+

ignore-failures

+

Whether AST visitation failures should not stop the program

+

When set to true, MrDocs continues to generate the documentation even if there are AST visitation failures. AST visitation failures occur when the source code contains constructs that are not supported by MrDocs.

+

+

+
    +
  • Type: boolean
  • +
  • Default value: false
  • +
+
+

+
+
+
+ +
+
+ +
+ + diff --git a/docs/mrdocs/develop/contribute.html b/docs/mrdocs/develop/contribute.html new file mode 100644 index 000000000..2bc1194fa --- /dev/null +++ b/docs/mrdocs/develop/contribute.html @@ -0,0 +1,634 @@ + + + + + + Contributor’s Guide :: MrDocs + + + + + + + + +
+ +
+
+ +

Contributor’s Guide

+
+
+
+

This page contains information for contributors to the MrDocs project. +It is intended to provide an overview of the codebase and the process of adding new features.

+
+
+
+
+

Codebase Overview

+
+
+

The MrDocs codebase is divided into several modules:

+
+
graph TD + CL[Command Line Arguments] --> P + CF[Configuration File] --> P + P[Options] --> E + P --> CD + P --> G + CD[Compilation Database] --> E + E[Extract Symbols] -->|Corpus| G + G[Generator] --> D(Documentation)
+
+

This section provides an overview of each module and how they interact with each other in the MrDocs codebase.

+
+
+

Parsing options

+
+

MrDocs options affect the behavior of the compilation database, how symbols are extracted, and how the documentation is generated. +They are parsed from the command line and configuration file.

+
+
+

The main entry point of MrDocs is the DoGenerateAction function in src/tool/GenerateAction.cpp. +It loads the options, creates the compilation database, and runs the extraction and generation steps. +The options formed from a combination of command line arguments and configuration file settings.

+
+
+

Command Line Options

+
+

Command line and common options are defined in src/tool/ToolArgs.hpp. +The ToolArgs class uses the llvm::cl library to define and parse the command line arguments.

+
+
+
+

Configuration File

+
+

Common options are defined in mrdocs/Config.hpp. +The Config class represents all public options that could be defined in a configuration file. +It also provides a representation plugins can use to access public options from the command line or configuration file.

+
+
+

The function clang::mrdocs::loadConfig is also provided to parse all public options from a YAML configuration file.

+
+
+

Internally, MrDocs uses the derived clang::mrdocs::ConfigImpl class (src/lib/Lib/ConfigImpl.hpp) to also store the private representation of parsed options, such as filters.

+
+
+
+

Finalizing Options

+
+

Common options are stored in the Config class, while the ToolArgs class stores common options and the command line options. +For instance, the config option can only be set from the command line, as it would be illogical to expect the location of the configuration file to be defined in the configuration file itself. +On the other hand, the output option can be set from both the command line and the configuration file so that the user can define a default output location in the configuration file.

+
+
+

Thus, after the command line and configuration file options are parsed, they are finalized in the DoGenerateAction function by calling ToolArgs::apply, which overrides the configuration file options in Config with the command line options, when applicable.

+
+
+

As a last step, DoGenerateAction converts the public Config settings into a ConfigImpl object, which is used by the rest of the program with the parsed options.

+
+
+
+
+

Extracting Symbols

+
+

At this stage, the clang frontend is used to parse the source code and generate an AST. +The AST information is extracted and stored in a Corpus object (mrdocs/Corpus.hpp).

+
+
+

Compilation Database

+
+

The second step in DoGenerateAction is to create a CompilationDatabase object, so we can extract symbols from its source files. +There are multiple possible sources for this file according to the configuration options: the file might be read directly from the path specified in the options, or it might be generated by MrDocs from build scripts.

+
+
+

Whatever the source, a derived MrDocsCompilationDatabase object (lib/Lib/MrDocsCompilationDatabase.hpp) is created to represent the compilation database. +The difference between the original CompilationDatabase and the MrDocsCompilationDatabase is that the latter includes a number of pre-processing steps to filter and transform compilation commands.

+
+
+

For each compilation command:

+
+
+
    +
  • +

    Command line arguments are adjusted

    +
    +
      +
    • +

      Warnings are supressed

      +
    • +
    • +

      Additional defines are added

      +
    • +
    • +

      Implicit include directories are added

      +
    • +
    • +

      Unrecognized arguments are removed

      +
    • +
    +
    +
  • +
  • +

    Paths are normalized

    +
  • +
  • +

    Non C++ files are filtered

    +
  • +
+
+
+
+

Info Nodes

+
+

MrDocs represents each C++ symbol or construct as an Info node (mrdocs/Metadata/Info.hpp). +MrDocs currently defines the following Info nodes:

+
+
+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionDeclaration

NamespaceInfo

The symbol is a namespace

mrdocs/Metadata/Namespace.hpp

RecordInfo

The symbol is a record (class or struct)

mrdocs/Metadata/Record.hpp

FunctionInfo

The symbol is a function

mrdocs/Metadata/Function.hpp

EnumInfo

The symbol is an enum

mrdocs/Metadata/Enum.hpp

TypedefInfo

The symbol is a typedef

mrdocs/Metadata/Typedef.hpp

VariableInfo

The symbol is a variable

mrdocs/Metadata/Variable.hpp

FieldInfo

The symbol is a field

mrdocs/Metadata/Field.hpp

SpecializationInfo

The symbol is a template specialization

mrdocs/Metadata/Specialization.hpp

FriendInfo

The symbol is a friend declaration

mrdocs/Metadata/Friend.hpp

EnumeratorInfo

The symbol is an enumerator

mrdocs/Metadata/Enumerator.hpp

GuideInfo

The symbol is a deduction guide

mrdocs/Metadata/Guide.hpp

AliasInfo

The symbol is a namespace alias

mrdocs/Metadata/Alias.hpp

UsingInfo

The symbol is a using declaration

mrdocs/Metadata/Using.hpp

ConceptInfo

The symbol is a concept

mrdocs/Metadata/Concept.hpp

+
+
+
+

Info can not only represent direct AST symbols but also C++ constructs that need to be inferred from these symbols. +Nodes in the first category will typically be created in the initial extraction step, and nodes in the second category will be created in the finalization step.

+
+
+

When defining a new Info type, it is important to consider how this type will be supported in all other modules of the codebase, including the AST visitor, generators, tests, and the documentation. +The script .github/check_info_nodes_support.sh will attempt to infer whether most of these features have been implemented for each node type.

+
+
+
+

Clang LibTooling

+
+

MrDocs uses Clang to extract Info objects from the C++ AST. +Clang offers two interfaces to access the C++ AST: the LibClang and LibTooling libraries. +MrDocs uses the latter, as it provides full control over the AST traversal process at the cost of an unstable API.

+
+
+

In LibTooling, once we have a Compilation Database, we can create a ClangTool object to run the Clang frontend on a set of source files.

+
+
+
+
clang::tooling::ClangTool Tool(compilationDatabase, sourceFiles);
+newFrontendActionFactory<clang::SyntaxOnlyAction> actionFactory();
+return Tool.run(actionFactory.get());
+
+
+
+

The clang::tooling::ClangTool::run method takes a clang::tooling::ToolAction object that defines how to process the AST. +The action object that usually comes from a clang::tooling::FrontendActionFactory. +In the example above, the SyntaxOnlyAction is used to parse the source code and generate the AST without any further processing.

+
+
+

In MrDocs, this process happens in clang::mrdocs::CorpusImpl::build (src/lib/Lib/CorpusImpl.cpp), where we call Tool.run for each object in the database with our custom ASTAction action and ASTActionFactory factory (src/lib/AST/ASTVisitor.cpp).

+
+
+
+

AST Traversal

+
+

While ASTAction is the entry point for processing the AST, the real work is done by the ASTVisitor class. +As the AST is generated, it is traversed by the ASTVisitor class.

+
+
+

The entry point of this class is ASTVisitor::build, which recursively calls ASTVisitor::traverseDecl for the root clang::TranslationUnitDecl node of the translation unit. +During the AST traversal stage, the complete AST generated by the clang frontend is walked beginning with this root TranslationUnitDecl node.

+
+
+

Each clang node is converted into a mrdocs::Info node, which is then stored with any relevant information in a mrdocs::Corpus object.

+
+
+
+

USR Generation

+
+

It is during this stage that USRs (universal symbol references) are generated and hashed with SHA1 to form the 160 bit SymbolID for an entity. +Except for built-in types, all entities referenced in the corpus will be traversed and be assigned a SymbolID; including those from the standard library. +This is necessary to generate the full interface for user-defined types.

+
+
+
+

Finalizing the Corpus

+
+

After running the AST traversal on all translation units, CorpusImpl::build contains finalization steps for the Corpus object. +At this point, we process C++ constructs that are not directly represented in the AST.

+
+
+

The first finalization step happens in CorpusImpl::build (src/lib/Lib/CorpusImpl.cpp), where the Info objects from a single translation unit +are merged into a map containing the merged results from all other TUs. +The merging step is necessary as there may be multiple identical definitions of the same entity. +For instance, this represents the case where a function is declared at different points in the code base and might have different attributes or comments. +At this step, the doc comments are also finalized. +Each Info object has a pointer to its Javadoc object (mrdocs/Metadata/Javadoc.hpp), which is a representation of the documentation comments.

+
+
+

After AST traversal and Info merging, the result is stored as a map of Info objects indexed by their respective SymbolID. +A second finalization step is then performed in clang::mrdocs::finalize (src/lib/Metadata/Finalize.cpp), where any references to SymbolID objects that don’t exist are removed. +This is necessary because the AST traversal will generate references to entities that should be filtered and are not present in the corpus.

+
+
+

At this point, the Corpus object contains representations of all entities in the code base and further semantic C++ constructs that are not directly represented in the AST can be inferred.

+
+
+
+
+

Generators

+
+

Documentation generators may traverse this structure by calling Corpus::traverse with a Corpus::Visitor derived visitor and the SymbolID of the entity to visit (e.g. the global namespace).

+
+
+

Documentation generators are responsible for traversing the corpus and generating documentation in the desired format.

+
+
+

The API for documentation generators is defined in mrdocs/Generator.hpp.

+
+
+
+

Directory Layout

+
+

The MrDocs codebase is organized as follows:

+
+
+

include/—The main include directory

+
+

This directory contains the public headers for the MrDocs library.

+
+
+
    +
  • +

    include/mrdocs/—The core library headers

    +
    +
      +
    • +

      include/mrdocs/ADT—Data Structures

      +
    • +
    • +

      include/mrdocs/Dom—The Document Object Model for Abstract Trees

      +
    • +
    • +

      include/mrdocs/MetadataInfo nodes and metadata classes

      +
    • +
    • +

      include/mrdocs/Support—Various utility classes

      +
    • +
    +
    +
  • +
+
+
+
+

src/—The main source directory

+
+

This directory contains the source code for the MrDocs library and private headers.

+
+
+
    +
  • +

    src/lib/—The core library

    +
    +
      +
    • +

      src/lib/AST/—The AST traversal code

      +
    • +
    • +

      src/lib/Dom/—The Document Object Model for Abstract Trees

      +
    • +
    • +

      src/lib/Gen/—Generators

      +
    • +
    • +

      src/lib/Lib/—The core library classes

      +
    • +
    • +

      src/lib/Metadata/Info nodes and metadata classes

      +
    • +
    • +

      src/lib/Support/—Various utility classes

      +
    • +
    +
    +
  • +
  • +

    src/test/—The test directory

    +
  • +
  • +

    src/test_suite/—The library used for testing

    +
  • +
  • +

    src/tool/—The main program

    +
  • +
+
+
+
+

share/—Shared resources

+
+

This directory contains shared resources for the documentation generators and utilities for developers. +Its subdirectories are installed in the share directory of the installation.

+
+
+
    +
  • +

    share/—Shared resources for the documentation generators

    +
  • +
  • +

    share/cmake/—CMake modules to generate the documentation

    +
  • +
  • +

    share/gdb/—GDB pretty printers

    +
  • +
  • +

    share/mrdocs/—Shared resources for the documentation generators

    +
  • +
+
+
+
+

docs—Documentation

+
+

This directory contains the documentation for the MrDocs project. +The documentation is written in AsciiDoc and can be built using the Antora tool.

+
+
+
    +
  • +

    docs/—Documentation configuration files and scripts

    +
    +
      +
    • +

      docs/modules/—The documentation asciidoc files

      +
    • +
    • +

      docs/extensions—Antora extensions for the documentation

      +
    • +
    +
    +
  • +
+
+
+
+

third-party/—Helpers for third-party libraries

+
+

This directory contains build scripts and configuration files for third-party libraries.

+
+
+
    +
  • +

    third-party/—Third-party libraries

    +
    +
      +
    • +

      third-party/llvm/—CMake Presets for LLVM

      +
    • +
    • +

      third-party/duktape/—CMake scripts for Duktape

      +
    • +
    • +

      third-party/lua/—A bundled Lua interpreter

      +
    • +
    +
    +
  • +
+
+
+
+
+
+
+

Coding Standards

+
+
+

Paths

+
+

The AST visitor and metadata all use forward slashes to represent file pathnames, even on Windows. +This is so the generated reference documentation does not vary based on the platform.

+
+
+
+

Exceptions

+
+

Errors thrown by the program should always have type Exception. +Objects of this type are capable of transporting an Error object. +This is important for the scripting to work; exceptions are used to propagate errors from library code to scripts and back to the invoking code. +For exceptional cases, these thrown exceptions should be uncaught. +The tool installs an uncaught exception handler that prints a stack trace and exits the process immediately.

+
+
+
+

Testing

+
+

All new features should be accompanied by tests. +The mrdocs-test target is used to run the test suites. +This target has its entry point in src/test/TestMain.cpp, which can take two paths:

+
+
+
    +
  • +

    Golden testing: When input paths are provided to the test executable via the command line, the test suite will run the DoTestAction() that iterates all files in test-files comparing the input source files with the expected XML output files.

    +
  • +
  • +

    Unit testing: When no input paths are provided, all unit tests will be run via unit_test_main(), defined by the our test-suite library in src/test_suite/test_suite.cpp.

    +
  • +
+
+
+

The fixtures for golden testing are defined in test-files/golden-tests, where files in each directory have the following format:

+
+
+
    +
  • +

    mrdocs.yml: Basic configuration options for all files in this directory.

    +
  • +
  • +

    <filename>.cpp: The input source file to extract symbols from.

    +
  • +
  • +

    <filename>.xml: The expected XML output file generated with the XML generator.

    +
  • +
  • +

    <filename>.bad.xml: The test output file generated when the test fails.

    +
  • +
  • +

    <filename>.yml: Extra configuration options for this specific file.

    +
  • +
+
+
+
+
+
+

Contributing

+
+
+

If you find a bug or have a feature request, please open an issue on the MrDocs GitHub repository: https://github.com/cppalliance/mrdocs/issues

+
+
+

If you would like to contribute a feature or bug fix, please open a pull request on the MrDocs GitHub repository: https://github.com/cppalliance/mrdocs/pulls

+
+
+

If you would like to discuss a feature or bug fix before opening a pull request, discussing happen in the #mrdocs channel on the Cpplang Slack: https://cpplang.slack.com/

+
+
+
+ +
+
+ +
+ + diff --git a/docs/mrdocs/develop/demos.html b/docs/mrdocs/develop/demos.html new file mode 100644 index 000000000..2e7070aa0 --- /dev/null +++ b/docs/mrdocs/develop/demos.html @@ -0,0 +1,252 @@ + + + + + + Demos :: MrDocs + + + + + + + + +
+ +
+
+ +

Demos

+
+

A few examples of reference documentation generated with MrDocs are available in https://mrdocs.com/demos/:

+
+
+

ci-all-releases

+
+ ++++++ + + + + + + + + + + + + + + + + + + + +

Multi Page

Single Page

Library

Asciidoc

Asciidoc

XML

Boost.URL

Boost.URL reference in Asciidoc format

Boost.URL reference in Asciidoc format

Boost.URL reference in XML format

+
+

develop

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +

Multi Page

Single Page

Library

Asciidoc

Asciidoc

XML

Boost.Scope

Boost.Scope reference in Asciidoc format

Boost.Scope reference in Asciidoc format

Boost.URL

Boost.URL reference in Asciidoc format

Boost.URL reference in Asciidoc format

Boost.URL reference in XML format

+
+

master

+
+ ++++++ + + + + + + + + + + + + + + + + + + + +

Multi Page

Single Page

Library

Asciidoc

Asciidoc

XML

Boost.URL

Boost.URL reference in Asciidoc format

Boost.URL reference in Asciidoc format

Boost.URL reference in XML format

+
+

v0.0.1

+
+ ++++++ + + + + + + + + + + + + + + + + + + + +

Multi Page

Single Page

Library

Asciidoc

Asciidoc

XML

Boost.URL

Boost.URL reference in Asciidoc format

Boost.URL reference in Asciidoc format

Boost.URL reference in XML format

+
+

v0.0.2

+
+ ++++++ + + + + + + + + + + + + + + + + + + + +

Multi Page

Single Page

Library

Asciidoc

Asciidoc

XML

Boost.URL

Boost.URL reference in Asciidoc format

Boost.URL reference in Asciidoc format

Boost.URL reference in XML format

+ +
+
+ +
+ + diff --git a/docs/mrdocs/develop/design-notes.html b/docs/mrdocs/develop/design-notes.html new file mode 100644 index 000000000..23e5e8fab --- /dev/null +++ b/docs/mrdocs/develop/design-notes.html @@ -0,0 +1,304 @@ + + + + + + Design Notes :: MrDocs + + + + + + + + +
+ +
+
+ +

Design Notes

+
+

Why automate documentation?

+
+
+

C++ API design is challenging. +When you write a function signature, or declare a class, it is at that moment when you are likely to have as much information as you will ever have about what it is supposed to do. +The more time passes before you write the documentation, the less likely you are to remember all the details of what motivated the API in the first place.

+
+
+

In other words, because best and worst engineers are naturally lazy, the temporal adjacency of the C++ declaration to the documentation improves outcomes. +For this reason, having the documentation be as close as possible to the declaration is ideal. +That is, the spatial adjacency of the C++ declaration to the documentation improves outcomes because it facilitates temporal adjacency.

+
+
+

In summary, the automated extraction of reference documentation from C++ declarations containing attached documentation comments is ideal because:

+
+
+
    +
  • +

    Temporally adjacent documentation is more comprehensive

    +
  • +
  • +

    Spatially adjacent documentation requires less effort to maintain

    +
  • +
  • +

    And causally connected documentation is more accurate

    +
  • +
+
+
+

From the perspective of engineers, however, the biggest advantage of automated documentation is that it implies a single source of truth for the API at a low cost. +However, C++ codebases are notoriously difficult to document automatically because of constructs where the code needs to diverge from the intended API that represents the contract with the user.

+
+
+

Tools like Doxygen typically require workarounds and manual intervention via preprocessor macros to get the documentation right. +These workarounds are problematic because they effectively mean that there are two versions of the code: the well-formed and the ill-formed versions. +This subverts the single sources of truth for the code.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Mr. DocsAutomaticManualNo Reference

No workarounds

Nice for users

Single Source of Truth

Less Work for Developers

Always up-to-date

+
+
    +
  • +

    By providing no reference to users, they are forced to read header files to understand the API. +This is a problem because header files are not always the best source of truth for the API. +Developers familiar with cppreference.com will know that the documentation there is often more informative than the header files.

    +
  • +
  • +

    A common alternative is to provide a manual reference to the API. +Developers duplicate the signatures, which requires extra work. +This strategy tends to work well for small libraries and allows the developer to directly express the contract with the user. +However, as the single source of truth is lost, it becomes unmanageable as the codebase grows. +When the declaration changes, they forget to edit the docs, and the reference becomes out of date.

    +
  • +
  • +

    In this case, it looks like the best solution is to automate the documentation. +The causal connection between the declaration and the generated documentation improves outcomes. +That’s when developers face difficulties with existing tools like Doxygen, which require workarounds and manual intervention to get the documentation right. +The workarounds mean that there are two versions of the code: the well-formed and the ill-formed versions.

    +
  • +
  • +

    The philosophy behind MrDocs is to provide solutions to these workarounds so that the single source of truth can be maintained with minimal effort by developers. +With Mr.Docs, the documented C++ code should be the same as the code that is compiled.

    +
  • +
+
+
+
+
+

Customization

+
+
+

Once the documentation is extracted from the code, it is necessary to format it in a way that is useful to the user. +This usually involves generating output files that match the content of the documentation to the user’s needs.

+
+
+

A limitation of existing tools like Doxygen is that their output formats are not very customizable. +It supports minor customization in the output style and, for custom content formats, it requires much more complex workflows, like generating XML files and writing secondary applications to process them.

+
+
+

MrDocs attempts to support multiple output formats and customization options. +In practice, MrDocs attempts to provide three levels of customization:

+
+
+
    +
  • +

    At the first level, the user can use an existing generator and customize its templates and helper functions.

    +
  • +
  • +

    The user can write a MrDocs plugin at a second level that defines a new generator.

    +
  • +
  • +

    At a third level, it can use a generator for a structured file format and consume the output in a more uncomplicated secondary application or script.

    +
  • +
+
+
+

These multiple levels of complexity mean developers can worry only about the documentation content. +In practice, developers rarely need new generators and are usually only interested in changing how an existing generator formats the output. +Removing the necessity of writing and maintaining a secondary application only to customize the output via XML files can save these developers an immense amount of time.

+
+
+
+
+

C++ Constructs

+
+
+

To deal with the complexity of C++ constructs, MrDocs uses clang’s libtooling API. +That means MrDocs understands all C++: if clang can compile it, MrDocs knows about it.

+
+
+

Here are a few constructs MrDocs attempts to understand and document automatically from the metadata:

+
+
+
    +
  • +

    Overload sets

    +
  • +
  • +

    Private APIs

    +
  • +
  • +

    Unspecified Return Types

    +
  • +
  • +

    Concepts

    +
  • +
  • +

    Typedef / Aliases

    +
  • +
  • +

    Constants

    +
  • +
  • +

    Automatic Related Types

    +
  • +
  • +

    Macros

    +
  • +
  • +

    SFINAE

    +
  • +
  • +

    Hidden Base Classes

    +
  • +
  • +

    Hidden EBO

    +
  • +
  • +

    Niebloids

    +
  • +
  • +

    Coroutines

    +
  • +
+
+
+
+ +
+
+ +
+ + diff --git a/docs/mrdocs/develop/index.html b/docs/mrdocs/develop/index.html new file mode 100644 index 000000000..868426d30 --- /dev/null +++ b/docs/mrdocs/develop/index.html @@ -0,0 +1,122 @@ + + + + + + MrDocs :: MrDocs + + + + + + + + + +
+ +
+
+ +

MrDocs

+
+
+MrDocsBanner +
+
+
+
    +
  • +

    Automating C++ reference documentation significantly enhances usability by providing a navigable API and ensuring a single, up-to-date source of truth with minimal effort.

    +
  • +
  • +

    However, documenting C++ poses significant challenges due to discrepancies between the codebase and the public API. Doxygen remains a popular tool, yet it is suboptimal for C++ as it fails to fully comprehend C++ constructs and requires many transformation steps, including the incorporation of many macros within the C++ code. These macros maintain well-formed and ill-formed versions of the code, undermining the goal of unifying the source of truth.

    +
  • +
  • +

    Existing solutions frequently need better maintenance or usability issues, prompting users to revert to Doxygen.

    +
  • +
  • +

    An ideal solution would inherently understand C++ constructs, be actively maintained, and offer diverse options for customizing the output format.

    +
  • +
  • +

    MrDocs embodies these qualities. Supported by full-time developers from the C++ Alliance, MrDocs inherently comprehends C++ constructs without the need for macros and provides various output formats, customizable templates, and plugin support, ensuring it meets the demands of comprehensive and efficient documentation.

    +
  • +
+
+
+
+badge +
+
+ +
+
+ +
+ + diff --git a/docs/mrdocs/develop/install.html b/docs/mrdocs/develop/install.html new file mode 100644 index 000000000..d4b2469f7 --- /dev/null +++ b/docs/mrdocs/develop/install.html @@ -0,0 +1,1071 @@ + + + + + + Install :: MrDocs + + + + + + + + +
+ +
+
+ +

Install

+
+

Binary Packages

+
+
+

Binary packages are available from our Release Page. +Most users should use these packages.

+
+ ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

🪟 Windows

🐧 Linux

📃 Release

📦 7z

📦 msi

📦 zip

📦 tar.xz

📦 tar.gz

v0.0.2

+

July 10, 2024

🔗 MrDocs-0.0.2-win64.7z

+

(20 MB)

🔗 MrDocs-0.0.2-win64.msi

+

(37 MB)

🔗 MrDocs-0.0.2-win64.zip

+

(37 MB)

🔗 MrDocs-0.0.2-Linux.tar.xz

+

(52 MB)

🔗 MrDocs-0.0.2-Linux.tar.gz

+

(80 MB)

v0.0.1

+

December 1, 2023

🔗 MrDocs-0.0.1-win64.7z

+

(11 MB)

🔗 MrDocs-0.0.1-win64.msi

+

(18 MB)

-

🔗 MrDocs-0.0.1-Linux.tar.xz

+

(19 MB)

🔗 MrDocs-0.0.1-Linux.tar.gz

+

(28 MB)

master

+

December 1, 2023

🔗 MrDocs-0.0.1-win64.7z

+

(20 MB)

🔗 MrDocs-0.0.1-win64.msi

+

(37 MB)

🔗 MrDocs-0.0.1-win64.zip

+

(37 MB)

🔗 MrDocs-0.0.1-Linux.tar.xz

+

(52 MB)

🔗 MrDocs-0.0.1-Linux.tar.gz

+

(80 MB)

+
+
+
+

Install from Source

+
+
+

The following instructions assume we are at a parent directory that’s going to contain both the MrDocs and the third-party dependencies directories.

+
+
+
+
+ <parent-directory>
+  + mrdocs
+  + third-party
+
+
+
+

Clone the MrDocs repository with:

+
+
+
+
git clone https://github.com/cppalliance/mrdocs
+
+
+
+

Also create and go to the third-party directory, where we are going to download and install our dependencies:

+
+
+
+
mkdir third-party
+cd third-party
+
+
+
+ + + + + +
+ + +
+

These instructions assume all dependencies are installed in the third-party directory for simplicity. +Fell free to install them anywhere you want and adjust the main MrDocs configuration command later.

+
+
+
+
+

Fmt

+
+

MrDocs uses the fmt library for formatting strings. +From the third-party directory, you can clone the fmt repository and install it with the following commands:

+
+
+
+
git clone https://github.com/fmtlib/fmt --branch 10.2.1 --depth 1 (1)
+cd fmt
+cmake -S . -B ./build -DCMAKE_BUILD_TYPE=Release -D FMT_DOC=OFF -D FMT_TEST=OFF (2)
+cmake --build ./build --config Release (3)
+cmake --install ./build --prefix ./install (4)
+cd ..
+
+
+
+ + + + + + + + + + + + + + + + + +
1Shallow clones the fmt repository.
2Configure the fmt library with CMake, excluding the documentation and tests.
3Builds the fmt library in the build directory.
4Installs the fmt library in the install directory.
+
+
+ + + + + +
+ + +
+

All instructions in this document assume you are using a CMake version above 3.26. +Binaries are available at CMake’s official website.

+
+
+
+
+

If you prefer using Vcpkg to install dependencies, you can install VcPkg and fmt with the following commands from the third-party directory:

+
+
+
+
+
    +
  • +

    Windows PowerShell

    +
  • +
  • +

    Unix Variants

    +
  • +
+
+
+
+
+
git clone https://github.com/microsoft/vcpkg.git -b master (1)
+cd vcpkg
+bootstrap-vcpkg.bat (2)
+vcpkg.exe install fmt --triplet x64-windows (3)
+
+
+
+ + + + + + + + + + + + + +
1Clones the Vcpkg repository.
2Bootstraps Vcpkg.
3Installs the fmt library.
+
+
+
+
+
+
git clone https://github.com/microsoft/vcpkg.git -b master (1)
+cd vcpkg
+./bootstrap-vcpkg.sh (2)
+./vcpkg install fmt (3)
+
+
+
+ + + + + + + + + + + + + +
1Clones the Vcpkg repository.
2Bootstraps Vcpkg.
3Installs the fmt library.
+
+
+
+
+
+ + + + + +
+ + +
+

You can also install fmt with Vcpkg in Manifest mode. +In manifest mode, you declare your project’s direct dependencies in a manifest file named vcpkg.json. +MrDocs includes a vcpkg.json.example file you can duplicate or create a symlink as vcpkg.json to use this mode. +This file includes all the dependencies MrDocs needs, except for LLVM.

+
+
+

In this mode, VcPkg will create separate installed trees for each project and configuration. +This is the recommended vcpkg mode for most users, according to the vcpkg documentation.

+
+
+
+
+
+

Duktape

+
+

MrDocs uses the duktape library for JavaScript parsing. +From the third-party directory, you can download the duktape source code from the official release:

+
+
+
+
+
    +
  • +

    Windows PowerShell

    +
  • +
  • +

    Unix Variants

    +
  • +
+
+
+
+
+
Invoke-WebRequest -Uri "https://github.com/svaarala/duktape/releases/download/v2.7.0/duktape-2.7.0.tar.xz" -OutFile "duktape-2.7.0.tar.xz" (1)
+
+
+
+ + + + + +
1Downloads the duktape source code.
+
+
+
+
+
+
curl -LJO https://github.com/svaarala/duktape/releases/download/v2.7.0/duktape-2.7.0.tar.xz (1)
+
+
+
+ + + + + +
1Downloads the duktape source code.
+
+
+
+
+
+

Then patch the Duktape source code to provide CMake support.

+
+
+
+
tar -xf duktape-2.7.0.tar.xz (1)
+cp ../mrdocs/third-party/duktape/CMakeLists.txt ./duktape-2.7.0/CMakeLists.txt (2)
+cp ../mrdocs/third-party/duktape/duktapeConfig.cmake.in ./duktape-2.7.0/duktapeConfig.cmake.in (3)
+cd duktape-2.7.0
+
+
+
+ + + + + + + + + + + + + +
1Extracts the duktape source code.
2Patches the source code with a CMakeLists.txt file to the duktape-2.7.0 directory so that we can build it with CMake.
3Copies the duktapeConfig.cmake.in file to the duktape-2.7.0 directory so that we can install it with CMake and find it later from other CMake projects.
+
+
+

Now adjust the duk_config.h file to indicate we are statically building Duktape.

+
+
+
+
+
    +
  • +

    Windows PowerShell

    +
  • +
  • +

    Unix Variants

    +
  • +
+
+
+
+
+
$content = Get-Content -Path "src\duk_config.h" (1)
+$content = $content -replace '#define DUK_F_DLL_BUILD', '#undef DUK_F_DLL_BUILD' (2)
+$content | Set-Content -Path "src\duk_config.h" (3)
+
+
+
+ + + + + + + + + + + + + +
1Read the content of duk_config.h
2Replace the DUK_F_DLL_BUILD macro with #undef DUK_F_DLL_BUILD
3Write the content back to the file
+
+
+
+
+
+
sed -i 's/#define DUK_F_DLL_BUILD/#undef DUK_F_DLL_BUILD/g' "src/duk_config.h" (1)
+
+
+
+ + + + + +
1Disables the DUK_F_DLL_BUILD macro in the duk_config.h file to indicate we are statically building duktape.
+
+
+
+
+
+

And finally install the library with CMake:

+
+
+
+
cmake -S . -B ./build -DCMAKE_BUILD_TYPE=Release (1)
+cmake --build ./build --config Release (2)
+cmake --install ./build --prefix ./install (3)
+
+
+
+ + + + + + + + + + + + + +
1Configures the duktape library with CMake.
2Builds the duktape library in the build directory.
3Installs the duktape library with CMake support in the install directory.
+
+
+

The scripts above downloads the duktape source code, extracts it, and configures it with CMake. +The CMake scripts provided by MrDocs are copied to the duktape-2.7.0 directory to facilitate the build process with CMake and provide CMake installation scripts for other projects.

+
+
+

If you prefer using Vcpkg to install dependencies, you can install duktape with the following commands from the third-party directory:

+
+
+
+
+
    +
  • +

    Windows PowerShell

    +
  • +
  • +

    Unix Variants

    +
  • +
+
+
+
+
+
cd vcpkg
+vcpkg.exe install duktape --triplet x64-windows (1)
+
+
+
+ + + + + +
1Installs the duktape library.
+
+
+
+
+
+
cd vcpkg
+./vcpkg install duktape (1)
+
+
+
+ + + + + +
1Installs the duktape library.
+
+
+
+
+
+ + + + + +
+ + +These examples assume VcPkg is already installed in the third-party/vcpkg directory (see the Fmt section). +
+
+
+
+

Libxml2

+
+

MrDocs uses libxml2 tools for tests. +Only developers need to install this dependency. +Users can skip this step.

+
+
+

From the third-party directory, you can clone the libxml2 repository and install it with the following commands:

+
+
+
+
git clone https://github.com/GNOME/libxml2 --branch v2.12.6 --depth 1 (1)
+cd libxml2
+cmake -S . -B ./build -DCMAKE_BUILD_TYPE=Release -DLIBXML2_WITH_PROGRAMS=ON -DLIBXML2_WITH_FTP=OFF -DLIBXML2_WITH_HTTP=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_LEGACY=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_ZLIB=OFF -DLIBXML2_WITH_ICU=OFF -DLIBXML2_WITH_TESTS=OFF -DLIBXML2_WITH_HTML=ON -DLIBXML2_WITH_C14N=ON -DLIBXML2_WITH_CATALOG=ON -DLIBXML2_WITH_DEBUG=ON -DLIBXML2_WITH_ISO8859X=ON -DLIBXML2_WITH_MEM_DEBUG=OFF -DLIBXML2_WITH_MODULES=ON -DLIBXML2_WITH_OUTPUT=ON -DLIBXML2_WITH_PATTERN=ON -DLIBXML2_WITH_PUSH=ON -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_READER=ON -DLIBXML2_WITH_REGEXPS=ON -DLIBXML2_WITH_SAX1=ON -DLIBXML2_WITH_SCHEMAS=ON -DLIBXML2_WITH_SCHEMATRON=ON -DLIBXML2_WITH_THREADS=ON -DLIBXML2_WITH_THREAD_ALLOC=OFF -DLIBXML2_WITH_TREE=ON -DLIBXML2_WITH_VALID=ON -DLIBXML2_WITH_WRITER=ON -DLIBXML2_WITH_XINCLUDE=ON -DLIBXML2_WITH_XPATH=ON -DLIBXML2_WITH_XPTR=ON (2)
+cmake --build ./build --config Release (3)
+cmake --install ./build --prefix ./install (4)
+cd ..
+
+
+
+ + + + + + + + + + + + + + + + + +
1Shallow clones the libxml2 repository.
2Configure the libxml2 with CMake, excluding the documentation, tests, and unwanted dependencies.
3Builds libxml2 in the build directory.
4Installs libxml2 in the install directory.
+
+
+

If you prefer using Vcpkg to install dependencies, you can install libxml2 with the following commands from the third-party directory:

+
+
+
+
+
    +
  • +

    Windows PowerShell

    +
  • +
  • +

    Unix Variants

    +
  • +
+
+
+
+
+
cd vcpkg
+vcpkg.exe install libxml2[tools] --triplet x64-windows (1)
+
+
+
+ + + + + +
1Installs libxml2.
+
+
+
+
+
+
cd vcpkg
+./vcpkg install libxml2[tools] (1)
+
+
+
+ + + + + +
1Installs libxml2.
+
+
+
+
+
+ + + + + +
+ + +These examples assume VcPkg is already installed in the third-party/vcpkg directory (see the Fmt section). +
+
+
+
+

LLVM

+
+

MrDocs uses LLVM to parse C++ code and extract documentation from it. +It depends on a recent version of LLVM: e1065370

+
+
+

Download:

+
+
+

You can shallow-clone the project from the official repository. +From the third-party directory, run the following commands:

+
+
+
+
mkdir -p llvm-project (1)
+cd llvm-project
+git init (2)
+git remote add origin https://github.com/llvm/llvm-project.git (3)
+git fetch --depth 1 origin e1065370aaacb1b1cb48e77d37d376bf024f4a39 (4)
+git checkout FETCH_HEAD (5)
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1Create a directory for the llvm-project instead of cloning it
2Initialize a git repository
3Add the official LLVM repository as a remote
4Fetch the commit we want to use: this allows us to shallow-clone the repository at this commit
5Checkout the commit we want to use
+
+
+

Configure:

+
+
+

The mrdocs/third-party/llvm directory provides CMake presets to build LLVM. +We recommend using preset files as they contain a replicable set of CMake configuration values that can be used for a project. +From third-party/llvm-project, you can copy the CMakePresets.json and CMakeUserPresets.json files to the llvm-project/llvm directory.

+
+
+
+
cp ../../mrdocs/third-party/llvm/CMakePresets.json ./llvm
+cp ../../mrdocs/third-party/llvm/CMakeUserPresets.json ./llvm/CMakeUserPresets.json
+
+
+
+

Run a command such as the following to configure LLVM:

+
+
+
+
+
    +
  • +

    Windows PowerShell

    +
  • +
  • +

    Unix Variants

    +
  • +
+
+
+
+
+
cd llvm
+cmake -S . -B ./build --preset=release-win
+
+
+
+
+
+
+
cd llvm
+cmake -S . -B ./build --preset=release-unix
+
+
+
+
+
+
+

In the example above, we configure a Release version of LLVM for MrDocs. +Choose one of the presets from CMakePresets.json or edit the variants in CMakeUserPresets.json to customize the configurations.

+
+
+ + + + + +
+ + +
+

Developers might also want to build a custom Debug LLVM configuration including optimizations, which allows for faster execution of tests. +The relwithdebinfo and debwithopt presets are provided for this purpose. +Or if you prefer using the command line, set CMAKE_CONFIGURATION_TYPES or CMAKE_BUILD_TYPE to Debug and manually include the optimization flags to -D CMAKE_CXX_FLAGS="/O2 /Zi" (MSVC) or -D CMAKE_CXX_FLAGS="-Og -g".

+
+
+

This should give you an optimized build with all debug features and flags, such as an appropriate _ITERATOR_DEBUG_LEVEL and the /MDd flag in MSVC. +In other platforms, this should give you a release somewhat equivalent to RelWithDebInfo optimized for debugging experience. -Og offers a reasonable level of optimization while maintaining fast compilation and a good debugging experience.

+
+
+
+
+

Build:

+
+
+

Build and install the configured version of LLVM with:

+
+
+
+
cmake --build ./build --config Release --parallel 4
+cmake --install ./build --prefix ../install
+
+
+
+

Replace 4 with the number of cores you want to use for building LLVM.

+
+
+

Return from ./third-party/llvm-project/llvm to the LLVM project directory:

+
+
+
+
cd ../..
+
+
+
+
+

LibC++

+
+

In addition to LLVM, MrDocs requires a deterministic version of the C standard library (LibC) to ensure consistent behavior across various environments. This step is crucial for replicating specific compiler and library configurations.

+
+
+

Download:

+
+
+

Continue using the same LLVM project directory.

+
+
+

Configure:

+
+
+

Configure and build LibC++ using the existing structure:

+
+
+
+
export CXX="./install/bin/clang++"
+export CC="./install/bin/clang"
+
+
+
+

These options set the C and C++ compilers to the ones previously installed by LLVM. +MrDocs only depends on the LibC++ headers, so any compiler that works for this step should be fine.

+
+
+

Run a command such as the following to configure LLVM:

+
+
+
+
+
    +
  • +

    Windows PowerShell

    +
  • +
  • +

    Unix Variants

    +
  • +
+
+
+
+
+
cmake -G Ninja \
+  -S runtimes \
+  -B build-libcxx \
+  -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
+  -DCMAKE_INSTALL_PREFIX="$(pwd)/install" \
+  -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
+  -DLIBCXXABI_ENABLE_SHARED=OFF \
+  -DLIBCXXABI_ENABLE_STATIC=ON \
+  -DLIBCXX_ENABLE_SHARED=OFF \
+  -DLIBCXX_NO_VCRUNTIME=ON \
+  -DCMAKE_CXX_FLAGS="-D__ORDER_LITTLE_ENDIAN__=1234 -D__ORDER_BIG_ENDIAN__=4321 -D__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__"
+
+
+
+
+
+
+
cmake -G Ninja  \
+  -S runtimes  \
+  -B build-libcxx  \
+  -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind"  \
+  -DCMAKE_INSTALL_PREFIX="$(pwd)/install"
+
+
+
+
+
+
+

Build:

+
+
+

Build and install the configured version of LibC++ with:

+
+
+
+
+
    +
  • +

    Windows PowerShell

    +
  • +
  • +

    Unix Variants

    +
  • +
+
+
+
+
+
ninja -C build-libcxx cxx
+ninja -C build-libcxx install-cxx
+
+
+
+
+
+
+
ninja -C build-libcxx cxx cxxabi unwind
+ninja -C build-libcxx install-cxx install-cxxabi install-unwind
+
+
+
+
+
+
+

Return from ./third-party/llvm-project to the parent directory to build and install MrDocs:

+
+
+
+
cd ../..
+
+
+
+
+

MrDocs

+
+

Return from ./third-party/vcpkg to the parent directory of third-party (the one containing the mrdocs directory) to build and install MrDocs:

+
+
+
+
cd ../..
+
+
+
+

Configure:

+
+
+

You can also configure MrDocs with command line arguments or CMake presets.

+
+
+

Configure with Command Line Arguments:

+
+
+

With the dependencies are available in third-party, you can configure MrDocs with:

+
+
+
+
+
    +
  • +

    Windows PowerShell

    +
  • +
  • +

    Unix Variants

    +
  • +
+
+
+
+
+
cmake -S mrdocs -B build -G "Visual Studio 17 2022" -A x64 -D CMAKE_CONFIGURATION_TYPES="RelWithDebInfo" -D CMAKE_EXPORT_COMPILE_COMMANDS=ON -D LLVM_ROOT="%cd%/third-party/llvm+clang/RelWithDebInfo" -D DUKTAPE_SOURCE_ROOT="%cd%/third-party/duktape-2.7.0" -D CMAKE_TOOLCHAIN_FILE="%cd%/third-party/vcpkg/scripts/buildsystems/vcpkg.cmake"
+
+
+
+
+
+
+
cmake -S mrdocs -B build -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_EXPORT_COMPILE_COMMANDS=ON -D LLVM_ROOT="$(pwd)/third-party/llvm+clang/RelWithDebInfo" -D DUKTAPE_SOURCE_ROOT="$(pwd)/third-party/duktape-2.7.0" -D CMAKE_TOOLCHAIN_FILE="$(pwd)/third-party/vcpkg/scripts/buildsystems/vcpkg.cmake"
+
+
+
+
+
+
+

Configure with CMake Presets:

+
+
+

The MrDocs repository also includes a CMakePresets.json file that contains the parameters to configure MrDocs with CMake.

+
+
+

To specify the installation directories, you can use the LLVM_ROOT, DUKTAPE_SOURCE_ROOT, CMAKE_TOOLCHAIN_FILE environment variables. +To specify a generator (-G) and platform name (-A), you can use the CMAKE_GENERATOR and CMAKE_GENERATOR_PLATFORM environment variables.

+
+
+

You can also customize the presets by duplicating and editing the CMakeUserPresets.json.example file in the mrdocs directory. +This is typically more convenient than using environment variables.

+
+
+

Build:

+
+
+

Then build and install MrDocs with:

+
+
+
+
cd build
+cmake --build .
+cmake --install .
+
+
+
+

To customize the installation directory, use the CMAKE_INSTALL_PREFIX option or use the --prefix option for the cmake --install . command. +To customize the C and C++ compilers, use the CMAKE_C_COMPILER and CMAKE_CXX_COMPILER options.

+
+
+ + + + + +
+ + +
+

Developers should also enable -D BUILD_TESTING=ON. +If any custom build of LLVM other than RelWithDebInfo is being used, the LLVM_ROOT variable should be set to the installation directory of that build.

+
+
+
+
+
+
+
+

Package layout

+
+
+

The MrDocs installation directory follows the "Filesystem Hierarchy Standard" (FHS) layout:

+
+
+
    +
  • +

    bin: the MrDocs executable intended to be used by users or invoked from the command line.

    +
  • +
  • +

    share: resource files installed by MrDocs

    +
  • +
  • +

    doc: the MrDocs documentation

    +
  • +
  • +

    include: the MrDocs headers

    +
  • +
  • +

    lib: the MrDocs library

    +
  • +
+
+
+

The FHS layout provides a directory structure that also serves as a widely accepted convention for organizing files and directories in Unix-like systems, but that can be used in any operating system.

+
+
+
+ +
+
+ +
+ + diff --git a/docs/mrdocs/develop/license.html b/docs/mrdocs/develop/license.html new file mode 100644 index 000000000..961905890 --- /dev/null +++ b/docs/mrdocs/develop/license.html @@ -0,0 +1,374 @@ + + + + + + License :: MrDocs + + + + + + + + +
+ +
+
+ +

License

+
+
+
==============================================================================
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+    1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+    2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+    3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+    4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+    5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+    6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+    7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+    8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+    9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+    END OF TERMS AND CONDITIONS
+
+    APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+    Copyright [yyyy] [name of copyright owner]
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+==============================================================================
+Software from third parties included in the LLVM Project:
+==============================================================================
+The LLVM Project contains third party software which is under different license
+terms. All such code will be identified clearly using at least one of two
+mechanisms:
+1) It will be in a separate directory tree with its own `LICENSE.txt` or
+   `LICENSE` file at the top containing the specific license and restrictions
+   which apply to that software, or
+2) It will contain specific license and restriction terms at the top of every
+   file.
+
+==============================================================================
+Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2003-2019 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+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:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+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
+CONTRIBUTORS 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 WITH THE
+SOFTWARE.
+
+
+ +
+
+ +
+ + diff --git a/docs/mrdocs/develop/usage.html b/docs/mrdocs/develop/usage.html new file mode 100644 index 000000000..b3c4b17cf --- /dev/null +++ b/docs/mrdocs/develop/usage.html @@ -0,0 +1,414 @@ + + + + + + Basic Usage :: MrDocs + + + + + + + + +
+ +
+
+ +

Basic Usage

+
+

MrDocs configuration file

+
+
+

The mrdocs.yml configuration file contains information about the project. +If you’re used to Doxygen, this file is similar to the Doxyfile configuration file.

+
+
+

Here is an example of a mrdocs.yml file:

+
+
+
+
source-root: ../include
+multipage: false
+generate: adoc
+
+
+
+

In many projects, it is common to have the documentation in a docs directory, which can also contain this configuration file.

+
+
+
+
+ <project-directory>
+  + docs
+    + mrdocs.yml
+    + ...
+  + include
+  + src
+  + test
+  + ...
+
+
+
+

The most important information is the source-root option, which determines the root of the source tree relative to the mrdocs.yml file.

+
+
+

The list of all available options can be found in the The Configuration File page.

+
+
+
+
+

MrDocs invocation

+
+
+ + + + + +
+ + +For consistency, these instructions assume you have the mrdocs executable in PATH. +
+
+
+

Basic invocation

+
+

You can invoke MrDocs from the command line with the following command:

+
+
+
+
mrdocs path/to/mrdocs.yml
+
+
+
+

If you are at the path of the mrdocs.yml file, you can simply run:

+
+
+
+
mrdocs
+
+
+
+

You can also specify other commands to MrDocs directly from the command line to set or override options from the mrdocs.yml file (See all options in The Configuration File page).

+
+
+
+
mrdocs path/to/mrdocs.yml --output=../docs/reference
+
+
+
+ + + + + +
+ + +Except for the path to the mrdocs.yml file, all other relative paths are made absolute relative to the mrdocs.yml file. +
+
+
+
+

Compilation databases

+
+

One way to simplify the documentation generation process is by using a compile_commands.json file generated by CMake to determine the source files to process and their compile options. +This file is generated by the CMake configuration step when the CMAKE_EXPORT_COMPILE_COMMANDS option is set to ON.

+
+
+
+
cmake -B build -S . -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
+
+
+
+

At this step, you can also add any other flags you want to pass to cmake, such as -DCMAKE_BUILD_TYPE=Release or -DCMAKE_CXX_COMPILER=clang++.

+
+
+ + + + + +
+ + +If you are using the Visual Studio generator, you might need to switch to the Ninja generator to generate the compile_commands.json file. +
+
+
+

This will generate a compile_commands.json file in the build directory containing all commands needed to compile your project. +This file can be used by MrDocs to determine the source files to process and their compile options.

+
+
+
+
mrdocs --compilation-database=../build/compile_commands.json --output=../docs/reference
+
+
+
+

MrDocs will go through all the source files listed in the compile_commands.json file and generate the documentation for them.

+
+
+ + + + + +
+ + +When MrDocs goes through the commands in the compilation database, it will go through the same targets as the compiler. +Only symbols present in these targets will be documented. +In the case of header-only libraries, the symbols will be documented only if they are included in one of these targets. +
+
+
+
+

CMake integration

+
+

It’s common to have different configurations for the documentation generation than for the project build. +This means CMake is often being run just to generate a custom compile_commands.json for the documentation. +Also, the compile_commands.json file is a configuration artifact, which means it often lacks a stable location that can be referenced in the mrdocs.yml configuration file.

+
+
+

Thus, the pattern of using a compile_commands.json file generated by CMake is so common that MrDocs provides a CMake module to simplify the process. +You can let MrDocs generate the compile_commands.json file for you by providing the path to the CMakeLists.txt file of your project.

+
+
+
+
mrdocs --compilation-database=../CMakeLists.txt --output=../docs/reference
+
+
+
+

By providing your CMakeLists.txt file as the reference for you compilation database, MrDocs will automatically run CMake to generate the compile_commands.json file in a temporary directory. +Not only this simplifies the usage but also ensures that the stable compilation database file can be used in the mrdocs.yml configuration file.

+
+
+ + + + + +
+ + +MrDocs does not bundle CMake. +If you want to use this feature, you need to have CMake installed on your system and available in PATH. +
+
+
+

Parameters for cmake, such as -D BUILDING_TEST=OFF -D MRDOCS_BUILD=ON can also be specified with the cmake option in configuration file. +MrDocs will always append the CMAKE_EXPORT_COMPILE_COMMANDS=ON flag to the cmake command.

+
+
+
+

MrDocs Builds

+
+

In many projects, a common pattern is to define a special build configuration for the documentation generation such that:

+
+
+
    +
  1. +

    Tests, examples, and auxiliary targets excluded

    +
  2. +
  3. +

    All header-only files are included in targets

    +
  4. +
  5. +

    Unnecessary sources files are excluded from targets

    +
  6. +
+
+
+

This can usually be achieved by defining a custom target in the CMakeLists.txt with a single source file that includes all the necessary header files.

+
+
+
+
if (MY_PROJECT_MRDOCS_BUILD)
+    # Glob all header files
+    set(INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include")
+    file(GLOB_RECURSE HEADER_FILES "${INCLUDE_DIR}/*.hpp")
+
+    # Create a temporary source file that includes all header files
+    set(TEMP_CPP_FILE "${CMAKE_CURRENT_BINARY_DIR}/all_headers.cpp")
+    file(WRITE ${TEMP_CPP_FILE} "// This file is generated automatically by CMake\n\n")
+    foreach(HEADER_FILE ${HEADER_FILES_LIST})
+        file(APPEND ${TEMP_CPP_FILE} "#include \"${HEADER_FILE}\"\n")
+    endforeach()
+
+    # Create a custom target for MrDocs
+    add_library(my_project_mrdocs_target ${TEMP_CPP_FILE})
+
+    # Set any other target properties here
+    target_include_directories(my_project_mrdocs_target PRIVATE ${INCLUDE_DIR})
+    target_link_libraries(my_project_mrdocs_target PRIVATE an_external_library)
+
+    # Don't create any other targets
+    return()
+endif()
+
+
+
+

To use this target, you can run CMake with the MY_PROJECT_MRDOCS_BUILD flag set to ON:

+
+
+
+
mrdocs --cmake="-D MY_PROJECT_MRDOCS_BUILD=ON" --compilation-database=../CMakeLists.txt --output=..\docs\reference
+
+
+
+

Because these paths and options are stable, you can specify them in the mrdocs.yml configuration file.

+
+
+
+
cmake: "-D MY_PROJECT_MRDOCS_BUILD=ON"
+compilation-database: ../CMakeLists.txt
+output: ../docs/reference
+
+
+
+
+
+
+

Extracting Documentation

+
+
+

Unlike other documentation generators, MrDocs only works with valid C++ code. +Instead of partially preprocessing the source files and inferring symbols from potentially ill-formed code, MrDocs relies on the compilation database and Clang to preprocess the source files.

+
+
+

Thus, for each common C++ construct, MrDocs provides commands or options to identify and extract the relevant information as intended by the user. +For instance, a common ill-formed Doxygen pattern to specify a class as an implementation detail is:

+
+
+
+
#ifdef DOCS
+__implementation_defined__
+#else
+impl::f_return_t
+#endif
+f();
+
+
+
+

In this pattern, the user wants to document the function f as implementation_defined f(); because the library contract is that the user should not rely on a specific return type here. +However, this ill-formed pattern is problematic:

+
+
+
    +
  • +

    implementation_defined is not a valid symbol so the code is ill-formed

    +
  • +
  • +

    impl::f_return_t doesn’t express the intent of the user for the documentation

    +
  • +
  • +

    the developer has to effectively maintain two versions of the code

    +
  • +
  • +

    the original source code becomes more and more unreadable

    +
  • +
+
+
+

Instead, when using MrDocs, the same function could be documented as:

+
+
+
+
impl::f_return_t f();
+
+
+
+

And the user can specify that impl as a namespace for implementation details in the configuration file:

+
+
+
+
# ...
+implementation-detail: impl
+# ...
+
+
+
+

The Commands and The Configuration File pages contain a list of all available commands and options to identify and extract the relevant information as intended by the user.

+
+
+

MrDocs provides multiple mechanisms are provided to specify special C++ patterns, such as the example above. +For each common C++ construct that would require macros and two versions of the code, MrDocs provides commands to identify the construct and extract the relevant information as intented by the user.

+
+
+
+ +
+
+ +
+ + diff --git a/docs/robots.txt b/docs/robots.txt new file mode 100644 index 000000000..c2a49f4fb --- /dev/null +++ b/docs/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/docs/search-index.js b/docs/search-index.js new file mode 100644 index 000000000..37656410c --- /dev/null +++ b/docs/search-index.js @@ -0,0 +1 @@ +antoraSearch.initSearch(lunr, {"index":{"version":"2.3.9","fields":["title","name","text","component"],"fieldVectors":[["title/1-1",[0,33.298]],["name/1-1",[]],["text/1-1",[]],["component/1-1",[]],["title/1",[1,24.232]],["name/1",[1,0.633]],["text/1",[0,2.335,1,3.146,2,2.599,3,2.451,4,1.794,5,1.794,6,4.249,7,5.039,8,4.101,9,3.421,10,3.269,11,2.835,12,2.335,13,2.335,14,2.022,15,2.164,16,3.269,17,2.335,18,4.295,19,2.549,20,3.121,21,3.421,22,4.249,23,2.549,24,2.164,25,2.164,26,5.977,27,3.367,28,3.121,29,4.715,30,1.9,31,2.835,32,2.164,33,2.835,34,3.269,35,4.715,36,5.531,37,2.549,38,2.549,39,3.269,40,4.715,41,3.676,42,2.835,43,3.269,44,3.269,45,2.164,46,2.549,47,3.215,48,3.269,49,1.9,50,1.9,51,2.835,52,3.367,53,3.269,54,3.269,55,2.835,56,3.269,57,3.269,58,3.269,59,2.335,60,4.089,61,3.269,62,3.367,63,3.367,64,2.741,65,2.164,66,2.164,67,2.835,68,2.549,69,2.335,70,2.022,71,2.549,72,2.022,73,5.213,74,5.531,75,2.835,76,3.269,77,2.164,78,4.715,79,3.269,80,1.699,81,1.699]],["component/1",[82,0.317]],["title/2-1",[83,28.329,84,31.511]],["name/2-1",[]],["text/2-1",[]],["component/2-1",[]],["title/2-2",[85,21.122,86,16.291]],["name/2-2",[]],["text/2-2",[]],["component/2-2",[]],["title/2-3",[87,20.902]],["name/2-3",[]],["text/2-3",[]],["component/2-3",[]],["title/2-4",[87,16.291,88,24.055]],["name/2-4",[]],["text/2-4",[]],["component/2-4",[]],["title/2-5",[89,28.837]],["name/2-5",[]],["text/2-5",[]],["component/2-5",[]],["title/2-6",[89,22.475,90,22.475]],["name/2-6",[]],["text/2-6",[]],["component/2-6",[]],["title/2-7",[89,22.475,91,17.08]],["name/2-7",[]],["text/2-7",[]],["component/2-7",[]],["title/2-8",[90,22.475,92,24.055]],["name/2-8",[]],["text/2-8",[]],["component/2-8",[]],["title/2-9",[93,27.1]],["name/2-9",[]],["text/2-9",[]],["component/2-9",[]],["title/2-10",[1,15.473,50,17.304,86,13.347]],["name/2-10",[]],["text/2-10",[]],["component/2-10",[]],["title/2-11",[94,28.837]],["name/2-11",[]],["text/2-11",[]],["component/2-11",[]],["title/2-12",[85,21.122,86,16.291]],["name/2-12",[]],["text/2-12",[]],["component/2-12",[]],["title/2-13",[87,20.902]],["name/2-13",[]],["text/2-13",[]],["component/2-13",[]],["title/2-14",[89,28.837]],["name/2-14",[]],["text/2-14",[]],["component/2-14",[]],["title/2-15",[95,33.298]],["name/2-15",[]],["text/2-15",[]],["component/2-15",[]],["title/2-16",[96,40.43]],["name/2-16",[]],["text/2-16",[]],["component/2-16",[]],["title/2",[91,17.08,97,19.938]],["name/2",[91,0.316,98,0.48]],["text/2",[0,0.317,1,2.13,2,2.67,3,2.362,4,0.243,5,0.243,8,2.146,9,1.134,15,0.294,18,3.791,21,1.863,22,0.558,24,2.118,28,2.793,30,0.258,32,2.869,37,0.346,42,1.329,46,0.346,47,3.699,49,0.258,50,2.057,52,0.86,59,0.317,60,0.385,62,2.285,63,2.285,64,1.508,66,0.294,68,1.195,70,0.948,72,1.134,73,0.346,77,1.396,80,0.231,81,0.626,82,1.296,83,1.429,84,2.048,85,1.508,86,2.59,87,2.754,88,1.861,89,2.811,90,4.049,91,3.13,92,0.558,93,1.508,94,3.971,95,0.317,96,0.385,97,2.315,98,1.309,99,0.939,100,3.246,101,1.506,102,3.144,103,0.444,104,0.521,105,2.708,106,2.023,107,3.46,108,2.438,109,2.612,110,2.048,111,0.317,112,2.146,113,0.843,114,0.657,115,0.294,116,0.444,117,0.444,118,0.843,119,0.843,120,0.385,121,0.843,122,0.317,123,3.095,124,1.329,125,1.533,126,1.195,127,0.346,128,0.444,129,0.444,130,0.346,131,0.444,132,0.444,133,0.444,134,0.86,135,3.193,136,1.841,137,2.008,138,0.317,139,0.385,140,2.535,141,0.444,142,0.444,143,0.385,144,1.309,145,1.643,146,0.444,147,0.385,148,0.939,149,0.346,150,0.745,151,0.317,152,2.941,153,1.195,154,0.939,155,2.362,156,1.506,157,0.444,158,1.095,159,0.317,160,0.385,161,0.444,162,0.317,163,0.317,164,0.558,165,0.444,166,0.294,167,0.346,168,0.346,169,1.508,170,0.602,171,0.385,172,0.385,173,0.843,174,0.558,175,0.731,176,0.385,177,0.385,178,0.49,179,2.998,180,0.346,181,0.444,182,0.444,183,0.745,184,2.285,185,0.657,186,3.013,187,1.643,188,0.444,189,0.317,190,0.385,191,0.385,192,0.444,193,1.044,194,0.385,195,0.385,196,0.948,197,2.362,198,0.294,199,0.385,200,0.444,201,1.396,202,0.346,203,0.346,204,0.346,205,1.841,206,3.014,207,1.429,208,0.939,209,1.533,210,4.836,211,1.533,212,0.444,213,0.444,214,0.444,215,3.444,216,4.006,217,3.013,218,3.55,219,0.843,220,0.843,221,4.304,222,0.731,223,0.444,224,1.204,225,0.657,226,0.294,227,0.385,228,0.385,229,0.444,230,0.385,231,0.843,232,0.444,233,0.444,234,0.317,235,0.444,236,0.346,237,0.346,238,0.385,239,0.346,240,0.444,241,0.444,242,0.444,243,1.833,244,1.329,245,2.99,246,3.201,247,0.444,248,2.636,249,3.201,250,1.015,251,1.044,252,1.204,253,0.939,254,1.533,255,0.317,256,0.385,257,3.095,258,0.444,259,0.346,260,2.793,261,0.385,262,5.197,263,0.731,264,0.731,265,0.843,266,0.939,267,3.655,268,5.011,269,0.444,270,1.195,271,0.444,272,0.444,273,3.326,274,0.731,275,0.294,276,0.444,277,0.346,278,0.317,279,0.385,280,0.444,281,0.346,282,3.444,283,1.533,284,3.375,285,2.152,286,1.751,287,0.843,288,0.843,289,0.385,290,0.444,291,0.385,292,3.013,293,0.346,294,0.346,295,0.602,296,1.994,297,1.828,298,0.843,299,1.589,300,2.25,301,2.612,302,2.362,303,1.589,304,1.204,305,0.385,306,0.843,307,1.841,308,2.775,309,0.346,310,1.841,311,2.595,312,2.108,313,2.595,314,3.972,315,2.595,316,1.643,317,1.429,318,3.375,319,0.731,320,0.602,321,1.204,322,0.843,323,0.843,324,0.843,325,1.044,326,1.044,327,1.044,328,0.843,329,0.243,330,0.521,331,2.108,332,1.589,333,1.095,334,0.444,335,0.346,336,1.204,337,1.533,338,1.533,339,0.843,340,2.595,341,1.833,342,1.833,343,1.533,344,1.429,345,1.195,346,1.828,347,1.329,348,1.533,349,1.828,350,1.195,351,1.329,352,0.843,353,0.731,354,0.444,355,0.444,356,0.731,357,0.385,358,0.385,359,0.385,360,0.444,361,0.657,362,0.385,363,0.444]],["component/2",[82,0.317]],["title/3-1",[364,25.953,365,31.511]],["name/3-1",[]],["text/3-1",[]],["component/3-1",[]],["title/3-2",[86,16.291,366,28.329]],["name/3-2",[]],["text/3-2",[]],["component/3-2",[]],["title/3-3",[1,15.473,50,17.304,86,13.347]],["name/3-3",[]],["text/3-3",[]],["component/3-3",[]],["title/3-4",[91,17.08,97,19.938]],["name/3-4",[]],["text/3-4",[]],["component/3-4",[]],["title/3-5",[86,16.291,367,25.953]],["name/3-5",[]],["text/3-5",[]],["component/3-5",[]],["title/3-6",[90,22.475,218,21.122]],["name/3-6",[]],["text/3-6",[]],["component/3-6",[]],["title/3-7",[102,19.938,135,24.055]],["name/3-7",[]],["text/3-7",[]],["component/3-7",[]],["title/3-8",[368,31.511,369,31.511]],["name/3-8",[]],["text/3-8",[]],["component/3-8",[]],["title/3-9",[370,25.953,371,28.329]],["name/3-9",[]],["text/3-9",[]],["component/3-9",[]],["title/3-10",[350,28.329,372,31.511]],["name/3-10",[]],["text/3-10",[]],["component/3-10",[]],["title/3-11",[87,16.291,373,31.511]],["name/3-11",[]],["text/3-11",[]],["component/3-11",[]],["title/3-12",[367,25.953,374,31.511]],["name/3-12",[]],["text/3-12",[]],["component/3-12",[]],["title/3-13",[87,20.902]],["name/3-13",[]],["text/3-13",[]],["component/3-13",[]],["title/3-14",[179,19.938,375,28.329]],["name/3-14",[]],["text/3-14",[]],["component/3-14",[]],["title/3-15",[25,16.691,107,14.656,179,13.834,376,25.216]],["name/3-15",[]],["text/3-15",[]],["component/3-15",[]],["title/3-16",[25,16.691,105,13.105,179,13.834,377,25.216]],["name/3-16",[]],["text/3-16",[]],["component/3-16",[]],["title/3-17",[378,31.511,379,28.329]],["name/3-17",[]],["text/3-17",[]],["component/3-17",[]],["title/3-18",[380,46.628]],["name/3-18",[]],["text/3-18",[]],["component/3-18",[]],["title/3-19",[286,12.71,381,23.001,382,21.869,383,15.617]],["name/3-19",[]],["text/3-19",[]],["component/3-19",[]],["title/3-20",[3,18.887,285,25.953]],["name/3-20",[]],["text/3-20",[]],["component/3-20",[]],["title/3-21",[94,28.837]],["name/3-21",[]],["text/3-21",[]],["component/3-21",[]],["title/3-22",[384,30.864]],["name/3-22",[]],["text/3-22",[]],["component/3-22",[]],["title/3-23",[164,30.864]],["name/3-23",[]],["text/3-23",[]],["component/3-23",[]],["title/3-24",[385,33.298]],["name/3-24",[]],["text/3-24",[]],["component/3-24",[]],["title/3",[386,31.511,387,31.511]],["name/3",[385,0.869]],["text/3",[1,2.579,2,2.568,3,1.969,4,0.427,5,0.427,6,0.516,7,1.409,8,0.829,9,1.22,11,0.675,13,0.556,14,0.882,15,0.516,17,0.556,18,2.041,20,0.516,21,3.069,22,1.884,23,0.607,24,1.616,25,0.944,27,2.706,28,0.516,30,0.453,31,2.775,33,0.675,37,1.112,38,0.607,41,1.903,45,1.616,47,2.884,49,0.453,50,2.795,52,0.556,59,0.556,63,0.556,64,2.346,65,0.944,66,0.516,69,0.556,70,0.482,72,1.22,75,1.237,80,0.405,81,0.741,82,1.74,83,0.607,85,0.829,86,2.618,87,2.653,88,0.516,89,1.51,90,3.611,91,3.015,92,0.944,93,1.419,94,1.76,95,1.409,97,2.871,98,2.033,99,0.607,100,0.556,101,0.556,102,1.756,104,0.482,105,2.098,106,1.112,107,1.419,112,2.041,114,0.607,122,0.556,123,1.409,126,0.607,134,2.285,135,2.118,140,3.069,143,0.675,144,2.508,148,0.607,149,1.112,150,0.482,151,1.019,152,1.884,153,1.112,154,1.112,156,1.743,158,0.556,160,1.237,162,1.409,163,1.019,164,3.617,166,0.944,167,0.607,169,0.453,170,0.556,174,2.672,175,0.675,178,1.147,179,2.336,180,0.607,183,0.882,184,2.285,191,0.675,193,1.237,194,0.675,198,0.944,201,0.944,202,0.607,218,2.041,221,1.538,225,0.607,226,0.516,237,0.607,239,0.607,245,0.607,246,2.117,256,0.675,257,0.556,259,0.607,260,1.884,261,0.675,262,0.675,264,0.675,267,2.324,270,2.219,274,1.711,275,0.516,278,1.019,281,0.607,285,0.556,286,2.795,289,1.711,296,1.306,299,0.675,300,1.711,301,0.675,307,0.607,309,1.112,310,0.607,316,4.486,319,0.675,320,1.019,329,1.927,330,1.51,335,1.112,346,1.237,350,4.415,351,0.675,353,1.711,356,1.237,361,0.607,364,2.033,365,1.237,366,2.953,367,2.285,368,3.5,369,3.867,370,2.285,371,1.112,372,3.693,373,0.675,374,3.045,378,0.675,379,1.538,381,1.884,383,1.019,384,2.118,385,0.556,386,0.675,387,1.237,388,0.675,389,0.556,390,1.711,391,2.494,392,0.779,393,0.779,394,2.117,395,0.779,396,0.779,397,0.779,398,0.779,399,0.675,400,1.237,401,0.779,402,0.779,403,0.779,404,0.779,405,2.882,406,0.779,407,0.779,408,2.441,409,3.512,410,2.441,411,0.779,412,0.779,413,3.185,414,0.779,415,1.427,416,0.779,417,0.779,418,2.468,419,2.441,420,0.779,421,0.779,422,1.711,423,0.779,424,0.779,425,1.237,426,0.779,427,0.675,428,2.441,429,0.779,430,0.607,431,0.779,432,0.779,433,0.779,434,1.973,435,1.973,436,0.779,437,1.711,438,1.427,439,0.607,440,0.675,441,0.779,442,1.427,443,0.779,444,1.538,445,0.556,446,1.427,447,0.779,448,0.607,449,0.675,450,0.779,451,0.779,452,0.779,453,0.675,454,0.675,455,0.779,456,0.779,457,0.779,458,0.779,459,0.779,460,0.779,461,0.779,462,0.779,463,0.779,464,0.779,465,0.779,466,0.779,467,0.779,468,0.779,469,0.675,470,0.779,471,0.779,472,0.779,473,0.779,474,0.779,475,0.779,476,0.779,477,0.779,478,0.779,479,0.779,480,0.779,481,0.779,482,0.779,483,0.779,484,0.779,485,0.779,486,0.779,487,0.779,488,0.779,489,0.779,490,0.675,491,0.779,492,0.607,493,1.711,494,1.237,495,1.427,496,0.607,497,0.675,498,1.112,499,1.973,500,0.779,501,0.556,502,1.237,503,0.779,504,1.237,505,0.675,506,0.779,507,0.675,508,0.779,509,0.779,510,0.779,511,0.779,512,0.779,513,0.779,514,0.556,515,0.779,516,0.779,517,0.779,518,0.779,519,1.237,520,0.779,521,0.779,522,1.427,523,1.973,524,0.779,525,1.427,526,0.779,527,1.427,528,0.779,529,0.779,530,0.779,531,0.779,532,0.944,533,0.779,534,1.427,535,0.779,536,0.779,537,0.779,538,0.779,539,1.711,540,2.846,541,0.779,542,0.779,543,0.779,544,0.779,545,0.779,546,0.779,547,0.675,548,0.779,549,0.779,550,0.779,551,0.779,552,2.846,553,2.775,554,1.427,555,0.779,556,0.675,557,1.538,558,1.427,559,2.117,560,1.237,561,0.779,562,0.779,563,0.516,564,0.675,565,0.779,566,0.779,567,0.675,568,0.675,569,0.675,570,0.779,571,0.779,572,0.779,573,0.675,574,0.779,575,0.779,576,0.779,577,0.779,578,0.779,579,0.779,580,0.675,581,0.779,582,1.711,583,0.779,584,0.779,585,1.427,586,1.427,587,0.779,588,0.779,589,1.973,590,0.779,591,0.779,592,0.779,593,0.779,594,0.779,595,0.779,596,0.779,597,0.779,598,0.779,599,0.779,600,1.112,601,0.453,602,0.779,603,0.779,604,0.779,605,0.779,606,0.779,607,0.779,608,0.779,609,0.779,610,0.779,611,0.779,612,0.779,613,0.779,614,0.779,615,0.675,616,0.556,617,0.779,618,0.607,619,0.779,620,0.675,621,0.779,622,0.779,623,0.779,624,0.779,625,0.675,626,0.779,627,0.675,628,1.427,629,0.779,630,0.779,631,0.779,632,0.675,633,0.607,634,1.427,635,0.779,636,0.779,637,0.779,638,0.779,639,0.779,640,0.779,641,1.973,642,0.779,643,1.427,644,0.556,645,0.779,646,0.779,647,0.779,648,0.779,649,0.779,650,0.779,651,0.779,652,0.779,653,0.779,654,0.675,655,0.779,656,0.675,657,1.973,658,1.973,659,1.427,660,1.711,661,0.607,662,1.427,663,1.237,664,0.779,665,1.427,666,1.427,667,0.779,668,1.237,669,0.675,670,0.779,671,0.779,672,0.779,673,0.779]],["component/3",[82,0.317]],["title/4",[674,36.347]],["name/4",[674,0.949]],["text/4",[2,2.156,4,2.517,5,2.517,49,4.205,80,2.384,81,4.081,82,1.409,87,2.057,93,2.667,104,2.837,115,3.037,154,6.078,156,5.167,286,4.205,601,2.667,674,3.576,675,3.978,676,4.588,677,4.588,678,3.978,679,7.235,680,7.235,681,4.588,682,3.978,683,3.978,684,3.978]],["component/4",[82,0.317]],["title/5-1",[2,17.08,685,28.329]],["name/5-1",[]],["text/5-1",[]],["component/5-1",[]],["title/5-2",[169,27.1]],["name/5-2",[]],["text/5-2",[]],["component/5-2",[]],["title/5-3",[329,19.938,330,22.475]],["name/5-3",[]],["text/5-3",[]],["component/5-3",[]],["title/5",[250,24.055,686,28.329]],["name/5",[250,0.444,686,0.523]],["text/5",[0,1.118,2,3.285,3,2.698,4,0.859,5,0.859,6,1.749,7,1.118,8,2.835,9,1.634,12,2.448,14,2.49,15,1.749,17,1.118,18,4.063,19,1.221,21,1.634,22,1.749,24,3.436,27,1.118,30,1.992,45,1.036,46,1.221,47,2.34,49,2.614,51,1.358,62,1.118,64,0.91,65,1.749,80,1.373,81,0.814,82,1.675,86,0.702,87,2.445,88,1.036,91,2.44,92,1.036,93,2.614,95,1.118,102,1.45,105,2.535,112,2.34,122,1.118,123,1.118,127,1.221,130,1.221,140,0.968,144,1.118,145,1.221,147,1.358,150,1.634,151,1.887,152,3.436,153,2.06,156,1.887,158,1.118,159,3.212,162,1.118,163,1.118,166,2.269,167,2.672,169,2.835,171,2.972,172,1.358,174,1.036,183,3.211,187,1.221,190,1.358,196,2.781,203,1.221,204,1.221,215,1.358,218,1.536,238,1.358,239,1.221,250,1.749,255,2.875,257,1.887,260,1.036,267,1.749,275,2.665,278,1.118,279,1.358,286,0.91,291,1.358,296,2.269,320,4.055,329,2.993,330,2.12,332,1.358,333,1.118,335,1.221,344,3.506,357,1.358,364,1.887,370,1.118,371,1.221,381,1.036,389,1.118,390,2.291,430,2.672,437,1.358,439,1.221,490,1.358,494,2.291,496,1.221,505,1.358,507,1.358,514,1.118,532,2.269,557,1.221,563,1.036,601,3.3,656,1.358,669,1.358,675,1.358,685,2.672,686,1.221,687,1.358,688,2.642,689,1.566,690,2.642,691,1.566,692,3.483,693,2.291,694,3.428,695,1.566,696,1.566,697,1.566,698,3.428,699,1.566,700,2.642,701,1.566,702,1.566,703,3.428,704,4.497,705,2.972,706,3.428,707,1.221,708,1.566,709,1.566,710,2.291,711,2.642,712,1.358,713,1.566,714,1.358,715,1.358,716,2.291,717,2.448,718,2.642,719,2.291,720,1.566,721,1.566,722,1.566,723,1.358,724,4.229,725,1.566,726,1.566,727,1.566,728,3.491,729,1.566,730,2.06,731,4.878,732,3.491,733,2.642,734,1.887,735,2.291,736,1.358,737,1.358,738,2.665,739,2.972,740,2.06,741,1.566,742,1.566,743,1.566,744,1.358,745,2.06,746,1.566,747,2.972,748,1.566,749,1.566,750,1.566,751,2.642,752,1.358,753,1.566,754,1.566,755,1.566,756,2.291,757,1.566,758,1.566,759,2.291,760,1.566,761,2.291,762,1.566,763,1.566,764,1.566,765,1.566,766,1.358,767,1.566,768,1.566,769,2.672,770,1.566,771,1.358,772,1.566,773,1.358,774,1.566,775,3.428,776,2.642,777,1.566,778,1.566,779,1.566,780,1.566,781,1.566,782,1.566,783,1.566,784,1.566,785,1.566,786,1.566,787,1.358,788,1.566,789,1.566,790,1.566,791,1.566,792,2.642,793,1.566,794,1.566,795,1.566]],["component/5",[82,0.317]],["title/6",[82,14.322]],["name/6",[567,1.055]],["text/6",[2,2.744,3,2.628,5,1.979,8,2.939,12,3.611,14,3.127,17,2.576,30,2.939,49,2.097,80,1.875,81,1.875,82,1.553,86,1.617,88,2.388,93,2.097,105,2.628,107,2.097,112,2.939,122,2.576,150,3.127,152,3.347,166,2.388,168,2.812,169,2.097,170,2.576,183,2.231,196,2.231,253,2.812,275,2.388,320,3.611,326,3.128,329,3.971,330,3.611,364,2.576,413,2.576,418,3.128,448,2.812,501,2.576,504,3.128,601,2.097,654,3.128,661,2.812,685,2.812,687,3.128,693,3.128,710,3.128,715,3.128,716,3.128,717,3.611,724,4.385,734,4.17,738,2.388,739,3.128,740,2.812,744,3.128,745,2.812,747,3.128,761,4.385,766,3.128,773,3.128,796,3.607,797,3.607,798,3.607,799,5.057,800,3.607,801,3.942,802,3.607,803,3.607,804,3.607,805,3.607,806,3.128,807,3.607,808,3.607,809,5.057,810,4.385,811,3.128,812,3.607,813,3.607,814,3.607,815,3.607,816,3.607,817,3.607,818,3.607,819,3.607,820,5.057,821,3.607,822,3.607,823,3.607,824,3.607,825,3.607,826,3.128,827,3.607,828,3.607]],["component/6",[82,0.317]],["title/7-1",[829,28.329,830,28.329]],["name/7-1",[]],["text/7-1",[]],["component/7-1",[]],["title/7-2",[105,18.887,178,21.122]],["name/7-2",[]],["text/7-2",[]],["component/7-2",[]],["title/7-3",[831,40.43]],["name/7-3",[]],["text/7-3",[]],["component/7-3",[]],["title/7-4",[618,36.347]],["name/7-4",[]],["text/7-4",[]],["component/7-4",[]],["title/7-5",[832,40.43]],["name/7-5",[]],["text/7-5",[]],["component/7-5",[]],["title/7-6",[616,33.298]],["name/7-6",[]],["text/7-6",[]],["component/7-6",[]],["title/7-7",[833,40.43]],["name/7-7",[]],["text/7-7",[]],["component/7-7",[]],["title/7-8",[82,14.322]],["name/7-8",[]],["text/7-8",[]],["component/7-8",[]],["title/7-9",[375,28.329,830,28.329]],["name/7-9",[]],["text/7-9",[]],["component/7-9",[]],["title/7",[178,27.1]],["name/7",[178,0.707]],["text/7",[1,2.298,2,1.27,3,1.693,4,0.337,5,0.337,6,0.407,8,0.357,18,4.015,20,1.065,24,0.407,25,0.407,28,0.758,30,0.666,32,0.758,41,0.479,47,3.336,50,1.172,52,0.439,55,0.993,59,0.439,64,1.172,66,0.758,70,0.995,71,0.479,72,2.297,77,2.59,80,0.836,81,0.595,82,2.023,85,3.945,86,0.904,87,0.275,91,2.078,94,0.708,97,3.028,98,1.44,100,0.818,101,0.439,102,1.305,104,0.995,105,1.556,107,1.571,112,1.571,115,1.065,130,0.479,134,1.149,136,0.479,137,4.549,138,3.262,140,0.38,144,1.149,150,0.708,158,0.439,159,0.439,163,0.818,164,1.335,166,0.407,168,0.479,169,1.571,174,0.407,178,4.086,179,3.449,180,0.479,183,1.247,184,1.44,185,1.254,187,0.893,189,1.149,196,0.38,198,0.407,201,2.711,205,4.829,206,0.818,207,3.666,208,3.666,218,0.935,226,0.407,228,0.533,234,0.439,248,0.818,259,0.479,260,1.575,266,1.254,268,0.533,270,0.893,275,0.407,277,0.479,282,0.533,285,0.818,286,2.733,293,0.479,294,1.254,295,0.818,296,0.758,308,3.699,329,2.037,344,0.479,345,2.539,347,0.533,359,2.063,366,0.893,367,0.439,375,0.893,379,0.479,381,3.48,383,3.262,384,0.407,389,0.439,391,0.479,399,4.385,400,2.063,405,0.439,413,1.149,440,0.533,445,0.818,449,0.993,469,1.749,492,0.479,496,0.479,497,0.533,501,0.439,514,1.149,532,0.407,563,0.407,580,0.533,582,0.533,600,0.479,601,0.935,615,2.596,616,3.883,618,4.363,625,3.699,627,0.993,632,0.533,633,0.893,644,0.818,663,3.552,678,3.031,682,1.395,683,0.533,684,0.533,692,0.439,707,0.479,712,0.533,717,0.439,732,0.533,734,0.818,738,1.789,752,0.993,769,2.539,801,0.479,829,0.893,830,0.893,831,3.96,832,3.22,833,1.749,834,0.614,835,0.614,836,0.614,837,0.614,838,0.614,839,0.614,840,0.614,841,0.614,842,0.614,843,2.379,844,1.609,845,1.145,846,4.422,847,1.609,848,2.017,849,1.145,850,1.609,851,1.145,852,1.609,853,1.145,854,1.145,855,1.145,856,3.496,857,0.614,858,0.614,859,0.614,860,0.614,861,1.395,862,1.855,863,1.609,864,1.395,865,4.567,866,3.714,867,0.614,868,2.994,869,1.145,870,0.614,871,0.614,872,0.533,873,0.614,874,2.063,875,1.145,876,0.614,877,1.145,878,0.614,879,1.609,880,3.031,881,1.395,882,0.614,883,0.614,884,2.379,885,2.017,886,0.614,887,0.614,888,2.017,889,0.614,890,1.749,891,5.437,892,3.496,893,3.913,894,3.714,895,1.145,896,2.017,897,0.614,898,1.609,899,1.609,900,2.017,901,0.614,902,1.609,903,2.379,904,0.614,905,1.145,906,0.614,907,0.614,908,0.533,909,0.993,910,0.614,911,0.614,912,0.614,913,1.145,914,2.017,915,0.614,916,0.614,917,0.614,918,1.145,919,0.614,920,0.614,921,2.017,922,2.379,923,0.614,924,0.614,925,0.614,926,0.614,927,2.703,928,0.614,929,0.614,930,1.609,931,0.993,932,1.145,933,2.379,934,1.145,935,0.614,936,0.614,937,0.614,938,0.614,939,0.614,940,0.614,941,1.145,942,1.609,943,0.614,944,0.614,945,0.614,946,0.614,947,0.614,948,0.614,949,0.614,950,0.614,951,0.614,952,0.614,953,0.614,954,0.614,955,0.614,956,0.614,957,0.614,958,0.614,959,0.614,960,0.614,961,0.614,962,0.614,963,0.614,964,0.614,965,0.614,966,0.614,967,0.614,968,0.614,969,0.614,970,0.614,971,0.614,972,0.614,973,0.614,974,0.614,975,0.614,976,0.614,977,0.614,978,0.614,979,0.614,980,1.145,981,0.614,982,0.614,983,0.614,984,1.145,985,0.614,986,0.614,987,1.145,988,0.614,989,1.145,990,0.614,991,0.993,992,1.609,993,2.017,994,1.145,995,1.609,996,1.145,997,1.145,998,0.614,999,0.614,1000,0.614,1001,1.145,1002,0.614,1003,0.533,1004,2.379,1005,0.614,1006,1.609,1007,0.614,1008,0.533,1009,0.614,1010,0.614,1011,0.614,1012,0.614,1013,1.145,1014,0.614,1015,1.145,1016,0.993,1017,0.533,1018,0.614,1019,0.614,1020,0.614,1021,0.614,1022,1.145,1023,0.614,1024,0.614,1025,0.614,1026,0.614,1027,2.017,1028,0.614,1029,1.145,1030,0.614,1031,0.614,1032,0.614,1033,2.344,1034,1.145,1035,2.703,1036,0.614,1037,1.145,1038,0.614,1039,0.614,1040,0.614,1041,0.614,1042,0.614,1043,0.614,1044,0.614,1045,0.614,1046,0.614,1047,0.614,1048,2.017,1049,1.145,1050,1.145,1051,0.533,1052,0.533,1053,0.614,1054,0.614,1055,0.614,1056,0.993,1057,0.614,1058,1.145,1059,0.614,1060,1.145,1061,0.614,1062,1.145,1063,0.614,1064,0.614,1065,0.614,1066,0.614,1067,1.145,1068,0.614,1069,0.614,1070,0.614,1071,0.614,1072,0.614,1073,0.614,1074,0.614,1075,0.614,1076,0.614,1077,0.614,1078,0.614,1079,0.533,1080,0.614,1081,0.614,1082,1.145,1083,0.614,1084,0.614,1085,0.614,1086,0.614,1087,0.614,1088,0.614]],["component/7",[82,0.317]],["title/8",[1089,36.347]],["name/8",[1089,0.949]],["text/8",[2,1.462,3,1.778,4,0.41,7,0.534,8,0.435,9,0.85,14,3.256,18,2.42,19,0.583,20,1.262,21,0.463,23,0.583,26,1.192,27,0.981,28,2.264,32,0.91,38,0.583,45,0.495,47,2.913,63,0.534,64,1.374,65,0.495,66,2.06,67,0.649,68,1.071,69,0.534,70,3.611,72,1.924,73,1.843,77,0.495,80,0.389,81,0.714,87,0.616,91,2.356,97,0.41,99,2.153,101,2.443,102,1.046,104,0.463,105,2.673,107,3.125,112,2.42,114,1.843,115,0.495,120,0.649,123,0.534,124,0.649,138,0.534,140,0.463,148,1.486,150,0.463,159,1.688,170,2.974,177,2.395,179,0.41,185,2.666,189,0.981,196,1.462,198,0.495,201,1.262,204,1.071,205,1.486,206,1.688,207,1.071,208,1.071,216,1.486,222,1.192,226,1.565,227,0.649,230,1.653,234,0.534,236,1.071,237,1.071,244,1.192,248,0.534,249,0.649,250,0.495,253,2.881,255,3.248,263,0.649,267,0.495,277,1.843,281,1.071,294,0.583,295,0.981,297,2.05,303,1.192,305,1.653,307,2.153,316,2.881,317,1.071,325,2.05,327,1.192,329,0.754,333,1.362,345,0.583,349,0.649,358,1.192,361,0.583,381,1.565,383,1.688,384,2.06,385,2.639,388,3.944,405,1.688,422,4.838,430,1.486,439,0.583,444,1.071,445,1.362,448,0.583,453,0.649,454,1.653,492,1.843,498,0.583,501,0.981,502,0.649,519,0.649,532,4.685,539,0.649,547,2.05,553,3.785,556,1.653,559,0.649,560,1.653,563,0.495,564,2.05,568,0.649,569,0.649,600,0.583,601,0.435,616,2.639,644,0.534,660,0.649,661,0.583,668,0.649,692,0.534,705,0.649,707,1.071,714,1.192,719,0.649,723,1.653,730,1.486,735,1.653,738,1.262,745,0.583,759,0.649,769,1.071,771,3.418,787,1.192,806,0.649,811,1.192,826,0.649,829,0.583,862,0.583,872,1.653,890,0.649,908,1.653,909,0.649,931,0.649,991,0.649,1003,1.192,1008,3.204,1016,0.649,1017,1.192,1089,5.465,1090,4.549,1091,3.111,1092,0.748,1093,2.364,1094,0.748,1095,0.748,1096,0.748,1097,4.366,1098,5.377,1099,2.364,1100,5.012,1101,5.143,1102,0.649,1103,1.907,1104,4.164,1105,5.264,1106,3.111,1107,1.374,1108,3.942,1109,2.762,1110,0.748,1111,0.748,1112,1.374,1113,1.374,1114,1.374,1115,3.695,1116,0.748,1117,1.374,1118,0.748,1119,0.748,1120,0.748,1121,0.748,1122,0.748,1123,0.748,1124,1.374,1125,3.111,1126,1.374,1127,3.111,1128,5.482,1129,1.192,1130,0.748,1131,0.748,1132,1.907,1133,1.192,1134,5.482,1135,1.374,1136,0.748,1137,0.748,1138,0.748,1139,0.748,1140,1.374,1141,0.748,1142,2.364,1143,1.374,1144,2.762,1145,2.762,1146,1.374,1147,0.748,1148,1.907,1149,0.748,1150,0.748,1151,0.748,1152,0.748,1153,0.748,1154,0.748,1155,1.907,1156,1.907,1157,1.374,1158,1.374,1159,2.364,1160,1.374,1161,1.374,1162,2.364,1163,0.748,1164,1.374,1165,1.374,1166,3.695,1167,2.364,1168,1.907,1169,0.748,1170,2.364,1171,0.748,1172,1.907,1173,1.907,1174,0.748,1175,0.748,1176,1.374,1177,1.374,1178,0.748,1179,0.748,1180,0.748,1181,0.748,1182,0.748,1183,0.748,1184,0.748,1185,3.111,1186,0.748,1187,0.748,1188,0.748,1189,0.748,1190,1.374,1191,1.907,1192,1.374,1193,0.748,1194,0.748,1195,0.748,1196,0.748,1197,0.748,1198,0.748,1199,0.748,1200,0.748,1201,1.374,1202,0.748,1203,2.364,1204,0.748,1205,0.748,1206,0.748,1207,0.748,1208,0.748,1209,0.748,1210,0.748,1211,0.748,1212,0.748,1213,1.374,1214,0.748,1215,0.748,1216,0.748,1217,1.907,1218,3.942,1219,1.907,1220,2.364,1221,1.374,1222,1.907,1223,0.748,1224,1.374,1225,1.374,1226,1.374,1227,1.374,1228,0.748,1229,1.374,1230,0.748,1231,3.111,1232,1.374,1233,0.748,1234,1.374,1235,1.374,1236,0.748,1237,0.748,1238,1.374,1239,3.111,1240,0.748,1241,0.748,1242,0.748,1243,1.374,1244,0.748,1245,1.374,1246,0.748,1247,0.748,1248,0.748,1249,0.748,1250,0.748,1251,0.748,1252,0.748,1253,1.374,1254,1.374,1255,1.907,1256,0.748,1257,0.748,1258,0.748,1259,0.748,1260,0.748,1261,0.748,1262,0.748,1263,1.374,1264,0.649,1265,0.748,1266,0.748,1267,0.748,1268,0.748,1269,0.748,1270,0.748,1271,1.374,1272,0.748,1273,0.748,1274,1.374,1275,1.374,1276,0.748,1277,0.748,1278,0.748,1279,1.374,1280,0.748,1281,0.748,1282,0.748,1283,1.374,1284,0.748,1285,0.748,1286,0.748,1287,0.748,1288,0.748,1289,0.748,1290,0.748,1291,0.748,1292,0.748,1293,1.374,1294,1.907,1295,0.748,1296,0.748,1297,0.748,1298,0.748,1299,0.748,1300,1.907,1301,1.907,1302,1.907,1303,0.748,1304,1.374,1305,0.748,1306,0.748,1307,0.748,1308,0.748,1309,0.748,1310,0.748,1311,0.748,1312,0.748,1313,0.748]],["component/8",[82,0.317]],["title/9-1",[82,9.145,91,13.993,97,16.335]],["name/9-1",[]],["text/9-1",[]],["component/9-1",[]],["title/9-2",[82,11.163,1314,31.511]],["name/9-2",[]],["text/9-2",[]],["component/9-2",[]],["title/9-3",[13,25.953,1314,31.511]],["name/9-3",[]],["text/9-3",[]],["component/9-3",[]],["title/9-4",[102,19.938,135,24.055]],["name/9-4",[]],["text/9-4",[]],["component/9-4",[]],["title/9-5",[137,25.953,1315,36.342]],["name/9-5",[]],["text/9-5",[]],["component/9-5",[]],["title/9-6",[82,11.163,85,21.122]],["name/9-6",[]],["text/9-6",[]],["component/9-6",[]],["title/9-7",[2,17.08,218,21.122]],["name/9-7",[]],["text/9-7",[]],["component/9-7",[]],["title/9",[13,25.953,111,25.953]],["name/9",[111,0.869]],["text/9",[1,2.904,2,2.702,3,2.264,4,0.698,5,0.698,6,1.942,9,2.456,12,1.58,14,2.169,15,0.842,18,3.911,20,0.842,21,0.787,22,1.464,30,1.705,32,0.842,45,3.098,47,3.02,49,0.74,50,1.286,62,2.095,64,2.038,65,1.464,69,1.58,70,2.169,71,0.992,72,0.787,77,0.842,80,0.661,81,1.822,82,2.103,85,2.038,86,2.505,87,2.845,90,2.169,91,3.522,92,1.464,93,0.74,94,2.895,97,3.37,100,3.111,102,3.155,104,1.815,105,2.988,106,2.287,107,2.72,108,1.103,109,1.103,110,1.103,111,0.909,112,2.72,115,1.942,126,4.356,127,2.287,134,2.504,135,2.629,136,2.734,137,4.463,138,2.504,139,1.103,140,1.368,145,0.992,149,4.356,151,0.909,152,0.842,162,0.909,164,1.464,169,1.705,174,2.321,176,1.103,178,0.74,179,1.61,183,2.895,184,2.095,189,1.58,195,1.103,196,0.787,198,0.842,199,1.103,201,2.884,202,2.287,203,0.992,206,1.58,210,3.777,216,2.287,218,1.705,221,0.992,225,0.992,226,0.842,234,0.909,236,2.287,245,2.287,248,0.909,251,1.918,255,1.58,257,0.909,260,2.321,266,2.287,267,0.842,273,2.544,278,0.909,286,1.286,293,1.724,295,0.909,296,2.629,309,0.992,310,0.992,317,2.287,329,1.924,330,1.815,333,0.909,362,1.103,370,0.909,384,0.842,389,1.58,391,0.992,394,1.103,405,1.58,413,1.58,425,1.103,427,1.918,444,0.992,445,0.909,493,1.103,498,0.992,514,1.58,532,0.842,557,0.992,563,1.464,573,1.103,601,0.74,620,1.103,633,0.992,644,0.909,692,1.58,717,0.909,728,1.918,730,0.992,734,0.909,736,1.103,737,1.103,738,1.464,740,2.734,756,1.103,801,0.992,810,1.918,861,1.103,862,0.992,864,1.918,874,1.918,880,1.103,881,1.103,1033,1.103,1051,1.103,1052,1.103,1056,1.103,1079,1.103,1102,2.544,1129,1.103,1133,1.103,1264,1.103,1316,1.273,1317,1.273,1318,1.273,1319,1.273,1320,1.273,1321,1.273,1322,2.212,1323,2.934,1324,1.273,1325,2.934,1326,5.196,1327,1.273,1328,1.273,1329,1.273,1330,1.273,1331,1.273,1332,1.273,1333,1.273,1334,1.273,1335,1.273,1336,2.934,1337,2.212,1338,2.212,1339,1.273,1340,1.273,1341,1.273,1342,1.273,1343,2.212,1344,1.273,1345,1.273,1346,1.273,1347,1.273,1348,1.273,1349,1.273,1350,1.273,1351,1.273,1352,1.273,1353,2.934,1354,1.273,1355,1.273,1356,1.273,1357,1.273,1358,1.273,1359,1.273,1360,1.273,1361,1.273,1362,1.273,1363,1.273,1364,1.273,1365,2.212,1366,2.212,1367,1.273,1368,1.273,1369,1.273,1370,2.212,1371,1.273,1372,2.212,1373,1.273,1374,2.212,1375,1.273,1376,1.273,1377,2.934,1378,3.507,1379,2.212,1380,1.273,1381,2.212,1382,1.273]],["component/9",[82,0.317]]],"invertedIndex":[["",{"_index":18,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["0",{"_index":340,"title":{},"name":{},"text":{"2":{}},"component":{}}],["0.0.1",{"_index":856,"title":{},"name":{},"text":{"7":{}},"component":{}}],["0.0.2",{"_index":843,"title":{},"name":{},"text":{"7":{}},"component":{}}],["1",{"_index":205,"title":{},"name":{},"text":{"2":{},"7":{},"8":{}},"component":{}}],["10",{"_index":841,"title":{},"name":{},"text":{"7":{}},"component":{}}],["10.2.1",{"_index":878,"title":{},"name":{},"text":{"7":{}},"component":{}}],["11",{"_index":857,"title":{},"name":{},"text":{"7":{}},"component":{}}],["160",{"_index":550,"title":{},"name":{},"text":{"3":{}},"component":{}}],["17",{"_index":1053,"title":{},"name":{},"text":{"7":{}},"component":{}}],["18",{"_index":858,"title":{},"name":{},"text":{"7":{}},"component":{}}],["19",{"_index":859,"title":{},"name":{},"text":{"7":{}},"component":{}}],["2",{"_index":207,"title":{},"name":{},"text":{"2":{},"7":{},"8":{}},"component":{}}],["2.0",{"_index":1093,"title":{},"name":{},"text":{"8":{}},"component":{}}],["2.7.0",{"_index":927,"title":{},"name":{},"text":{"7":{}},"component":{}}],["2.7.0.tar.xz",{"_index":914,"title":{},"name":{},"text":{"7":{}},"component":{}}],["2.7.0/cmakelists.txt",{"_index":924,"title":{},"name":{},"text":{"7":{}},"component":{}}],["2.7.0/duktapeconfig.cmake.in",{"_index":926,"title":{},"name":{},"text":{"7":{}},"component":{}}],["20",{"_index":845,"title":{},"name":{},"text":{"7":{}},"component":{}}],["2003",{"_index":1298,"title":{},"name":{},"text":{"8":{}},"component":{}}],["2004",{"_index":1095,"title":{},"name":{},"text":{"8":{}},"component":{}}],["2019",{"_index":1299,"title":{},"name":{},"text":{"8":{}},"component":{}}],["2022",{"_index":1054,"title":{},"name":{},"text":{"7":{}},"component":{}}],["2023",{"_index":855,"title":{},"name":{},"text":{"7":{}},"component":{}}],["2024",{"_index":842,"title":{},"name":{},"text":{"7":{}},"component":{}}],["24",{"_index":58,"title":{},"name":{},"text":{"1":{}},"component":{}}],["28",{"_index":860,"title":{},"name":{},"text":{"7":{}},"component":{}}],["3",{"_index":208,"title":{},"name":{},"text":{"2":{},"7":{},"8":{}},"component":{}}],["3.26",{"_index":886,"title":{},"name":{},"text":{"7":{}},"component":{}}],["37",{"_index":848,"title":{},"name":{},"text":{"7":{}},"component":{}}],["4",{"_index":345,"title":{},"name":{},"text":{"2":{},"7":{},"8":{}},"component":{}}],["4(a",{"_index":1276,"title":{},"name":{},"text":{"8":{}},"component":{}}],["4(b",{"_index":1277,"title":{},"name":{},"text":{"8":{}},"component":{}}],["4(d",{"_index":1278,"title":{},"name":{},"text":{"8":{}},"component":{}}],["5",{"_index":991,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["50",{"_index":1120,"title":{},"name":{},"text":{"8":{}},"component":{}}],["52",{"_index":851,"title":{},"name":{},"text":{"7":{}},"component":{}}],["6",{"_index":1210,"title":{},"name":{},"text":{"8":{}},"component":{}}],["7",{"_index":1216,"title":{},"name":{},"text":{"8":{}},"component":{}}],["7z",{"_index":835,"title":{},"name":{},"text":{"7":{}},"component":{}}],["8",{"_index":1230,"title":{},"name":{},"text":{"8":{}},"component":{}}],["80",{"_index":853,"title":{},"name":{},"text":{"7":{}},"component":{}}],["9",{"_index":1103,"title":{},"name":{},"text":{"8":{}},"component":{}}],["__implementation_defined__",{"_index":1376,"title":{},"name":{},"text":{"9":{}},"component":{}}],["_iterator_debug_level",{"_index":1018,"title":{},"name":{},"text":{"7":{}},"component":{}}],["a::b",{"_index":213,"title":{},"name":{},"text":{"2":{}},"component":{}}],["a::f",{"_index":214,"title":{},"name":{},"text":{"2":{}},"component":{}}],["a::g",{"_index":231,"title":{},"name":{},"text":{"2":{}},"component":{}}],["abil",{"_index":192,"title":{},"name":{},"text":{"2":{}},"component":{}}],["abov",{"_index":20,"title":{},"name":{},"text":{"1":{},"3":{},"7":{},"8":{},"9":{}},"component":{}}],["absolut",{"_index":1324,"title":{},"name":{},"text":{"9":{}},"component":{}}],["abstract",{"_index":586,"title":{},"name":{},"text":{"3":{}},"component":{}}],["accept",{"_index":277,"title":{},"name":{},"text":{"2":{},"7":{},"8":{}},"component":{}}],["access",{"_index":193,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["accompani",{"_index":640,"title":{},"name":{},"text":{"3":{}},"component":{}}],["accord",{"_index":440,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["accur",{"_index":720,"title":{},"name":{},"text":{"5":{}},"component":{}}],["achiev",{"_index":176,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["act",{"_index":305,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["action",{"_index":519,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["actionfactori",{"_index":513,"title":{},"name":{},"text":{"3":{}},"component":{}}],["activ",{"_index":821,"title":{},"name":{},"text":{"6":{}},"component":{}}],["ad",{"_index":289,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["add",{"_index":295,"title":{},"name":{},"text":{"2":{},"7":{},"8":{},"9":{}},"component":{}}],["add_library(my_project_mrdocs_target",{"_index":1360,"title":{},"name":{},"text":{"9":{}},"component":{}}],["addendum",{"_index":1198,"title":{},"name":{},"text":{"8":{}},"component":{}}],["addit",{"_index":101,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"8":{}},"component":{}}],["addition",{"_index":146,"title":{},"name":{},"text":{"2":{}},"component":{}}],["addon",{"_index":186,"title":{},"name":{},"text":{"2":{}},"component":{}}],["adjac",{"_index":704,"title":{},"name":{},"text":{"5":{}},"component":{}}],["adjust",{"_index":449,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["adoc",{"_index":110,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["advantag",{"_index":190,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["advis",{"_index":1251,"title":{},"name":{},"text":{"8":{}},"component":{}}],["affect",{"_index":407,"title":{},"name":{},"text":{"3":{}},"component":{}}],["ag",{"_index":29,"title":{},"name":{},"text":{"1":{}},"component":{}}],["against",{"_index":1177,"title":{},"name":{},"text":{"8":{}},"component":{}}],["agre",{"_index":1220,"title":{},"name":{},"text":{"8":{}},"component":{}}],["agreement",{"_index":1208,"title":{},"name":{},"text":{"8":{}},"component":{}}],["alia",{"_index":485,"title":{},"name":{},"text":{"3":{}},"component":{}}],["alias",{"_index":238,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["aliasinfo",{"_index":484,"title":{},"name":{},"text":{"3":{}},"component":{}}],["alleg",{"_index":1181,"title":{},"name":{},"text":{"8":{}},"component":{}}],["allianc",{"_index":825,"title":{},"name":{},"text":{"6":{}},"component":{}}],["allow",{"_index":187,"title":{},"name":{},"text":{"2":{},"5":{},"7":{}},"component":{}}],["alon",{"_index":1174,"title":{},"name":{},"text":{"8":{}},"component":{}}],["along",{"_index":1194,"title":{},"name":{},"text":{"8":{}},"component":{}}],["alongsid",{"_index":1197,"title":{},"name":{},"text":{"8":{}},"component":{}}],["alreadi",{"_index":941,"title":{},"name":{},"text":{"7":{}},"component":{}}],["altern",{"_index":46,"title":{},"name":{},"text":{"1":{},"2":{},"5":{}},"component":{}}],["alway",{"_index":257,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"9":{}},"component":{}}],["amount",{"_index":357,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["an_external_librari",{"_index":1364,"title":{},"name":{},"text":{"9":{}},"component":{}}],["and/or",{"_index":1255,"title":{},"name":{},"text":{"8":{}},"component":{}}],["annot",{"_index":1138,"title":{},"name":{},"text":{"8":{}},"component":{}}],["anonym",{"_index":313,"title":{},"name":{},"text":{"2":{}},"component":{}}],["antora",{"_index":608,"title":{},"name":{},"text":{"3":{}},"component":{}}],["anywher",{"_index":873,"title":{},"name":{},"text":{"7":{}},"component":{}}],["apach",{"_index":1091,"title":{},"name":{},"text":{"8":{}},"component":{}}],["api",{"_index":320,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{}},"component":{}}],["appear",{"_index":1196,"title":{},"name":{},"text":{"8":{}},"component":{}}],["append",{"_index":1340,"title":{},"name":{},"text":{"9":{}},"component":{}}],["appendix",{"_index":1135,"title":{},"name":{},"text":{"8":{}},"component":{}}],["appli",{"_index":325,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["applic",{"_index":430,"title":{},"name":{},"text":{"3":{},"5":{},"8":{}},"component":{}}],["appropri",{"_index":1017,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["archiv",{"_index":1268,"title":{},"name":{},"text":{"8":{}},"component":{}}],["argument",{"_index":270,"title":{},"name":{},"text":{"2":{},"3":{},"7":{}},"component":{}}],["aris",{"_index":1243,"title":{},"name":{},"text":{"8":{}},"component":{}}],["arrow_back",{"_index":4,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["arrow_forward",{"_index":5,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"9":{}},"component":{}}],["artifact",{"_index":1334,"title":{},"name":{},"text":{"9":{}},"component":{}}],["asciidoc",{"_index":154,"title":{},"name":{},"text":{"2":{},"3":{},"4":{}},"component":{}}],["assert",{"_index":1261,"title":{},"name":{},"text":{"8":{}},"component":{}}],["assign",{"_index":555,"title":{},"name":{},"text":{"3":{}},"component":{}}],["associ",{"_index":1229,"title":{},"name":{},"text":{"8":{}},"component":{}}],["assum",{"_index":862,"title":{},"name":{},"text":{"7":{},"8":{},"9":{}},"component":{}}],["ast",{"_index":350,"title":{"3-10":{}},"name":{},"text":{"2":{},"3":{}},"component":{}}],["astact",{"_index":527,"title":{},"name":{},"text":{"3":{}},"component":{}}],["astactionfactori",{"_index":528,"title":{},"name":{},"text":{"3":{}},"component":{}}],["astvisitor",{"_index":534,"title":{},"name":{},"text":{"3":{}},"component":{}}],["astvisitor::build",{"_index":535,"title":{},"name":{},"text":{"3":{}},"component":{}}],["astvisitor::traversedecl",{"_index":537,"title":{},"name":{},"text":{"3":{}},"component":{}}],["attach",{"_index":714,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["attempt",{"_index":167,"title":{},"name":{},"text":{"2":{},"3":{},"5":{}},"component":{}}],["attribut",{"_index":564,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["author",{"_index":1107,"title":{},"name":{},"text":{"8":{}},"component":{}}],["authorship",{"_index":1132,"title":{},"name":{},"text":{"8":{}},"component":{}}],["autocomplet",{"_index":117,"title":{},"name":{},"text":{"2":{}},"component":{}}],["autom",{"_index":685,"title":{"5-1":{}},"name":{},"text":{"5":{},"6":{}},"component":{}}],["automat",{"_index":728,"title":{},"name":{},"text":{"5":{},"9":{}},"component":{}}],["auxiliari",{"_index":1341,"title":{},"name":{},"text":{"9":{}},"component":{}}],["avail",{"_index":115,"title":{},"name":{},"text":{"2":{},"4":{},"7":{},"8":{},"9":{}},"component":{}}],["b",{"_index":77,"title":{},"name":{},"text":{"1":{},"2":{},"7":{},"8":{},"9":{}},"component":{}}],["back",{"_index":632,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["bad.xml",{"_index":653,"title":{},"name":{},"text":{"3":{}},"component":{}}],["base",{"_index":123,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"8":{}},"component":{}}],["basi",{"_index":1221,"title":{},"name":{},"text":{"8":{}},"component":{}}],["basic",{"_index":13,"title":{"9":{},"9-3":{}},"name":{},"text":{"1":{},"3":{}},"component":{}}],["be",{"_index":1079,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["becom",{"_index":756,"title":{},"name":{},"text":{"5":{},"9":{}},"component":{}}],["befor",{"_index":669,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["begin",{"_index":543,"title":{},"name":{},"text":{"3":{}},"component":{}}],["behalf",{"_index":1145,"title":{},"name":{},"text":{"8":{}},"component":{}}],["behavior",{"_index":259,"title":{},"name":{},"text":{"2":{},"3":{},"7":{}},"component":{}}],["behind",{"_index":765,"title":{},"name":{},"text":{"5":{}},"component":{}}],["below",{"_index":249,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["benefici",{"_index":1123,"title":{},"name":{},"text":{"8":{}},"component":{}}],["best",{"_index":698,"title":{},"name":{},"text":{"5":{}},"component":{}}],["better",{"_index":816,"title":{},"name":{},"text":{"6":{}},"component":{}}],["between",{"_index":17,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"6":{}},"component":{}}],["biggest",{"_index":722,"title":{},"name":{},"text":{"5":{}},"component":{}}],["bin",{"_index":1083,"title":{},"name":{},"text":{"7":{}},"component":{}}],["binari",{"_index":829,"title":{"7-1":{}},"name":{},"text":{"7":{},"8":{}},"component":{}}],["bind",{"_index":120,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["bit",{"_index":551,"title":{},"name":{},"text":{"3":{}},"component":{}}],["block",{"_index":16,"title":{},"name":{},"text":{"1":{}},"component":{}}],["boilerpl",{"_index":1262,"title":{},"name":{},"text":{"8":{}},"component":{}}],["bold",{"_index":78,"title":{},"name":{},"text":{"1":{}},"component":{}}],["boolean",{"_index":284,"title":{},"name":{},"text":{"2":{}},"component":{}}],["boost.scop",{"_index":681,"title":{},"name":{},"text":{"4":{}},"component":{}}],["boost.url",{"_index":680,"title":{},"name":{},"text":{"4":{}},"component":{}}],["bootstrap",{"_index":896,"title":{},"name":{},"text":{"7":{}},"component":{}}],["both",{"_index":59,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"7":{}},"component":{}}],["bracket",{"_index":1263,"title":{},"name":{},"text":{"8":{}},"component":{}}],["branch",{"_index":877,"title":{},"name":{},"text":{"7":{}},"component":{}}],["brief",{"_index":60,"title":{},"name":{},"text":{"1":{},"2":{}},"component":{}}],["bug",{"_index":657,"title":{},"name":{},"text":{"3":{}},"component":{}}],["build",{"_index":85,"title":{"2-2":{},"2-12":{},"9-6":{}},"name":{},"text":{"2":{},"3":{},"7":{},"9":{}},"component":{}}],["build_testing=on",{"_index":1078,"title":{},"name":{},"text":{"7":{}},"component":{}}],["building_test=off",{"_index":1339,"title":{},"name":{},"text":{"9":{}},"component":{}}],["built",{"_index":554,"title":{},"name":{},"text":{"3":{}},"component":{}}],["bundl",{"_index":620,"title":{},"name":{},"text":{"3":{},"9":{}},"component":{}}],["c",{"_index":329,"title":{"5-3":{}},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["call",{"_index":428,"title":{},"name":{},"text":{"3":{}},"component":{}}],["capabl",{"_index":629,"title":{},"name":{},"text":{"3":{}},"component":{}}],["carri",{"_index":1188,"title":{},"name":{},"text":{"8":{}},"component":{}}],["case",{"_index":278,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"9":{}},"component":{}}],["categori",{"_index":495,"title":{},"name":{},"text":{"3":{}},"component":{}}],["caus",{"_index":1113,"title":{},"name":{},"text":{"8":{}},"component":{}}],["causal",{"_index":718,"title":{},"name":{},"text":{"5":{}},"component":{}}],["cc=\"./install/bin/clang",{"_index":1031,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cd",{"_index":399,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["cd[compil",{"_index":401,"title":{},"name":{},"text":{"3":{}},"component":{}}],["cf[configur",{"_index":397,"title":{},"name":{},"text":{"3":{}},"component":{}}],["challeng",{"_index":687,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["champaign",{"_index":1302,"title":{},"name":{},"text":{"8":{}},"component":{}}],["chang",{"_index":759,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["channel",{"_index":670,"title":{},"name":{},"text":{"3":{}},"component":{}}],["charact",{"_index":1242,"title":{},"name":{},"text":{"8":{}},"component":{}}],["charg",{"_index":1159,"title":{},"name":{},"text":{"8":{}},"component":{}}],["check",{"_index":298,"title":{},"name":{},"text":{"2":{}},"component":{}}],["checkout",{"_index":989,"title":{},"name":{},"text":{"7":{}},"component":{}}],["choos",{"_index":1003,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["ci",{"_index":677,"title":{},"name":{},"text":{"4":{}},"component":{}}],["cl[command",{"_index":396,"title":{},"name":{},"text":{"3":{}},"component":{}}],["claim",{"_index":1170,"title":{},"name":{},"text":{"8":{}},"component":{}}],["clang",{"_index":370,"title":{"3-9":{}},"name":{},"text":{"3":{},"5":{},"9":{}},"component":{}}],["clang::mrdocs::configimpl",{"_index":423,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clang::mrdocs::corpusimpl::build",{"_index":524,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clang::mrdocs::fin",{"_index":570,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clang::mrdocs::loadconfig",{"_index":420,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clang::tooling::clangtool",{"_index":509,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clang::tooling::clangtool::run",{"_index":516,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clang::tooling::frontendactionfactori",{"_index":520,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clang::tooling::toolact",{"_index":518,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clang::translationunitdecl",{"_index":538,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clangtool",{"_index":508,"title":{},"name":{},"text":{"3":{}},"component":{}}],["clang’",{"_index":788,"title":{},"name":{},"text":{"5":{}},"component":{}}],["class",{"_index":21,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"8":{},"9":{}},"component":{}}],["clearli",{"_index":1291,"title":{},"name":{},"text":{"8":{}},"component":{}}],["clone",{"_index":865,"title":{},"name":{},"text":{"7":{}},"component":{}}],["close",{"_index":709,"title":{},"name":{},"text":{"5":{}},"component":{}}],["cmake",{"_index":137,"title":{"9-5":{}},"name":{},"text":{"2":{},"7":{},"9":{}},"component":{}}],["cmake\\n\\n",{"_index":1354,"title":{},"name":{},"text":{"9":{}},"component":{}}],["cmake_build_typ",{"_index":1010,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_build_type=relwithdebinfo",{"_index":1063,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_c_compil",{"_index":1075,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_configuration_typ",{"_index":1009,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_configuration_types=\"relwithdebinfo",{"_index":1055,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_current_binary_dir}/all_headers.cpp",{"_index":1351,"title":{},"name":{},"text":{"9":{}},"component":{}}],["cmake_cxx_compil",{"_index":1076,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_cxx_flag",{"_index":1014,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_cxx_flags=\"/o2",{"_index":1011,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_export_compile_command",{"_index":1327,"title":{},"name":{},"text":{"9":{}},"component":{}}],["cmake_export_compile_commands=on",{"_index":1056,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["cmake_gener",{"_index":1070,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_generator_platform",{"_index":1071,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_install_prefix",{"_index":1074,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_root",{"_index":280,"title":{},"name":{},"text":{"2":{}},"component":{}}],["cmake_source_dir}/includ",{"_index":1346,"title":{},"name":{},"text":{"9":{}},"component":{}}],["cmake_toolchain_fil",{"_index":1069,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_toolchain_file=\"$(pwd)/third",{"_index":1066,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake_toolchain_file=\"%cd%/third",{"_index":1061,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmakelists.txt",{"_index":136,"title":{},"name":{},"text":{"2":{},"7":{},"9":{}},"component":{}}],["cmakepresets.json",{"_index":995,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmakeuserpresets.json",{"_index":996,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmakeuserpresets.json.exampl",{"_index":1072,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake’",{"_index":887,"title":{},"name":{},"text":{"7":{}},"component":{}}],["code",{"_index":3,"title":{"3-20":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["codebas",{"_index":364,"title":{"3-1":{}},"name":{},"text":{"3":{},"5":{},"6":{}},"component":{}}],["combin",{"_index":114,"title":{},"name":{},"text":{"2":{},"3":{},"8":{}},"component":{}}],["come",{"_index":143,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["command",{"_index":1,"title":{"1":{},"2-10":{},"3-3":{}},"name":{"1":{}},"text":{"1":{},"2":{},"3":{},"7":{},"9":{}},"component":{}}],["comment",{"_index":7,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"8":{}},"component":{}}],["commerci",{"_index":1250,"title":{},"name":{},"text":{"8":{}},"component":{}}],["commit",{"_index":992,"title":{},"name":{},"text":{"7":{}},"component":{}}],["common",{"_index":45,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"8":{},"9":{}},"component":{}}],["commun",{"_index":1148,"title":{},"name":{},"text":{"8":{}},"component":{}}],["compar",{"_index":647,"title":{},"name":{},"text":{"3":{}},"component":{}}],["compat",{"_index":131,"title":{},"name":{},"text":{"2":{}},"component":{}}],["compet",{"_index":1281,"title":{},"name":{},"text":{"8":{}},"component":{}}],["compil",{"_index":102,"title":{"3-7":{},"9-4":{}},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["compilation_database.json",{"_index":265,"title":{},"name":{},"text":{"2":{}},"component":{}}],["compilationdatabas",{"_index":438,"title":{},"name":{},"text":{"3":{}},"component":{}}],["compile_commands.json",{"_index":1326,"title":{},"name":{},"text":{"9":{}},"component":{}}],["complet",{"_index":541,"title":{},"name":{},"text":{"3":{}},"component":{}}],["complex",{"_index":171,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["compli",{"_index":1201,"title":{},"name":{},"text":{"8":{}},"component":{}}],["complianc",{"_index":1270,"title":{},"name":{},"text":{"8":{}},"component":{}}],["comprehend",{"_index":809,"title":{},"name":{},"text":{"6":{}},"component":{}}],["comprehens",{"_index":715,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["comput",{"_index":1248,"title":{},"name":{},"text":{"8":{}},"component":{}}],["concept",{"_index":490,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["conceptinfo",{"_index":489,"title":{},"name":{},"text":{"3":{}},"component":{}}],["concurr",{"_index":336,"title":{},"name":{},"text":{"2":{}},"component":{}}],["condit",{"_index":1098,"title":{},"name":{},"text":{"8":{}},"component":{}}],["config",{"_index":98,"title":{},"name":{"2":{}},"text":{"2":{},"3":{},"7":{}},"component":{}}],["configimpl",{"_index":432,"title":{},"name":{},"text":{"3":{}},"component":{}}],["configur",{"_index":97,"title":{"2":{},"3-4":{},"9-1":{}},"name":{},"text":{"2":{},"3":{},"7":{},"8":{},"9":{}},"component":{}}],["conflict",{"_index":1284,"title":{},"name":{},"text":{"8":{}},"component":{}}],["connect",{"_index":719,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["consequenti",{"_index":1241,"title":{},"name":{},"text":{"8":{}},"component":{}}],["consid",{"_index":319,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["consist",{"_index":234,"title":{},"name":{},"text":{"2":{},"7":{},"8":{},"9":{}},"component":{}}],["conspicu",{"_index":1152,"title":{},"name":{},"text":{"8":{}},"component":{}}],["const",{"_index":44,"title":{},"name":{},"text":{"1":{}},"component":{}}],["constant",{"_index":51,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["constexpr",{"_index":56,"title":{},"name":{},"text":{"1":{}},"component":{}}],["constitut",{"_index":1182,"title":{},"name":{},"text":{"8":{}},"component":{}}],["constru",{"_index":1199,"title":{},"name":{},"text":{"8":{}},"component":{}}],["construct",{"_index":330,"title":{"5-3":{}},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"9":{}},"component":{}}],["consum",{"_index":779,"title":{},"name":{},"text":{"5":{}},"component":{}}],["contain",{"_index":64,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["content",{"_index":769,"title":{},"name":{},"text":{"5":{},"7":{},"8":{}},"component":{}}],["continu",{"_index":347,"title":{},"name":{},"text":{"2":{},"7":{}},"component":{}}],["contract",{"_index":730,"title":{},"name":{},"text":{"5":{},"8":{},"9":{}},"component":{}}],["contribut",{"_index":385,"title":{"3-24":{}},"name":{"3":{}},"text":{"3":{},"8":{}},"component":{}}],["contribution(",{"_index":1173,"title":{},"name":{},"text":{"8":{}},"component":{}}],["contributor",{"_index":388,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["contributori",{"_index":1183,"title":{},"name":{},"text":{"8":{}},"component":{}}],["contributor’",{"_index":386,"title":{"3":{}},"name":{},"text":{"3":{}},"component":{}}],["control",{"_index":99,"title":{},"name":{},"text":{"2":{},"3":{},"8":{}},"component":{}}],["conveni",{"_index":1073,"title":{},"name":{},"text":{"7":{}},"component":{}}],["convent",{"_index":1087,"title":{},"name":{},"text":{"7":{}},"component":{}}],["convers",{"_index":1130,"title":{},"name":{},"text":{"8":{}},"component":{}}],["convert",{"_index":160,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["copi",{"_index":185,"title":{},"name":{},"text":{"2":{},"7":{},"8":{}},"component":{}}],["copyright",{"_index":1105,"title":{},"name":{},"text":{"8":{}},"component":{}}],["core",{"_index":582,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["coroutin",{"_index":795,"title":{},"name":{},"text":{"5":{}},"component":{}}],["corpu",{"_index":374,"title":{"3-12":{}},"name":{},"text":{"3":{}},"component":{}}],["corpus::travers",{"_index":575,"title":{},"name":{},"text":{"3":{}},"component":{}}],["corpus::visitor",{"_index":576,"title":{},"name":{},"text":{"3":{}},"component":{}}],["corpusimpl::build",{"_index":558,"title":{},"name":{},"text":{"3":{}},"component":{}}],["correctli",{"_index":348,"title":{},"name":{},"text":{"2":{}},"component":{}}],["cost",{"_index":505,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["counterclaim",{"_index":1179,"title":{},"name":{},"text":{"8":{}},"component":{}}],["court",{"_index":1280,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cp",{"_index":921,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cpp",{"_index":652,"title":{},"name":{},"text":{"3":{}},"component":{}}],["cpplang",{"_index":671,"title":{},"name":{},"text":{"3":{}},"component":{}}],["cppreference.com",{"_index":750,"title":{},"name":{},"text":{"5":{}},"component":{}}],["creat",{"_index":184,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"9":{}},"component":{}}],["cross",{"_index":1178,"title":{},"name":{},"text":{"8":{}},"component":{}}],["crucial",{"_index":1028,"title":{},"name":{},"text":{"7":{}},"component":{}}],["curl",{"_index":916,"title":{},"name":{},"text":{"7":{}},"component":{}}],["current",{"_index":456,"title":{},"name":{},"text":{"3":{}},"component":{}}],["custom",{"_index":169,"title":{"5-2":{}},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{},"9":{}},"component":{}}],["customari",{"_index":1214,"title":{},"name":{},"text":{"8":{}},"component":{}}],["customiz",{"_index":773,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["cxx",{"_index":1048,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cxx=\"./install/bin/clang",{"_index":1030,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cxxabi",{"_index":1049,"title":{},"name":{},"text":{"7":{}},"component":{}}],["d",{"_index":138,"title":{},"name":{},"text":{"2":{},"7":{},"8":{},"9":{}},"component":{}}],["d(document",{"_index":404,"title":{},"name":{},"text":{"3":{}},"component":{}}],["d__byte_order__=__order_little_endian__",{"_index":1046,"title":{},"name":{},"text":{"7":{}},"component":{}}],["d__order_big_endian__=4321",{"_index":1045,"title":{},"name":{},"text":{"7":{}},"component":{}}],["d__order_little_endian__=1234",{"_index":1044,"title":{},"name":{},"text":{"7":{}},"component":{}}],["damag",{"_index":1239,"title":{},"name":{},"text":{"8":{}},"component":{}}],["databas",{"_index":135,"title":{"3-7":{},"9-4":{}},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["database=../build/compile_commands.json",{"_index":1331,"title":{},"name":{},"text":{"9":{}},"component":{}}],["database=../cmakelists.txt",{"_index":1337,"title":{},"name":{},"text":{"9":{}},"component":{}}],["date",{"_index":745,"title":{},"name":{},"text":{"5":{},"6":{},"8":{}},"component":{}}],["day",{"_index":54,"title":{},"name":{},"text":{"1":{}},"component":{}}],["dcmake_build_type=releas",{"_index":881,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["dcmake_cxx_compiler=clang",{"_index":1329,"title":{},"name":{},"text":{"9":{}},"component":{}}],["dcmake_cxx_flag",{"_index":1043,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dcmake_export_compile_commands=on",{"_index":1328,"title":{},"name":{},"text":{"9":{}},"component":{}}],["dcmake_install_prefix=\"$(pwd)/instal",{"_index":1037,"title":{},"name":{},"text":{"7":{}},"component":{}}],["deal",{"_index":787,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["debug",{"_index":359,"title":{},"name":{},"text":{"2":{},"7":{}},"component":{}}],["debwithopt",{"_index":1007,"title":{},"name":{},"text":{"7":{}},"component":{}}],["decemb",{"_index":854,"title":{},"name":{},"text":{"7":{}},"component":{}}],["declar",{"_index":24,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"7":{}},"component":{}}],["decltyp",{"_index":240,"title":{},"name":{},"text":{"2":{}},"component":{}}],["deduct",{"_index":482,"title":{},"name":{},"text":{"3":{}},"component":{}}],["deem",{"_index":1287,"title":{},"name":{},"text":{"8":{}},"component":{}}],["default",{"_index":262,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["defend",{"_index":1257,"title":{},"name":{},"text":{"8":{}},"component":{}}],["defin",{"_index":140,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["definit",{"_index":148,"title":{},"name":{},"text":{"2":{},"3":{},"8":{}},"component":{}}],["deliber",{"_index":1236,"title":{},"name":{},"text":{"8":{}},"component":{}}],["demand",{"_index":827,"title":{},"name":{},"text":{"6":{}},"component":{}}],["demo",{"_index":674,"title":{"4":{}},"name":{"4":{}},"text":{"4":{}},"component":{}}],["depend",{"_index":308,"title":{},"name":{},"text":{"2":{},"7":{}},"component":{}}],["depth",{"_index":879,"title":{},"name":{},"text":{"7":{}},"component":{}}],["deriv",{"_index":422,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["describ",{"_index":1215,"title":{},"name":{},"text":{"8":{}},"component":{}}],["descript",{"_index":63,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"8":{}},"component":{}}],["design",{"_index":250,"title":{"5":{}},"name":{"5":{}},"text":{"2":{},"5":{},"8":{}},"component":{}}],["desir",{"_index":175,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["detail",{"_index":62,"title":{},"name":{},"text":{"1":{},"2":{},"5":{},"9":{}},"component":{}}],["detect",{"_index":331,"title":{},"name":{},"text":{"2":{}},"component":{}}],["determin",{"_index":317,"title":{},"name":{},"text":{"2":{},"8":{},"9":{}},"component":{}}],["determinist",{"_index":1026,"title":{},"name":{},"text":{"7":{}},"component":{}}],["develop",{"_index":601,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["differ",{"_index":444,"title":{},"name":{},"text":{"3":{},"8":{},"9":{}},"component":{}}],["difficult",{"_index":727,"title":{},"name":{},"text":{"5":{}},"component":{}}],["difficulti",{"_index":763,"title":{},"name":{},"text":{"5":{}},"component":{}}],["direct",{"_index":492,"title":{},"name":{},"text":{"3":{},"7":{},"8":{}},"component":{}}],["directli",{"_index":162,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"9":{}},"component":{}}],["directori",{"_index":179,"title":{"3-14":{},"3-15":{},"3-16":{}},"name":{},"text":{"2":{},"3":{},"7":{},"8":{},"9":{}},"component":{}}],["disabl",{"_index":940,"title":{},"name":{},"text":{"7":{}},"component":{}}],["disclaim",{"_index":1217,"title":{},"name":{},"text":{"8":{}},"component":{}}],["discrep",{"_index":805,"title":{},"name":{},"text":{"6":{}},"component":{}}],["discuss",{"_index":668,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["display",{"_index":358,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["distribut",{"_index":1100,"title":{},"name":{},"text":{"8":{}},"component":{}}],["diverg",{"_index":729,"title":{},"name":{},"text":{"5":{}},"component":{}}],["divers",{"_index":822,"title":{},"name":{},"text":{"6":{}},"component":{}}],["divid",{"_index":392,"title":{},"name":{},"text":{"3":{}},"component":{}}],["dlibcxx_enable_shared=off",{"_index":1041,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibcxx_no_vcruntime=on",{"_index":1042,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibcxxabi_enable_shared=off",{"_index":1039,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibcxxabi_enable_static=on",{"_index":1040,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibcxxabi_use_llvm_unwinder=off",{"_index":1038,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_c14n=on",{"_index":956,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_catalog=on",{"_index":957,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_debug=on",{"_index":958,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_ftp=off",{"_index":947,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_html=on",{"_index":955,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_http=off",{"_index":948,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_iconv=off",{"_index":949,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_icu=off",{"_index":953,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_iso8859x=on",{"_index":959,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_legacy=off",{"_index":950,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_lzma=off",{"_index":951,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_mem_debug=off",{"_index":960,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_modules=on",{"_index":961,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_output=on",{"_index":962,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_pattern=on",{"_index":963,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_programs=on",{"_index":946,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_push=on",{"_index":964,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_python=off",{"_index":965,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_reader=on",{"_index":966,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_regexps=on",{"_index":967,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_sax1=on",{"_index":968,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_schemas=on",{"_index":969,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_schematron=on",{"_index":970,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_tests=off",{"_index":954,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_thread_alloc=off",{"_index":972,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_threads=on",{"_index":971,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_tree=on",{"_index":973,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_valid=on",{"_index":974,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_writer=on",{"_index":975,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_xinclude=on",{"_index":976,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_xpath=on",{"_index":977,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_xptr=on",{"_index":978,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dlibxml2_with_zlib=off",{"_index":952,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dllvm_enable_runtimes=\"libcxx;libcxxabi",{"_index":1036,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dllvm_enable_runtimes=\"libcxx;libcxxabi;libunwind",{"_index":1047,"title":{},"name":{},"text":{"7":{}},"component":{}}],["doc",{"_index":6,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"7":{},"9":{}},"component":{}}],["docs/extensions—antora",{"_index":611,"title":{},"name":{},"text":{"3":{}},"component":{}}],["docs/modules/—th",{"_index":610,"title":{},"name":{},"text":{"3":{}},"component":{}}],["docs/refer",{"_index":1368,"title":{},"name":{},"text":{"9":{}},"component":{}}],["docs/—document",{"_index":609,"title":{},"name":{},"text":{"3":{}},"component":{}}],["docs—document",{"_index":380,"title":{"3-18":{}},"name":{},"text":{},"component":{}}],["document",{"_index":2,"title":{"5-1":{},"9-7":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["doesn’t",{"_index":1380,"title":{},"name":{},"text":{"9":{}},"component":{}}],["dogenerateact",{"_index":410,"title":{},"name":{},"text":{"3":{}},"component":{}}],["don't",{"_index":1264,"title":{},"name":{},"text":{"8":{},"9":{}},"component":{}}],["done",{"_index":533,"title":{},"name":{},"text":{"3":{}},"component":{}}],["don’t",{"_index":572,"title":{},"name":{},"text":{"3":{}},"component":{}}],["dotestact",{"_index":645,"title":{},"name":{},"text":{"3":{}},"component":{}}],["download",{"_index":868,"title":{},"name":{},"text":{"7":{}},"component":{}}],["doxyfil",{"_index":1320,"title":{},"name":{},"text":{"9":{}},"component":{}}],["doxygen",{"_index":12,"title":{},"name":{},"text":{"1":{},"5":{},"6":{},"9":{}},"component":{}}],["due",{"_index":804,"title":{},"name":{},"text":{"6":{}},"component":{}}],["duk_config.h",{"_index":930,"title":{},"name":{},"text":{"7":{}},"component":{}}],["duk_f_dll_build",{"_index":933,"title":{},"name":{},"text":{"7":{}},"component":{}}],["duk_f_dll_build/#undef",{"_index":937,"title":{},"name":{},"text":{"7":{}},"component":{}}],["duk_f_dll_build/g",{"_index":938,"title":{},"name":{},"text":{"7":{}},"component":{}}],["duktap",{"_index":618,"title":{"7-4":{}},"name":{},"text":{"3":{},"7":{}},"component":{}}],["duktape_source_root",{"_index":1068,"title":{},"name":{},"text":{"7":{}},"component":{}}],["duktape_source_root=\"$(pwd)/third",{"_index":1065,"title":{},"name":{},"text":{"7":{}},"component":{}}],["duktape_source_root=\"%cd%/third",{"_index":1059,"title":{},"name":{},"text":{"7":{}},"component":{}}],["duktapeconfig.cmake.in",{"_index":928,"title":{},"name":{},"text":{"7":{}},"component":{}}],["duplic",{"_index":752,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["dure",{"_index":356,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["e",{"_index":75,"title":{},"name":{},"text":{"1":{},"3":{}},"component":{}}],["e.g",{"_index":577,"title":{},"name":{},"text":{"3":{}},"component":{}}],["e1065370",{"_index":982,"title":{},"name":{},"text":{"7":{}},"component":{}}],["e1065370aaacb1b1cb48e77d37d376bf024f4a39",{"_index":988,"title":{},"name":{},"text":{"7":{}},"component":{}}],["e[extract",{"_index":402,"title":{},"name":{},"text":{"3":{}},"component":{}}],["each",{"_index":405,"title":{},"name":{},"text":{"3":{},"7":{},"8":{},"9":{}},"component":{}}],["easi",{"_index":157,"title":{},"name":{},"text":{"2":{}},"component":{}}],["easier",{"_index":1266,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ebo",{"_index":793,"title":{},"name":{},"text":{"5":{}},"component":{}}],["edit",{"_index":80,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["editor",{"_index":121,"title":{},"name":{},"text":{"2":{}},"component":{}}],["editori",{"_index":1136,"title":{},"name":{},"text":{"8":{}},"component":{}}],["effect",{"_index":737,"title":{},"name":{},"text":{"5":{},"9":{}},"component":{}}],["effici",{"_index":828,"title":{},"name":{},"text":{"6":{}},"component":{}}],["effort",{"_index":716,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["elabor",{"_index":1139,"title":{},"name":{},"text":{"8":{}},"component":{}}],["electron",{"_index":1146,"title":{},"name":{},"text":{"8":{}},"component":{}}],["element",{"_index":200,"title":{},"name":{},"text":{"2":{}},"component":{}}],["em",{"_index":76,"title":{},"name":{},"text":{"1":{}},"component":{}}],["embed",{"_index":1275,"title":{},"name":{},"text":{"8":{}},"component":{}}],["embodi",{"_index":823,"title":{},"name":{},"text":{"6":{}},"component":{}}],["enabl",{"_index":1077,"title":{},"name":{},"text":{"7":{}},"component":{}}],["enclos",{"_index":222,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["end",{"_index":263,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["endforeach",{"_index":1359,"title":{},"name":{},"text":{"9":{}},"component":{}}],["endif",{"_index":1365,"title":{},"name":{},"text":{"9":{}},"component":{}}],["endors",{"_index":1309,"title":{},"name":{},"text":{"8":{}},"component":{}}],["engin",{"_index":700,"title":{},"name":{},"text":{"5":{}},"component":{}}],["enhanc",{"_index":798,"title":{},"name":{},"text":{"6":{}},"component":{}}],["ensur",{"_index":801,"title":{},"name":{},"text":{"6":{},"7":{},"9":{}},"component":{}}],["entireti",{"_index":1290,"title":{},"name":{},"text":{"8":{}},"component":{}}],["entiti",{"_index":553,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["entri",{"_index":408,"title":{},"name":{},"text":{"3":{}},"component":{}}],["enum",{"_index":301,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["enumer",{"_index":479,"title":{},"name":{},"text":{"3":{}},"component":{}}],["enumeratorinfo",{"_index":478,"title":{},"name":{},"text":{"3":{}},"component":{}}],["enuminfo",{"_index":464,"title":{},"name":{},"text":{"3":{}},"component":{}}],["environ",{"_index":1027,"title":{},"name":{},"text":{"7":{}},"component":{}}],["equival",{"_index":1021,"title":{},"name":{},"text":{"7":{}},"component":{}}],["error",{"_index":300,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["especi",{"_index":48,"title":{},"name":{},"text":{"1":{}},"component":{}}],["even",{"_index":361,"title":{},"name":{},"text":{"2":{},"3":{},"8":{}},"component":{}}],["event",{"_index":1232,"title":{},"name":{},"text":{"8":{}},"component":{}}],["exampl",{"_index":104,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"7":{},"8":{},"9":{}},"component":{}}],["except",{"_index":384,"title":{"3-22":{}},"name":{},"text":{"3":{},"7":{},"8":{},"9":{}},"component":{}}],["exclud",{"_index":206,"title":{},"name":{},"text":{"2":{},"7":{},"8":{},"9":{}},"component":{}}],["exclus",{"_index":244,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["execut",{"_index":644,"title":{},"name":{},"text":{"3":{},"7":{},"8":{},"9":{}},"component":{}}],["exercis",{"_index":1124,"title":{},"name":{},"text":{"8":{}},"component":{}}],["exist",{"_index":275,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{}},"component":{}}],["exit",{"_index":638,"title":{},"name":{},"text":{"3":{}},"component":{}}],["expect",{"_index":274,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["experi",{"_index":1022,"title":{},"name":{},"text":{"7":{}},"component":{}}],["explan",{"_index":113,"title":{},"name":{},"text":{"2":{}},"component":{}}],["explicitli",{"_index":67,"title":{},"name":{},"text":{"1":{},"8":{}},"component":{}}],["export",{"_index":1029,"title":{},"name":{},"text":{"7":{}},"component":{}}],["express",{"_index":333,"title":{},"name":{},"text":{"2":{},"5":{},"8":{},"9":{}},"component":{}}],["extens",{"_index":612,"title":{},"name":{},"text":{"3":{}},"component":{}}],["extern",{"_index":312,"title":{},"name":{},"text":{"2":{}},"component":{}}],["extra",{"_index":656,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["extract",{"_index":218,"title":{"3-6":{},"9-7":{}},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"9":{}},"component":{}}],["f",{"_index":1378,"title":{},"name":{},"text":{"9":{}},"component":{}}],["f0",{"_index":220,"title":{},"name":{},"text":{"2":{}},"component":{}}],["f1",{"_index":223,"title":{},"name":{},"text":{"2":{}},"component":{}}],["face",{"_index":762,"title":{},"name":{},"text":{"5":{}},"component":{}}],["facilit",{"_index":712,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["factori",{"_index":529,"title":{},"name":{},"text":{"3":{}},"component":{}}],["fail",{"_index":654,"title":{},"name":{},"text":{"3":{},"6":{}},"component":{}}],["failur",{"_index":349,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["fals",{"_index":109,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["familiar",{"_index":749,"title":{},"name":{},"text":{"5":{}},"component":{}}],["fast",{"_index":1023,"title":{},"name":{},"text":{"7":{}},"component":{}}],["faster",{"_index":1005,"title":{},"name":{},"text":{"7":{}},"component":{}}],["featur",{"_index":391,"title":{},"name":{},"text":{"3":{},"7":{},"9":{}},"component":{}}],["fee",{"_index":1252,"title":{},"name":{},"text":{"8":{}},"component":{}}],["fell",{"_index":871,"title":{},"name":{},"text":{"7":{}},"component":{}}],["fetch",{"_index":987,"title":{},"name":{},"text":{"7":{}},"component":{}}],["fetch_head",{"_index":990,"title":{},"name":{},"text":{"7":{}},"component":{}}],["few",{"_index":675,"title":{},"name":{},"text":{"4":{},"5":{}},"component":{}}],["fh",{"_index":1082,"title":{},"name":{},"text":{"7":{}},"component":{}}],["field",{"_index":23,"title":{},"name":{},"text":{"1":{},"3":{},"8":{}},"component":{}}],["fieldinfo",{"_index":471,"title":{},"name":{},"text":{"3":{}},"component":{}}],["fifti",{"_index":1118,"title":{},"name":{},"text":{"8":{}},"component":{}}],["file",{"_index":91,"title":{"2":{},"2-7":{},"3-4":{},"9-1":{}},"name":{"2":{}},"text":{"2":{},"3":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["file(append",{"_index":1357,"title":{},"name":{},"text":{"9":{}},"component":{}}],["file(glob_recurs",{"_index":1347,"title":{},"name":{},"text":{"9":{}},"component":{}}],["file(writ",{"_index":1352,"title":{},"name":{},"text":{"9":{}},"component":{}}],["files/golden",{"_index":651,"title":{},"name":{},"text":{"3":{}},"component":{}}],["filesystem",{"_index":1080,"title":{},"name":{},"text":{"7":{}},"component":{}}],["filter",{"_index":89,"title":{"2-5":{},"2-6":{},"2-7":{},"2-14":{}},"name":{},"text":{"2":{},"3":{}},"component":{}}],["filters.symbol",{"_index":324,"title":{},"name":{},"text":{"2":{}},"component":{}}],["filters.symbols.exclud",{"_index":328,"title":{},"name":{},"text":{"2":{}},"component":{}}],["filters.symbols.includ",{"_index":224,"title":{},"name":{},"text":{"2":{}},"component":{}}],["final",{"_index":367,"title":{"3-5":{},"3-12":{}},"name":{},"text":{"3":{},"7":{}},"component":{}}],["find",{"_index":180,"title":{},"name":{},"text":{"2":{},"3":{},"7":{}},"component":{}}],["fine",{"_index":228,"title":{},"name":{},"text":{"2":{},"7":{}},"component":{}}],["first",{"_index":494,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["fit",{"_index":1225,"title":{},"name":{},"text":{"8":{}},"component":{}}],["fix",{"_index":665,"title":{},"name":{},"text":{"3":{}},"component":{}}],["fixtur",{"_index":650,"title":{},"name":{},"text":{"3":{}},"component":{}}],["flag",{"_index":266,"title":{},"name":{},"text":{"2":{},"7":{},"9":{}},"component":{}}],["fmt",{"_index":831,"title":{"7-3":{}},"name":{},"text":{"7":{}},"component":{}}],["fmt_doc=off",{"_index":882,"title":{},"name":{},"text":{"7":{}},"component":{}}],["fmt_test=off",{"_index":883,"title":{},"name":{},"text":{"7":{}},"component":{}}],["follow",{"_index":72,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"7":{},"8":{},"9":{}},"component":{}}],["foo",{"_index":254,"title":{},"name":{},"text":{"2":{}},"component":{}}],["forc",{"_index":746,"title":{},"name":{},"text":{"5":{}},"component":{}}],["foreach(header_fil",{"_index":1355,"title":{},"name":{},"text":{"9":{}},"component":{}}],["forget",{"_index":760,"title":{},"name":{},"text":{"5":{}},"component":{}}],["form",{"_index":14,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"6":{},"8":{},"9":{}},"component":{}}],["format",{"_index":8,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"8":{}},"component":{}}],["forward",{"_index":622,"title":{},"name":{},"text":{"3":{}},"component":{}}],["found",{"_index":362,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["free",{"_index":872,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["frequent",{"_index":815,"title":{},"name":{},"text":{"6":{}},"component":{}}],["friend",{"_index":476,"title":{},"name":{},"text":{"3":{}},"component":{}}],["friendinfo",{"_index":475,"title":{},"name":{},"text":{"3":{}},"component":{}}],["frontend",{"_index":435,"title":{},"name":{},"text":{"3":{}},"component":{}}],["full",{"_index":504,"title":{},"name":{},"text":{"3":{},"6":{}},"component":{}}],["fulli",{"_index":326,"title":{},"name":{},"text":{"2":{},"6":{}},"component":{}}],["function",{"_index":22,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"9":{}},"component":{}}],["functioninfo",{"_index":462,"title":{},"name":{},"text":{"3":{}},"component":{}}],["furnish",{"_index":1307,"title":{},"name":{},"text":{"8":{}},"component":{}}],["further",{"_index":522,"title":{},"name":{},"text":{"3":{}},"component":{}}],["g",{"_index":400,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["g0",{"_index":232,"title":{},"name":{},"text":{"2":{}},"component":{}}],["g[gener",{"_index":403,"title":{},"name":{},"text":{"3":{}},"component":{}}],["gener",{"_index":87,"title":{"2-3":{},"2-4":{},"2-13":{},"3-11":{},"3-13":{}},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["get",{"_index":1316,"title":{},"name":{},"text":{"9":{}},"component":{}}],["git",{"_index":866,"title":{},"name":{},"text":{"7":{}},"component":{}}],["github",{"_index":662,"title":{},"name":{},"text":{"3":{}},"component":{}}],["github/check_info_nodes_support.sh",{"_index":500,"title":{},"name":{},"text":{"3":{}},"component":{}}],["give",{"_index":1016,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["glob",{"_index":1344,"title":{},"name":{},"text":{"9":{}},"component":{}}],["global",{"_index":578,"title":{},"name":{},"text":{"3":{}},"component":{}}],["go",{"_index":864,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["goal",{"_index":813,"title":{},"name":{},"text":{"6":{}},"component":{}}],["goe",{"_index":1332,"title":{},"name":{},"text":{"9":{}},"component":{}}],["golden",{"_index":643,"title":{},"name":{},"text":{"3":{}},"component":{}}],["good",{"_index":1024,"title":{},"name":{},"text":{"7":{}},"component":{}}],["goodwil",{"_index":1246,"title":{},"name":{},"text":{"8":{}},"component":{}}],["govern",{"_index":1273,"title":{},"name":{},"text":{"8":{}},"component":{}}],["gplv2",{"_index":1279,"title":{},"name":{},"text":{"8":{}},"component":{}}],["grain",{"_index":229,"title":{},"name":{},"text":{"2":{}},"component":{}}],["grant",{"_index":1108,"title":{},"name":{},"text":{"8":{}},"component":{}}],["graph",{"_index":194,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["greet",{"_index":36,"title":{},"name":{},"text":{"1":{}},"component":{}}],["greet(person",{"_index":43,"title":{},"name":{},"text":{"1":{}},"component":{}}],["grossli",{"_index":1237,"title":{},"name":{},"text":{"8":{}},"component":{}}],["grow",{"_index":758,"title":{},"name":{},"text":{"5":{}},"component":{}}],["guid",{"_index":387,"title":{"3":{}},"name":{},"text":{"3":{}},"component":{}}],["guideinfo",{"_index":481,"title":{},"name":{},"text":{"3":{}},"component":{}}],["hand",{"_index":256,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["handler",{"_index":635,"title":{},"name":{},"text":{"3":{}},"component":{}}],["happen",{"_index":523,"title":{},"name":{},"text":{"3":{}},"component":{}}],["hardwar",{"_index":354,"title":{},"name":{},"text":{"2":{}},"component":{}}],["harmless",{"_index":1259,"title":{},"name":{},"text":{"8":{}},"component":{}}],["hash",{"_index":548,"title":{},"name":{},"text":{"3":{}},"component":{}}],["have",{"_index":708,"title":{},"name":{},"text":{"5":{}},"component":{}}],["header",{"_index":296,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"9":{}},"component":{}}],["header_fil",{"_index":1348,"title":{},"name":{},"text":{"9":{}},"component":{}}],["header_files_list",{"_index":1356,"title":{},"name":{},"text":{"9":{}},"component":{}}],["header_file}\\\"\\n",{"_index":1358,"title":{},"name":{},"text":{"9":{}},"component":{}}],["helper",{"_index":778,"title":{},"name":{},"text":{"5":{}},"component":{}}],["here",{"_index":127,"title":{},"name":{},"text":{"2":{},"5":{},"9":{}},"component":{}}],["herebi",{"_index":1156,"title":{},"name":{},"text":{"8":{}},"component":{}}],["herein",{"_index":1206,"title":{},"name":{},"text":{"8":{}},"component":{}}],["here’",{"_index":103,"title":{},"name":{},"text":{"2":{}},"component":{}}],["hidden",{"_index":792,"title":{},"name":{},"text":{"5":{}},"component":{}}],["hierarchi",{"_index":1081,"title":{},"name":{},"text":{"7":{}},"component":{}}],["hint",{"_index":306,"title":{},"name":{},"text":{"2":{}},"component":{}}],["hold",{"_index":1258,"title":{},"name":{},"text":{"8":{}},"component":{}}],["holder",{"_index":1313,"title":{},"name":{},"text":{"8":{}},"component":{}}],["home",{"_index":796,"title":{},"name":{},"text":{"6":{}},"component":{}}],["hour",{"_index":53,"title":{},"name":{},"text":{"1":{}},"component":{}}],["hours_in_day",{"_index":57,"title":{},"name":{},"text":{"1":{}},"component":{}}],["hpp",{"_index":247,"title":{},"name":{},"text":{"2":{}},"component":{}}],["html",{"_index":155,"title":{},"name":{},"text":{"2":{}},"component":{}}],["http://llvm.org",{"_index":1305,"title":{},"name":{},"text":{"8":{}},"component":{}}],["http://www.apache.org/licens",{"_index":1096,"title":{},"name":{},"text":{"8":{}},"component":{}}],["http://www.apache.org/licenses/licens",{"_index":1272,"title":{},"name":{},"text":{"8":{}},"component":{}}],["https://cpplang.slack.com",{"_index":673,"title":{},"name":{},"text":{"3":{}},"component":{}}],["https://github.com/cppalliance/mrdoc",{"_index":867,"title":{},"name":{},"text":{"7":{}},"component":{}}],["https://github.com/cppalliance/mrdocs/issu",{"_index":664,"title":{},"name":{},"text":{"3":{}},"component":{}}],["https://github.com/cppalliance/mrdocs/pul",{"_index":667,"title":{},"name":{},"text":{"3":{}},"component":{}}],["https://github.com/fmtlib/fmt",{"_index":876,"title":{},"name":{},"text":{"7":{}},"component":{}}],["https://github.com/gnome/libxml2",{"_index":944,"title":{},"name":{},"text":{"7":{}},"component":{}}],["https://github.com/llvm/llvm",{"_index":985,"title":{},"name":{},"text":{"7":{}},"component":{}}],["https://github.com/microsoft/vcpkg.git",{"_index":895,"title":{},"name":{},"text":{"7":{}},"component":{}}],["https://github.com/svaarala/duktape/releases/download/v2.7.0/duktap",{"_index":913,"title":{},"name":{},"text":{"7":{}},"component":{}}],["https://llvm.org/docs/developerpolicy.html#legaci",{"_index":1296,"title":{},"name":{},"text":{"8":{}},"component":{}}],["https://mrdocs.com/demo",{"_index":676,"title":{},"name":{},"text":{"4":{}},"component":{}}],["https://mrdocs.com/docs/mrdocs/develop/_attachments/mrdocs.schema.json",{"_index":132,"title":{},"name":{},"text":{"2":{}},"component":{}}],["id",{"_index":119,"title":{},"name":{},"text":{"2":{}},"component":{}}],["ideal",{"_index":710,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["ident",{"_index":562,"title":{},"name":{},"text":{"3":{}},"component":{}}],["identif",{"_index":1267,"title":{},"name":{},"text":{"8":{}},"component":{}}],["identifi",{"_index":236,"title":{},"name":{},"text":{"2":{},"8":{},"9":{}},"component":{}}],["ifdef",{"_index":1375,"title":{},"name":{},"text":{"9":{}},"component":{}}],["ignor",{"_index":243,"title":{},"name":{},"text":{"2":{}},"component":{}}],["ii",{"_index":1116,"title":{},"name":{},"text":{"8":{}},"component":{}}],["iii",{"_index":1122,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ill",{"_index":740,"title":{},"name":{},"text":{"5":{},"6":{},"9":{}},"component":{}}],["illinoi",{"_index":1300,"title":{},"name":{},"text":{"8":{}},"component":{}}],["illinois/ncsa",{"_index":1297,"title":{},"name":{},"text":{"8":{}},"component":{}}],["illog",{"_index":426,"title":{},"name":{},"text":{"3":{}},"component":{}}],["immedi",{"_index":639,"title":{},"name":{},"text":{"3":{}},"component":{}}],["immens",{"_index":786,"title":{},"name":{},"text":{"5":{}},"component":{}}],["impl",{"_index":251,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["impl::f_return_t",{"_index":1377,"title":{},"name":{},"text":{"9":{}},"component":{}}],["implement",{"_index":245,"title":{},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["implementation_defin",{"_index":1379,"title":{},"name":{},"text":{"9":{}},"component":{}}],["impli",{"_index":723,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["implicit",{"_index":451,"title":{},"name":{},"text":{"3":{}},"component":{}}],["import",{"_index":498,"title":{},"name":{},"text":{"3":{},"8":{},"9":{}},"component":{}}],["improv",{"_index":705,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["inabl",{"_index":1244,"title":{},"name":{},"text":{"8":{}},"component":{}}],["inaccess",{"_index":314,"title":{},"name":{},"text":{"2":{}},"component":{}}],["incident",{"_index":1240,"title":{},"name":{},"text":{"8":{}},"component":{}}],["includ",{"_index":107,"title":{"3-15":{}},"name":{},"text":{"2":{},"3":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["include/mrdocs/adt—data",{"_index":583,"title":{},"name":{},"text":{"3":{}},"component":{}}],["include/mrdocs/dom—th",{"_index":584,"title":{},"name":{},"text":{"3":{}},"component":{}}],["include/mrdocs/metadata—info",{"_index":587,"title":{},"name":{},"text":{"3":{}},"component":{}}],["include/mrdocs/support—vari",{"_index":588,"title":{},"name":{},"text":{"3":{}},"component":{}}],["include/mrdocs/—th",{"_index":581,"title":{},"name":{},"text":{"3":{}},"component":{}}],["include/—th",{"_index":376,"title":{"3-15":{}},"name":{},"text":{},"component":{}}],["include_dir",{"_index":1362,"title":{},"name":{},"text":{"9":{}},"component":{}}],["include_dir}/*.hpp",{"_index":1349,"title":{},"name":{},"text":{"9":{}},"component":{}}],["inclus",{"_index":327,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["incorpor",{"_index":811,"title":{},"name":{},"text":{"6":{},"8":{}},"component":{}}],["incur",{"_index":1260,"title":{},"name":{},"text":{"8":{}},"component":{}}],["indemn",{"_index":1253,"title":{},"name":{},"text":{"8":{}},"component":{}}],["indemnifi",{"_index":1256,"title":{},"name":{},"text":{"8":{}},"component":{}}],["index",{"_index":567,"title":{},"name":{"6":{}},"text":{"3":{}},"component":{}}],["indic",{"_index":931,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["indirect",{"_index":1112,"title":{},"name":{},"text":{"8":{}},"component":{}}],["individu",{"_index":230,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["infer",{"_index":493,"title":{},"name":{},"text":{"3":{},"9":{}},"component":{}}],["info",{"_index":368,"title":{"3-8":{}},"name":{},"text":{"3":{}},"component":{}}],["inform",{"_index":9,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"8":{},"9":{}},"component":{}}],["infring",{"_index":1172,"title":{},"name":{},"text":{"8":{}},"component":{}}],["inher",{"_index":820,"title":{},"name":{},"text":{"6":{}},"component":{}}],["init",{"_index":983,"title":{},"name":{},"text":{"7":{}},"component":{}}],["initi",{"_index":497,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["inlin",{"_index":129,"title":{},"name":{},"text":{"2":{}},"component":{}}],["input",{"_index":246,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["input.fil",{"_index":323,"title":{},"name":{},"text":{"2":{}},"component":{}}],["input.includ",{"_index":322,"title":{},"name":{},"text":{"2":{}},"component":{}}],["instal",{"_index":178,"title":{"7":{},"7-2":{}},"name":{"7":{}},"text":{"2":{},"3":{},"7":{},"9":{}},"component":{}}],["instanc",{"_index":425,"title":{},"name":{},"text":{"3":{},"9":{}},"component":{}}],["instead",{"_index":293,"title":{},"name":{},"text":{"2":{},"7":{},"9":{}},"component":{}}],["institut",{"_index":1175,"title":{},"name":{},"text":{"8":{}},"component":{}}],["instruct",{"_index":861,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["int",{"_index":35,"title":{},"name":{},"text":{"1":{}},"component":{}}],["integ",{"_index":338,"title":{},"name":{},"text":{"2":{}},"component":{}}],["integr",{"_index":1315,"title":{"9-5":{}},"name":{},"text":{},"component":{}}],["intend",{"_index":389,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"9":{}},"component":{}}],["intent",{"_index":1381,"title":{},"name":{},"text":{"9":{}},"component":{}}],["intention",{"_index":1143,"title":{},"name":{},"text":{"8":{}},"component":{}}],["interact",{"_index":406,"title":{},"name":{},"text":{"3":{}},"component":{}}],["interest",{"_index":783,"title":{},"name":{},"text":{"5":{}},"component":{}}],["interfac",{"_index":502,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["intermediari",{"_index":165,"title":{},"name":{},"text":{"2":{}},"component":{}}],["intern",{"_index":421,"title":{},"name":{},"text":{"3":{}},"component":{}}],["interpret",{"_index":264,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["intervent",{"_index":733,"title":{},"name":{},"text":{"5":{}},"component":{}}],["invoc",{"_index":1314,"title":{"9-2":{},"9-3":{}},"name":{},"text":{},"component":{}}],["invok",{"_index":633,"title":{},"name":{},"text":{"3":{},"7":{},"9":{}},"component":{}}],["involv",{"_index":768,"title":{},"name":{},"text":{"5":{}},"component":{}}],["irrevoc",{"_index":1161,"title":{},"name":{},"text":{"8":{}},"component":{}}],["issu",{"_index":661,"title":{},"name":{},"text":{"3":{},"6":{},"8":{}},"component":{}}],["ital",{"_index":74,"title":{},"name":{},"text":{"1":{}},"component":{}}],["iter",{"_index":646,"title":{},"name":{},"text":{"3":{}},"component":{}}],["itself",{"_index":261,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["it’",{"_index":1333,"title":{},"name":{},"text":{"9":{}},"component":{}}],["januari",{"_index":1094,"title":{},"name":{},"text":{"8":{}},"component":{}}],["javadoc",{"_index":11,"title":{},"name":{},"text":{"1":{},"3":{}},"component":{}}],["javascript",{"_index":910,"title":{},"name":{},"text":{"7":{}},"component":{}}],["jetbrain",{"_index":118,"title":{},"name":{},"text":{"2":{}},"component":{}}],["json",{"_index":276,"title":{},"name":{},"text":{"2":{}},"component":{}}],["juli",{"_index":840,"title":{},"name":{},"text":{"7":{}},"component":{}}],["jurisdict",{"_index":1282,"title":{},"name":{},"text":{"8":{}},"component":{}}],["key",{"_index":209,"title":{},"name":{},"text":{"2":{}},"component":{}}],["kind",{"_index":1222,"title":{},"name":{},"text":{"8":{}},"component":{}}],["know",{"_index":751,"title":{},"name":{},"text":{"5":{}},"component":{}}],["known",{"_index":10,"title":{},"name":{},"text":{"1":{}},"component":{}}],["lack",{"_index":1335,"title":{},"name":{},"text":{"9":{}},"component":{}}],["languag",{"_index":124,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["last",{"_index":431,"title":{},"name":{},"text":{"3":{}},"component":{}}],["later",{"_index":875,"title":{},"name":{},"text":{"7":{}},"component":{}}],["latter",{"_index":446,"title":{},"name":{},"text":{"3":{}},"component":{}}],["law",{"_index":1219,"title":{},"name":{},"text":{"8":{}},"component":{}}],["lawsuit",{"_index":1180,"title":{},"name":{},"text":{"8":{}},"component":{}}],["layout",{"_index":375,"title":{"3-14":{},"7-9":{}},"name":{},"text":{"7":{}},"component":{}}],["lazi",{"_index":702,"title":{},"name":{},"text":{"5":{}},"component":{}}],["legaci",{"_index":1295,"title":{},"name":{},"text":{"8":{}},"component":{}}],["legal",{"_index":1109,"title":{},"name":{},"text":{"8":{}},"component":{}}],["less",{"_index":694,"title":{},"name":{},"text":{"5":{}},"component":{}}],["level",{"_index":344,"title":{},"name":{},"text":{"2":{},"5":{},"7":{}},"component":{}}],["liabil",{"_index":1231,"title":{},"name":{},"text":{"8":{}},"component":{}}],["liabl",{"_index":1238,"title":{},"name":{},"text":{"8":{}},"component":{}}],["lib",{"_index":1084,"title":{},"name":{},"text":{"7":{}},"component":{}}],["lib/lib/mrdocscompilationdatabase.hpp",{"_index":443,"title":{},"name":{},"text":{"3":{}},"component":{}}],["libc",{"_index":833,"title":{"7-7":{}},"name":{},"text":{"7":{}},"component":{}}],["libclang",{"_index":503,"title":{},"name":{},"text":{"3":{}},"component":{}}],["libcxx",{"_index":1035,"title":{},"name":{},"text":{"7":{}},"component":{}}],["librari",{"_index":286,"title":{"3-19":{}},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"7":{},"9":{}},"component":{}}],["libtool",{"_index":371,"title":{"3-9":{}},"name":{},"text":{"3":{},"5":{}},"component":{}}],["libxml2",{"_index":832,"title":{"7-5":{}},"name":{},"text":{"7":{}},"component":{}}],["libxml2[tool",{"_index":980,"title":{},"name":{},"text":{"7":{}},"component":{}}],["licens",{"_index":1089,"title":{"8":{}},"name":{"8":{}},"text":{"8":{}},"component":{}}],["license.txt",{"_index":1292,"title":{},"name":{},"text":{"8":{}},"component":{}}],["licensor",{"_index":1104,"title":{},"name":{},"text":{"8":{}},"component":{}}],["limit",{"_index":771,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["line",{"_index":50,"title":{"2-10":{},"3-3":{}},"name":{},"text":{"1":{},"2":{},"3":{},"7":{},"9":{}},"component":{}}],["link",{"_index":303,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["lint",{"_index":116,"title":{},"name":{},"text":{"2":{}},"component":{}}],["linux",{"_index":834,"title":{},"name":{},"text":{"7":{}},"component":{}}],["linux.tar.gz",{"_index":852,"title":{},"name":{},"text":{"7":{}},"component":{}}],["linux.tar.xz",{"_index":850,"title":{},"name":{},"text":{"7":{}},"component":{}}],["list",{"_index":216,"title":{},"name":{},"text":{"2":{},"8":{},"9":{}},"component":{}}],["litig",{"_index":1176,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ljo",{"_index":917,"title":{},"name":{},"text":{"7":{}},"component":{}}],["llvm",{"_index":616,"title":{"7-6":{}},"name":{},"text":{"3":{},"7":{},"8":{}},"component":{}}],["llvm/cmakeuserpresets.json",{"_index":1000,"title":{},"name":{},"text":{"7":{}},"component":{}}],["llvm::cl",{"_index":416,"title":{},"name":{},"text":{"3":{}},"component":{}}],["llvm_root",{"_index":1067,"title":{},"name":{},"text":{"7":{}},"component":{}}],["llvm_root=\"$(pwd)/third",{"_index":1064,"title":{},"name":{},"text":{"7":{}},"component":{}}],["llvm_root=\"%cd%/third",{"_index":1057,"title":{},"name":{},"text":{"7":{}},"component":{}}],["load",{"_index":412,"title":{},"name":{},"text":{"3":{}},"component":{}}],["locat",{"_index":309,"title":{},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["look",{"_index":279,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["loss",{"_index":1245,"title":{},"name":{},"text":{"8":{}},"component":{}}],["lost",{"_index":755,"title":{},"name":{},"text":{"5":{}},"component":{}}],["low",{"_index":725,"title":{},"name":{},"text":{"5":{}},"component":{}}],["lua",{"_index":621,"title":{},"name":{},"text":{"3":{}},"component":{}}],["macro",{"_index":734,"title":{},"name":{},"text":{"5":{},"6":{},"7":{},"9":{}},"component":{}}],["made",{"_index":1133,"title":{},"name":{},"text":{"8":{},"9":{}},"component":{}}],["mail",{"_index":1150,"title":{},"name":{},"text":{"8":{}},"component":{}}],["main",{"_index":25,"title":{"3-15":{},"3-16":{}},"name":{},"text":{"1":{},"3":{},"7":{}},"component":{}}],["maintain",{"_index":717,"title":{},"name":{},"text":{"5":{},"6":{},"7":{},"9":{}},"component":{}}],["mainten",{"_index":817,"title":{},"name":{},"text":{"6":{}},"component":{}}],["make",{"_index":1126,"title":{},"name":{},"text":{"8":{}},"component":{}}],["malfunct",{"_index":1249,"title":{},"name":{},"text":{"8":{}},"component":{}}],["manag",{"_index":1114,"title":{},"name":{},"text":{"8":{}},"component":{}}],["mani",{"_index":810,"title":{},"name":{},"text":{"6":{},"9":{}},"component":{}}],["manifest",{"_index":902,"title":{},"name":{},"text":{"7":{}},"component":{}}],["manual",{"_index":732,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["map",{"_index":346,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["mark",{"_index":68,"title":{},"name":{},"text":{"1":{},"2":{},"8":{}},"component":{}}],["markdown",{"_index":161,"title":{},"name":{},"text":{"2":{}},"component":{}}],["markup",{"_index":182,"title":{},"name":{},"text":{"2":{}},"component":{}}],["master",{"_index":682,"title":{},"name":{},"text":{"4":{},"7":{}},"component":{}}],["match",{"_index":215,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["materi",{"_index":1308,"title":{},"name":{},"text":{"8":{}},"component":{}}],["maximum",{"_index":360,"title":{},"name":{},"text":{"2":{}},"component":{}}],["mb",{"_index":846,"title":{},"name":{},"text":{"7":{}},"component":{}}],["mdd",{"_index":1019,"title":{},"name":{},"text":{"7":{}},"component":{}}],["mean",{"_index":255,"title":{},"name":{},"text":{"2":{},"5":{},"8":{},"9":{}},"component":{}}],["mechan",{"_index":1129,"title":{},"name":{},"text":{"8":{},"9":{}},"component":{}}],["media",{"_index":1131,"title":{},"name":{},"text":{"8":{}},"component":{}}],["medium",{"_index":1186,"title":{},"name":{},"text":{"8":{}},"component":{}}],["meet",{"_index":826,"title":{},"name":{},"text":{"6":{},"8":{}},"component":{}}],["member",{"_index":217,"title":{},"name":{},"text":{"2":{}},"component":{}}],["merchant",{"_index":1224,"title":{},"name":{},"text":{"8":{}},"component":{}}],["mere",{"_index":1141,"title":{},"name":{},"text":{"8":{}},"component":{}}],["merg",{"_index":559,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["messag",{"_index":39,"title":{},"name":{},"text":{"1":{}},"component":{}}],["metadata",{"_index":95,"title":{"2-15":{}},"name":{},"text":{"2":{},"3":{},"5":{}},"component":{}}],["method",{"_index":517,"title":{},"name":{},"text":{"3":{}},"component":{}}],["minim",{"_index":766,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["minimum",{"_index":343,"title":{},"name":{},"text":{"2":{}},"component":{}}],["minor",{"_index":774,"title":{},"name":{},"text":{"5":{}},"component":{}}],["miscellan",{"_index":96,"title":{"2-16":{}},"name":{},"text":{"2":{}},"component":{}}],["mkdir",{"_index":869,"title":{},"name":{},"text":{"7":{}},"component":{}}],["mode",{"_index":903,"title":{},"name":{},"text":{"7":{}},"component":{}}],["model",{"_index":585,"title":{},"name":{},"text":{"3":{}},"component":{}}],["modif",{"_index":1127,"title":{},"name":{},"text":{"8":{}},"component":{}}],["modifi",{"_index":177,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["modul",{"_index":394,"title":{},"name":{},"text":{"3":{},"9":{}},"component":{}}],["moment",{"_index":689,"title":{},"name":{},"text":{"5":{}},"component":{}}],["more",{"_index":692,"title":{},"name":{},"text":{"5":{},"7":{},"8":{},"9":{}},"component":{}}],["motiv",{"_index":696,"title":{},"name":{},"text":{"5":{}},"component":{}}],["mr",{"_index":742,"title":{},"name":{},"text":{"5":{}},"component":{}}],["mr.doc",{"_index":767,"title":{},"name":{},"text":{"5":{}},"component":{}}],["mrdoc",{"_index":82,"title":{"6":{},"7-8":{},"9-1":{},"9-2":{},"9-6":{}},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"9":{}},"component":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{}}}],["mrdocs.yml",{"_index":126,"title":{},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["mrdocs/config.hpp",{"_index":417,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/corpus.hpp",{"_index":436,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/generator.hpp",{"_index":579,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/alias.hpp",{"_index":486,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/concept.hpp",{"_index":491,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/enum.hpp",{"_index":465,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/enumerator.hpp",{"_index":480,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/field.hpp",{"_index":472,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/friend.hpp",{"_index":477,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/function.hpp",{"_index":463,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/guide.hpp",{"_index":483,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/info.hpp",{"_index":455,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/javadoc.hpp",{"_index":566,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/namespace.hpp",{"_index":458,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/record.hpp",{"_index":461,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/specialization.hpp",{"_index":474,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/typedef.hpp",{"_index":467,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/using.hpp",{"_index":488,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/metadata/variable.hpp",{"_index":470,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs/third",{"_index":922,"title":{},"name":{},"text":{"7":{}},"component":{}}],["mrdocs::corpu",{"_index":546,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs::info",{"_index":545,"title":{},"name":{},"text":{"3":{}},"component":{}}],["mrdocs_build",{"_index":141,"title":{},"name":{},"text":{"2":{}},"component":{}}],["mrdocs_build=on",{"_index":139,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["mrdocscompilationdatabas",{"_index":442,"title":{},"name":{},"text":{"3":{}},"component":{}}],["msi",{"_index":836,"title":{},"name":{},"text":{"7":{}},"component":{}}],["msvc",{"_index":1013,"title":{},"name":{},"text":{"7":{}},"component":{}}],["much",{"_index":690,"title":{},"name":{},"text":{"5":{}},"component":{}}],["multi",{"_index":679,"title":{},"name":{},"text":{"4":{}},"component":{}}],["multipag",{"_index":108,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["multipl",{"_index":151,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"9":{}},"component":{}}],["my_project_mrdocs_build",{"_index":1343,"title":{},"name":{},"text":{"9":{}},"component":{}}],["my_project_mrdocs_build=on",{"_index":1366,"title":{},"name":{},"text":{"9":{}},"component":{}}],["name",{"_index":28,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"7":{},"8":{}},"component":{}}],["namespac",{"_index":221,"title":{},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["namespaceinfo",{"_index":457,"title":{},"name":{},"text":{"3":{}},"component":{}}],["natur",{"_index":701,"title":{},"name":{},"text":{"5":{}},"component":{}}],["navig",{"_index":800,"title":{},"name":{},"text":{"6":{}},"component":{}}],["necess",{"_index":784,"title":{},"name":{},"text":{"5":{}},"component":{}}],["necessari",{"_index":557,"title":{},"name":{},"text":{"3":{},"5":{},"9":{}},"component":{}}],["necessarili",{"_index":1171,"title":{},"name":{},"text":{"8":{}},"component":{}}],["need",{"_index":30,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"9":{}},"component":{}}],["neglig",{"_index":1235,"title":{},"name":{},"text":{"8":{}},"component":{}}],["never",{"_index":318,"title":{},"name":{},"text":{"2":{}},"component":{}}],["new",{"_index":390,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["newfrontendactionfactori",{"_index":512,"title":{},"name":{},"text":{"3":{}},"component":{}}],["nice",{"_index":743,"title":{},"name":{},"text":{"5":{}},"component":{}}],["niebloid",{"_index":794,"title":{},"name":{},"text":{"5":{}},"component":{}}],["ninja",{"_index":1033,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["node",{"_index":369,"title":{"3-8":{}},"name":{},"text":{"3":{}},"component":{}}],["non",{"_index":454,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["noninfring",{"_index":1312,"title":{},"name":{},"text":{"8":{}},"component":{}}],["normal",{"_index":453,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["note",{"_index":686,"title":{"5":{}},"name":{"5":{}},"text":{"5":{}},"component":{}}],["noth",{"_index":1205,"title":{},"name":{},"text":{"8":{}},"component":{}}],["notic",{"_index":1134,"title":{},"name":{},"text":{"8":{}},"component":{}}],["notori",{"_index":726,"title":{},"name":{},"text":{"5":{}},"component":{}}],["notwithstand",{"_index":1204,"title":{},"name":{},"text":{"8":{}},"component":{}}],["now",{"_index":929,"title":{},"name":{},"text":{"7":{}},"component":{}}],["number",{"_index":52,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"7":{}},"component":{}}],["object",{"_index":316,"title":{},"name":{},"text":{"2":{},"3":{},"8":{}},"component":{}}],["oblig",{"_index":1254,"title":{},"name":{},"text":{"8":{}},"component":{}}],["obtain",{"_index":1271,"title":{},"name":{},"text":{"8":{}},"component":{}}],["occur",{"_index":363,"title":{},"name":{},"text":{"2":{}},"component":{}}],["offer",{"_index":501,"title":{},"name":{},"text":{"3":{},"6":{},"7":{},"8":{}},"component":{}}],["offici",{"_index":888,"title":{},"name":{},"text":{"7":{}},"component":{}}],["og",{"_index":1015,"title":{},"name":{},"text":{"7":{}},"component":{}}],["ok",{"_index":219,"title":{},"name":{},"text":{"2":{}},"component":{}}],["on",{"_index":189,"title":{},"name":{},"text":{"2":{},"7":{},"8":{},"9":{}},"component":{}}],["onc",{"_index":507,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["open",{"_index":660,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["oper",{"_index":1088,"title":{},"name":{},"text":{"7":{}},"component":{}}],["optim",{"_index":1004,"title":{},"name":{},"text":{"7":{}},"component":{}}],["option",{"_index":86,"title":{"2-2":{},"2-10":{},"2-12":{},"3-2":{},"3-3":{},"3-5":{}},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{},"9":{}},"component":{}}],["order",{"_index":233,"title":{},"name":{},"text":{"2":{}},"component":{}}],["organ",{"_index":580,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["origin",{"_index":445,"title":{},"name":{},"text":{"3":{},"7":{},"8":{},"9":{}},"component":{}}],["otherwis",{"_index":1115,"title":{},"name":{},"text":{"8":{}},"component":{}}],["out",{"_index":204,"title":{},"name":{},"text":{"2":{},"5":{},"8":{}},"component":{}}],["outcom",{"_index":706,"title":{},"name":{},"text":{"5":{}},"component":{}}],["outfil",{"_index":915,"title":{},"name":{},"text":{"7":{}},"component":{}}],["output",{"_index":152,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"9":{}},"component":{}}],["output=../docs/refer",{"_index":1323,"title":{},"name":{},"text":{"9":{}},"component":{}}],["output=..\\docs\\refer",{"_index":1367,"title":{},"name":{},"text":{"9":{}},"component":{}}],["outstand",{"_index":1121,"title":{},"name":{},"text":{"8":{}},"component":{}}],["over",{"_index":191,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["overload",{"_index":789,"title":{},"name":{},"text":{"5":{}},"component":{}}],["overrid",{"_index":225,"title":{},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["overview",{"_index":365,"title":{"3-1":{}},"name":{},"text":{"3":{}},"component":{}}],["owner",{"_index":1106,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ownership",{"_index":1117,"title":{},"name":{},"text":{"8":{}},"component":{}}],["p",{"_index":41,"title":{},"name":{},"text":{"1":{},"3":{},"7":{}},"component":{}}],["p[option",{"_index":398,"title":{},"name":{},"text":{"3":{}},"component":{}}],["packag",{"_index":830,"title":{"7-1":{},"7-9":{}},"name":{},"text":{"7":{}},"component":{}}],["page",{"_index":81,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["parallel",{"_index":1025,"title":{},"name":{},"text":{"7":{}},"component":{}}],["param",{"_index":40,"title":{},"name":{},"text":{"1":{}},"component":{}}],["paramet",{"_index":71,"title":{},"name":{},"text":{"1":{},"7":{},"9":{}},"component":{}}],["parent",{"_index":863,"title":{},"name":{},"text":{"7":{}},"component":{}}],["pars",{"_index":366,"title":{"3-2":{}},"name":{},"text":{"3":{},"7":{}},"component":{}}],["parser",{"_index":272,"title":{},"name":{},"text":{"2":{}},"component":{}}],["part",{"_index":297,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["parti",{"_index":383,"title":{"3-19":{}},"name":{},"text":{"3":{},"7":{},"8":{}},"component":{}}],["partial",{"_index":1371,"title":{},"name":{},"text":{"9":{}},"component":{}}],["particular",{"_index":1226,"title":{},"name":{},"text":{"8":{}},"component":{}}],["party/duktap",{"_index":1060,"title":{},"name":{},"text":{"7":{}},"component":{}}],["party/duktape/cmakelists.txt",{"_index":923,"title":{},"name":{},"text":{"7":{}},"component":{}}],["party/duktape/duktapeconfig.cmake.in",{"_index":925,"title":{},"name":{},"text":{"7":{}},"component":{}}],["party/duktape/—cmak",{"_index":617,"title":{},"name":{},"text":{"3":{}},"component":{}}],["party/llvm",{"_index":993,"title":{},"name":{},"text":{"7":{}},"component":{}}],["party/llvm+clang/relwithdebinfo",{"_index":1058,"title":{},"name":{},"text":{"7":{}},"component":{}}],["party/llvm/cmakepresets.json",{"_index":998,"title":{},"name":{},"text":{"7":{}},"component":{}}],["party/llvm/cmakeuserpresets.json",{"_index":999,"title":{},"name":{},"text":{"7":{}},"component":{}}],["party/llvm/—cmak",{"_index":614,"title":{},"name":{},"text":{"3":{}},"component":{}}],["party/lua/—a",{"_index":619,"title":{},"name":{},"text":{"3":{}},"component":{}}],["party/vcpkg",{"_index":942,"title":{},"name":{},"text":{"7":{}},"component":{}}],["party/vcpkg/scripts/buildsystems/vcpkg.cmak",{"_index":1062,"title":{},"name":{},"text":{"7":{}},"component":{}}],["party/—help",{"_index":382,"title":{"3-19":{}},"name":{},"text":{},"component":{}}],["party/—third",{"_index":613,"title":{},"name":{},"text":{"3":{}},"component":{}}],["pass",{"_index":145,"title":{},"name":{},"text":{"2":{},"5":{},"9":{}},"component":{}}],["patch",{"_index":918,"title":{},"name":{},"text":{"7":{}},"component":{}}],["patent",{"_index":1166,"title":{},"name":{},"text":{"8":{}},"component":{}}],["path",{"_index":94,"title":{"2-11":{},"3-21":{}},"name":{},"text":{"2":{},"3":{},"7":{},"9":{}},"component":{}}],["path/to/custom/addon",{"_index":188,"title":{},"name":{},"text":{"2":{}},"component":{}}],["path/to/mrdocs.yml",{"_index":1322,"title":{},"name":{},"text":{"9":{}},"component":{}}],["pathnam",{"_index":624,"title":{},"name":{},"text":{"3":{}},"component":{}}],["pattern",{"_index":210,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["percent",{"_index":1119,"title":{},"name":{},"text":{"8":{}},"component":{}}],["perform",{"_index":569,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["permiss",{"_index":1125,"title":{},"name":{},"text":{"8":{}},"component":{}}],["permit",{"_index":227,"title":{},"name":{},"text":{"2":{},"8":{}},"component":{}}],["perpetu",{"_index":1157,"title":{},"name":{},"text":{"8":{}},"component":{}}],["person",{"_index":26,"title":{},"name":{},"text":{"1":{},"8":{}},"component":{}}],["perspect",{"_index":721,"title":{},"name":{},"text":{"5":{}},"component":{}}],["pertain",{"_index":1192,"title":{},"name":{},"text":{"8":{}},"component":{}}],["philosophi",{"_index":764,"title":{},"name":{},"text":{"5":{}},"component":{}}],["place",{"_index":19,"title":{},"name":{},"text":{"1":{},"5":{},"8":{}},"component":{}}],["platform",{"_index":627,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["pleas",{"_index":659,"title":{},"name":{},"text":{"3":{}},"component":{}}],["plugin",{"_index":122,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{}},"component":{}}],["point",{"_index":409,"title":{},"name":{},"text":{"3":{}},"component":{}}],["pointer",{"_index":565,"title":{},"name":{},"text":{"3":{}},"component":{}}],["polici",{"_index":311,"title":{},"name":{},"text":{"2":{}},"component":{}}],["popular",{"_index":807,"title":{},"name":{},"text":{"6":{}},"component":{}}],["portion",{"_index":1274,"title":{},"name":{},"text":{"8":{}},"component":{}}],["pose",{"_index":802,"title":{},"name":{},"text":{"6":{}},"component":{}}],["possibl",{"_index":439,"title":{},"name":{},"text":{"3":{},"5":{},"8":{}},"component":{}}],["post",{"_index":173,"title":{},"name":{},"text":{"2":{}},"component":{}}],["potenti",{"_index":1373,"title":{},"name":{},"text":{"9":{}},"component":{}}],["power",{"_index":1111,"title":{},"name":{},"text":{"8":{}},"component":{}}],["powershel",{"_index":892,"title":{},"name":{},"text":{"7":{}},"component":{}}],["practic",{"_index":776,"title":{},"name":{},"text":{"5":{}},"component":{}}],["pre",{"_index":447,"title":{},"name":{},"text":{"3":{}},"component":{}}],["preced",{"_index":258,"title":{},"name":{},"text":{"2":{}},"component":{}}],["prefer",{"_index":890,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["prefix",{"_index":884,"title":{},"name":{},"text":{"7":{}},"component":{}}],["prepar",{"_index":1163,"title":{},"name":{},"text":{"8":{}},"component":{}}],["preprocess",{"_index":1372,"title":{},"name":{},"text":{"9":{}},"component":{}}],["preprocessor",{"_index":147,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["present",{"_index":573,"title":{},"name":{},"text":{"3":{},"9":{}},"component":{}}],["preset",{"_index":615,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["preset=releas",{"_index":1001,"title":{},"name":{},"text":{"7":{}},"component":{}}],["pretti",{"_index":605,"title":{},"name":{},"text":{"3":{}},"component":{}}],["previous",{"_index":1032,"title":{},"name":{},"text":{"7":{}},"component":{}}],["primarili",{"_index":142,"title":{},"name":{},"text":{"2":{}},"component":{}}],["print",{"_index":38,"title":{},"name":{},"text":{"1":{},"3":{},"8":{}},"component":{}}],["printer",{"_index":606,"title":{},"name":{},"text":{"3":{}},"component":{}}],["prior",{"_index":1311,"title":{},"name":{},"text":{"8":{}},"component":{}}],["privat",{"_index":92,"title":{"2-8":{}},"name":{},"text":{"2":{},"3":{},"5":{},"9":{}},"component":{}}],["problem",{"_index":748,"title":{},"name":{},"text":{"5":{}},"component":{}}],["problemat",{"_index":736,"title":{},"name":{},"text":{"5":{},"9":{}},"component":{}}],["process",{"_index":174,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"9":{}},"component":{}}],["product",{"_index":1213,"title":{},"name":{},"text":{"8":{}},"component":{}}],["program",{"_index":353,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["project",{"_index":201,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"8":{},"9":{}},"component":{}}],["project.git",{"_index":986,"title":{},"name":{},"text":{"7":{}},"component":{}}],["project/llvm",{"_index":997,"title":{},"name":{},"text":{"7":{}},"component":{}}],["project’",{"_index":904,"title":{},"name":{},"text":{"7":{}},"component":{}}],["promin",{"_index":1189,"title":{},"name":{},"text":{"8":{}},"component":{}}],["promot",{"_index":1310,"title":{},"name":{},"text":{"8":{}},"component":{}}],["prompt",{"_index":818,"title":{},"name":{},"text":{"6":{}},"component":{}}],["propag",{"_index":631,"title":{},"name":{},"text":{"3":{}},"component":{}}],["properti",{"_index":195,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["prospect",{"_index":1286,"title":{},"name":{},"text":{"8":{}},"component":{}}],["provid",{"_index":112,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["provis",{"_index":1283,"title":{},"name":{},"text":{"8":{}},"component":{}}],["public",{"_index":418,"title":{},"name":{},"text":{"3":{},"6":{}},"component":{}}],["publicli",{"_index":1164,"title":{},"name":{},"text":{"8":{}},"component":{}}],["publish",{"_index":1306,"title":{},"name":{},"text":{"8":{}},"component":{}}],["pull",{"_index":666,"title":{},"name":{},"text":{"3":{}},"component":{}}],["purpos",{"_index":1008,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["qualifi",{"_index":211,"title":{},"name":{},"text":{"2":{}},"component":{}}],["qualiti",{"_index":824,"title":{},"name":{},"text":{"6":{}},"component":{}}],["rare",{"_index":782,"title":{},"name":{},"text":{"5":{}},"component":{}}],["read",{"_index":158,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{}},"component":{}}],["readabl",{"_index":1193,"title":{},"name":{},"text":{"8":{}},"component":{}}],["real",{"_index":531,"title":{},"name":{},"text":{"3":{}},"component":{}}],["reason",{"_index":707,"title":{},"name":{},"text":{"5":{},"7":{},"8":{}},"component":{}}],["receiv",{"_index":1153,"title":{},"name":{},"text":{"8":{}},"component":{}}],["recent",{"_index":981,"title":{},"name":{},"text":{"7":{}},"component":{}}],["recipi",{"_index":1187,"title":{},"name":{},"text":{"8":{}},"component":{}}],["recogn",{"_index":271,"title":{},"name":{},"text":{"2":{}},"component":{}}],["recommend",{"_index":909,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["record",{"_index":460,"title":{},"name":{},"text":{"3":{}},"component":{}}],["recordinfo",{"_index":459,"title":{},"name":{},"text":{"3":{}},"component":{}}],["recurs",{"_index":536,"title":{},"name":{},"text":{"3":{}},"component":{}}],["redistribut",{"_index":1185,"title":{},"name":{},"text":{"8":{}},"component":{}}],["refer",{"_index":93,"title":{"2-9":{}},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"6":{},"9":{}},"component":{}}],["referenc",{"_index":310,"title":{},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["regard",{"_index":1209,"title":{},"name":{},"text":{"8":{}},"component":{}}],["regardless",{"_index":290,"title":{},"name":{},"text":{"2":{}},"component":{}}],["rel",{"_index":273,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["relat",{"_index":791,"title":{},"name":{},"text":{"5":{}},"component":{}}],["releas",{"_index":678,"title":{},"name":{},"text":{"4":{},"7":{}},"component":{}}],["relev",{"_index":202,"title":{},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["reli",{"_index":1374,"title":{},"name":{},"text":{"9":{}},"component":{}}],["relwithdebinfo",{"_index":1006,"title":{},"name":{},"text":{"7":{}},"component":{}}],["remain",{"_index":806,"title":{},"name":{},"text":{"6":{},"8":{}},"component":{}}],["rememb",{"_index":695,"title":{},"name":{},"text":{"5":{}},"component":{}}],["remot",{"_index":984,"title":{},"name":{},"text":{"7":{}},"component":{}}],["remov",{"_index":335,"title":{},"name":{},"text":{"2":{},"3":{},"5":{}},"component":{}}],["render",{"_index":315,"title":{},"name":{},"text":{"2":{}},"component":{}}],["replac",{"_index":294,"title":{},"name":{},"text":{"2":{},"7":{},"8":{}},"component":{}}],["replic",{"_index":994,"title":{},"name":{},"text":{"7":{}},"component":{}}],["report",{"_index":342,"title":{},"name":{},"text":{"2":{}},"component":{}}],["repositori",{"_index":663,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["repres",{"_index":27,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"8":{}},"component":{}}],["represent",{"_index":419,"title":{},"name":{},"text":{"3":{}},"component":{}}],["reproduc",{"_index":1162,"title":{},"name":{},"text":{"8":{}},"component":{}}],["reproduct",{"_index":1099,"title":{},"name":{},"text":{"8":{}},"component":{}}],["request",{"_index":658,"title":{},"name":{},"text":{"3":{}},"component":{}}],["requir",{"_index":196,"title":{},"name":{},"text":{"2":{},"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["reserv",{"_index":1303,"title":{},"name":{},"text":{"8":{}},"component":{}}],["resourc",{"_index":379,"title":{"3-17":{}},"name":{},"text":{"3":{},"7":{}},"component":{}}],["respect",{"_index":568,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["respons",{"_index":281,"title":{},"name":{},"text":{"2":{},"3":{},"8":{}},"component":{}}],["rest",{"_index":433,"title":{},"name":{},"text":{"3":{}},"component":{}}],["restrict",{"_index":1294,"title":{},"name":{},"text":{"8":{}},"component":{}}],["result",{"_index":560,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["retain",{"_index":1190,"title":{},"name":{},"text":{"8":{}},"component":{}}],["retroact",{"_index":1285,"title":{},"name":{},"text":{"8":{}},"component":{}}],["return",{"_index":514,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"9":{}},"component":{}}],["revert",{"_index":819,"title":{},"name":{},"text":{"6":{}},"component":{}}],["revis",{"_index":1137,"title":{},"name":{},"text":{"8":{}},"component":{}}],["right",{"_index":735,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["risk",{"_index":1228,"title":{},"name":{},"text":{"8":{}},"component":{}}],["root",{"_index":106,"title":{},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["royalti",{"_index":1160,"title":{},"name":{},"text":{"8":{}},"component":{}}],["run",{"_index":134,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"9":{}},"component":{}}],["runtim",{"_index":1034,"title":{},"name":{},"text":{"7":{}},"component":{}}],["s",{"_index":880,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["s/#defin",{"_index":936,"title":{},"name":{},"text":{"7":{}},"component":{}}],["same",{"_index":563,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["save",{"_index":785,"title":{},"name":{},"text":{"5":{}},"component":{}}],["schema",{"_index":84,"title":{"2-1":{}},"name":{},"text":{"2":{}},"component":{}}],["schema=https://mrdocs.com/docs/mrdocs/develop/_attachments/mrdocs.schema.json",{"_index":133,"title":{},"name":{},"text":{"2":{}},"component":{}}],["script",{"_index":144,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{}},"component":{}}],["search",{"_index":197,"title":{},"name":{},"text":{"2":{}},"component":{}}],["second",{"_index":437,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["secondari",{"_index":775,"title":{},"name":{},"text":{"5":{}},"component":{}}],["section",{"_index":66,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"7":{},"8":{}},"component":{}}],["section(",{"_index":1289,"title":{},"name":{},"text":{"8":{}},"component":{}}],["sed",{"_index":935,"title":{},"name":{},"text":{"7":{}},"component":{}}],["see",{"_index":248,"title":{},"name":{},"text":{"2":{},"7":{},"8":{},"9":{}},"component":{}}],["see_below",{"_index":252,"title":{},"name":{},"text":{"2":{}},"component":{}}],["sell",{"_index":1168,"title":{},"name":{},"text":{"8":{}},"component":{}}],["semant",{"_index":574,"title":{},"name":{},"text":{"3":{}},"component":{}}],["sent",{"_index":1149,"title":{},"name":{},"text":{"8":{}},"component":{}}],["sentenc",{"_index":61,"title":{},"name":{},"text":{"1":{}},"component":{}}],["separ",{"_index":908,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["serv",{"_index":1085,"title":{},"name":{},"text":{"7":{}},"component":{}}],["server",{"_index":125,"title":{},"name":{},"text":{"2":{}},"component":{}}],["servic",{"_index":1212,"title":{},"name":{},"text":{"8":{}},"component":{}}],["set",{"_index":260,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"9":{}},"component":{}}],["set(include_dir",{"_index":1345,"title":{},"name":{},"text":{"9":{}},"component":{}}],["set(temp_cpp_fil",{"_index":1350,"title":{},"name":{},"text":{"9":{}},"component":{}}],["sever",{"_index":393,"title":{},"name":{},"text":{"3":{}},"component":{}}],["sfina",{"_index":332,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["sha1",{"_index":549,"title":{},"name":{},"text":{"3":{}},"component":{}}],["shall",{"_index":1101,"title":{},"name":{},"text":{"8":{}},"component":{}}],["shallow",{"_index":885,"title":{},"name":{},"text":{"7":{}},"component":{}}],["share",{"_index":600,"title":{},"name":{},"text":{"3":{},"7":{},"8":{}},"component":{}}],["share/cmake/—cmak",{"_index":603,"title":{},"name":{},"text":{"3":{}},"component":{}}],["share/gdb/—gdb",{"_index":604,"title":{},"name":{},"text":{"3":{}},"component":{}}],["share/mrdocs/addon",{"_index":304,"title":{},"name":{},"text":{"2":{}},"component":{}}],["share/mrdocs/addons/gener",{"_index":181,"title":{},"name":{},"text":{"2":{}},"component":{}}],["share/mrdocs/clang",{"_index":288,"title":{},"name":{},"text":{"2":{}},"component":{}}],["share/mrdocs/libcxx",{"_index":287,"title":{},"name":{},"text":{"2":{}},"component":{}}],["share/mrdocs/—shar",{"_index":607,"title":{},"name":{},"text":{"3":{}},"component":{}}],["share/—shar",{"_index":378,"title":{"3-17":{}},"name":{},"text":{"3":{}},"component":{}}],["show",{"_index":128,"title":{},"name":{},"text":{"2":{}},"component":{}}],["signatur",{"_index":688,"title":{},"name":{},"text":{"5":{}},"component":{}}],["signific",{"_index":803,"title":{},"name":{},"text":{"6":{}},"component":{}}],["significantli",{"_index":797,"title":{},"name":{},"text":{"6":{}},"component":{}}],["similar",{"_index":1319,"title":{},"name":{},"text":{"9":{}},"component":{}}],["simpl",{"_index":235,"title":{},"name":{},"text":{"2":{}},"component":{}}],["simpli",{"_index":199,"title":{},"name":{},"text":{"2":{},"9":{}},"component":{}}],["simplic",{"_index":870,"title":{},"name":{},"text":{"7":{}},"component":{}}],["simplifi",{"_index":1325,"title":{},"name":{},"text":{"9":{}},"component":{}}],["singl",{"_index":49,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"9":{}},"component":{}}],["sink",{"_index":269,"title":{},"name":{},"text":{"2":{}},"component":{}}],["skip",{"_index":943,"title":{},"name":{},"text":{"7":{}},"component":{}}],["slack",{"_index":672,"title":{},"name":{},"text":{"3":{}},"component":{}}],["slash",{"_index":623,"title":{},"name":{},"text":{"3":{}},"component":{}}],["small",{"_index":754,"title":{},"name":{},"text":{"5":{}},"component":{}}],["softwar",{"_index":1128,"title":{},"name":{},"text":{"8":{}},"component":{}}],["sole",{"_index":1227,"title":{},"name":{},"text":{"8":{}},"component":{}}],["solut",{"_index":761,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["somewhat",{"_index":1020,"title":{},"name":{},"text":{"7":{}},"component":{}}],["sourc",{"_index":105,"title":{"3-16":{},"7-2":{}},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["sourcefil",{"_index":511,"title":{},"name":{},"text":{"3":{}},"component":{}}],["spatial",{"_index":711,"title":{},"name":{},"text":{"5":{}},"component":{}}],["special",{"_index":69,"title":{},"name":{},"text":{"1":{},"3":{},"8":{},"9":{}},"component":{}}],["specializationinfo",{"_index":473,"title":{},"name":{},"text":{"3":{}},"component":{}}],["specif",{"_index":226,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"8":{},"9":{}},"component":{}}],["specifi",{"_index":100,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"9":{}},"component":{}}],["src",{"_index":1321,"title":{},"name":{},"text":{"9":{}},"component":{}}],["src/duk_config.h",{"_index":939,"title":{},"name":{},"text":{"7":{}},"component":{}}],["src/lib/ast/astvisitor.cpp",{"_index":530,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/ast/—th",{"_index":591,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/dom/—th",{"_index":592,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/gen/—gener",{"_index":593,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/lib/configimpl.hpp",{"_index":424,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/lib/corpusimpl.cpp",{"_index":525,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/lib/—th",{"_index":594,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/metadata/finalize.cpp",{"_index":571,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/metadata/—info",{"_index":595,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/support/—vari",{"_index":596,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/lib/—th",{"_index":590,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/test/testmain.cpp",{"_index":642,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/test/—th",{"_index":597,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/test_suite/test_suite.cpp",{"_index":649,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/test_suite/—th",{"_index":598,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/tool/generateaction.cpp",{"_index":411,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/tool/toolargs.hpp",{"_index":414,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/tool/—th",{"_index":599,"title":{},"name":{},"text":{"3":{}},"component":{}}],["src/—the",{"_index":377,"title":{"3-16":{}},"name":{},"text":{},"component":{}}],["src\\duk_config.h",{"_index":932,"title":{},"name":{},"text":{"7":{}},"component":{}}],["stabl",{"_index":1336,"title":{},"name":{},"text":{"9":{}},"component":{}}],["stack",{"_index":636,"title":{},"name":{},"text":{"3":{}},"component":{}}],["stage",{"_index":434,"title":{},"name":{},"text":{"3":{}},"component":{}}],["standard",{"_index":285,"title":{"3-20":{}},"name":{},"text":{"2":{},"3":{},"7":{}},"component":{}}],["start",{"_index":1317,"title":{},"name":{},"text":{"9":{}},"component":{}}],["state",{"_index":1167,"title":{},"name":{},"text":{"8":{}},"component":{}}],["statement",{"_index":1200,"title":{},"name":{},"text":{"8":{}},"component":{}}],["static",{"_index":55,"title":{},"name":{},"text":{"1":{},"7":{}},"component":{}}],["std::enable_if",{"_index":334,"title":{},"name":{},"text":{"2":{}},"component":{}}],["std::string",{"_index":34,"title":{},"name":{},"text":{"1":{}},"component":{}}],["stdlib",{"_index":283,"title":{},"name":{},"text":{"2":{}},"component":{}}],["step",{"_index":413,"title":{},"name":{},"text":{"3":{},"6":{},"7":{},"9":{}},"component":{}}],["stop",{"_index":352,"title":{},"name":{},"text":{"2":{}},"component":{}}],["stoppag",{"_index":1247,"title":{},"name":{},"text":{"8":{}},"component":{}}],["store",{"_index":31,"title":{},"name":{},"text":{"1":{},"3":{}},"component":{}}],["strategi",{"_index":291,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["string",{"_index":282,"title":{},"name":{},"text":{"2":{},"7":{}},"component":{}}],["strong",{"_index":79,"title":{},"name":{},"text":{"1":{}},"component":{}}],["struct",{"_index":33,"title":{},"name":{},"text":{"1":{},"3":{}},"component":{}}],["structur",{"_index":163,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{}},"component":{}}],["studio",{"_index":1052,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["style",{"_index":0,"title":{"1-1":{}},"name":{},"text":{"1":{},"2":{},"5":{}},"component":{}}],["subdirectori",{"_index":602,"title":{},"name":{},"text":{"3":{}},"component":{}}],["subject",{"_index":1155,"title":{},"name":{},"text":{"8":{}},"component":{}}],["sublicens",{"_index":1165,"title":{},"name":{},"text":{"8":{}},"component":{}}],["submiss",{"_index":1202,"title":{},"name":{},"text":{"8":{}},"component":{}}],["submit",{"_index":1144,"title":{},"name":{},"text":{"8":{}},"component":{}}],["subopt",{"_index":321,"title":{},"name":{},"text":{"2":{}},"component":{}}],["suboptim",{"_index":808,"title":{},"name":{},"text":{"6":{}},"component":{}}],["subsequ",{"_index":1154,"title":{},"name":{},"text":{"8":{}},"component":{}}],["subset",{"_index":241,"title":{},"name":{},"text":{"2":{}},"component":{}}],["subsum",{"_index":242,"title":{},"name":{},"text":{"2":{}},"component":{}}],["subvert",{"_index":741,"title":{},"name":{},"text":{"5":{}},"component":{}}],["such",{"_index":70,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"7":{},"8":{},"9":{}},"component":{}}],["suggest",{"_index":355,"title":{},"name":{},"text":{"2":{}},"component":{}}],["suit",{"_index":641,"title":{},"name":{},"text":{"3":{}},"component":{}}],["summari",{"_index":713,"title":{},"name":{},"text":{"5":{}},"component":{}}],["supersed",{"_index":1207,"title":{},"name":{},"text":{"8":{}},"component":{}}],["support",{"_index":150,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{},"8":{}},"component":{}}],["suppos",{"_index":691,"title":{},"name":{},"text":{"5":{}},"component":{}}],["supress",{"_index":450,"title":{},"name":{},"text":{"3":{}},"component":{}}],["switch",{"_index":1330,"title":{},"name":{},"text":{"9":{}},"component":{}}],["symbol",{"_index":90,"title":{"2-6":{},"2-8":{},"3-6":{}},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["symbolid",{"_index":552,"title":{},"name":{},"text":{"3":{}},"component":{}}],["symlink",{"_index":907,"title":{},"name":{},"text":{"7":{}},"component":{}}],["syntax",{"_index":1265,"title":{},"name":{},"text":{"8":{}},"component":{}}],["syntaxonlyact",{"_index":521,"title":{},"name":{},"text":{"3":{}},"component":{}}],["system",{"_index":32,"title":{},"name":{},"text":{"1":{},"2":{},"7":{},"8":{},"9":{}},"component":{}}],["take",{"_index":37,"title":{},"name":{},"text":{"1":{},"2":{},"3":{}},"component":{}}],["tar",{"_index":919,"title":{},"name":{},"text":{"7":{}},"component":{}}],["tar.gz",{"_index":839,"title":{},"name":{},"text":{"7":{}},"component":{}}],["tar.xz",{"_index":838,"title":{},"name":{},"text":{"7":{}},"component":{}}],["target",{"_index":149,"title":{},"name":{},"text":{"2":{},"3":{},"9":{}},"component":{}}],["target_include_directories(my_project_mrdocs_target",{"_index":1361,"title":{},"name":{},"text":{"9":{}},"component":{}}],["target_link_libraries(my_project_mrdocs_target",{"_index":1363,"title":{},"name":{},"text":{"9":{}},"component":{}}],["td",{"_index":395,"title":{},"name":{},"text":{"3":{}},"component":{}}],["team",{"_index":1304,"title":{},"name":{},"text":{"8":{}},"component":{}}],["temp_cpp_fil",{"_index":1353,"title":{},"name":{},"text":{"9":{}},"component":{}}],["templat",{"_index":88,"title":{"2-4":{}},"name":{},"text":{"2":{},"3":{},"5":{},"6":{}},"component":{}}],["tempor",{"_index":703,"title":{},"name":{},"text":{"5":{}},"component":{}}],["temporari",{"_index":1338,"title":{},"name":{},"text":{"9":{}},"component":{}}],["tend",{"_index":753,"title":{},"name":{},"text":{"5":{}},"component":{}}],["term",{"_index":1097,"title":{},"name":{},"text":{"8":{}},"component":{}}],["termin",{"_index":1184,"title":{},"name":{},"text":{"8":{}},"component":{}}],["test",{"_index":164,"title":{"3-23":{}},"name":{},"text":{"2":{},"3":{},"7":{},"9":{}},"component":{}}],["text",{"_index":73,"title":{},"name":{},"text":{"1":{},"2":{},"8":{}},"component":{}}],["that’",{"_index":130,"title":{},"name":{},"text":{"2":{},"5":{},"7":{}},"component":{}}],["theori",{"_index":1233,"title":{},"name":{},"text":{"8":{}},"component":{}}],["thereof",{"_index":1142,"title":{},"name":{},"text":{"8":{}},"component":{}}],["third",{"_index":381,"title":{"3-19":{}},"name":{},"text":{"3":{},"5":{},"7":{},"8":{}},"component":{}}],["those",{"_index":556,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["thread",{"_index":339,"title":{},"name":{},"text":{"2":{}},"component":{}}],["three",{"_index":777,"title":{},"name":{},"text":{"5":{}},"component":{}}],["through",{"_index":1102,"title":{},"name":{},"text":{"8":{},"9":{}},"component":{}}],["thrown",{"_index":628,"title":{},"name":{},"text":{"3":{}},"component":{}}],["thu",{"_index":427,"title":{},"name":{},"text":{"3":{},"9":{}},"component":{}}],["time",{"_index":693,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["titl",{"_index":1223,"title":{},"name":{},"text":{"8":{}},"component":{}}],["tool",{"_index":166,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{}},"component":{}}],["tool(compilationdatabas",{"_index":510,"title":{},"name":{},"text":{"3":{}},"component":{}}],["tool.run",{"_index":526,"title":{},"name":{},"text":{"3":{}},"component":{}}],["tool.run(actionfactory.get",{"_index":515,"title":{},"name":{},"text":{"3":{}},"component":{}}],["toolarg",{"_index":415,"title":{},"name":{},"text":{"3":{}},"component":{}}],["toolargs::appli",{"_index":429,"title":{},"name":{},"text":{"3":{}},"component":{}}],["top",{"_index":1293,"title":{},"name":{},"text":{"8":{}},"component":{}}],["tort",{"_index":1234,"title":{},"name":{},"text":{"8":{}},"component":{}}],["trace",{"_index":637,"title":{},"name":{},"text":{"3":{}},"component":{}}],["track",{"_index":1151,"title":{},"name":{},"text":{"8":{}},"component":{}}],["trade",{"_index":1211,"title":{},"name":{},"text":{"8":{}},"component":{}}],["trademark",{"_index":1191,"title":{},"name":{},"text":{"8":{}},"component":{}}],["transfer",{"_index":1169,"title":{},"name":{},"text":{"8":{}},"component":{}}],["transform",{"_index":448,"title":{},"name":{},"text":{"3":{},"6":{},"8":{}},"component":{}}],["translat",{"_index":539,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["translationunitdecl",{"_index":544,"title":{},"name":{},"text":{"3":{}},"component":{}}],["transport",{"_index":630,"title":{},"name":{},"text":{"3":{}},"component":{}}],["travers",{"_index":372,"title":{"3-10":{}},"name":{},"text":{"3":{}},"component":{}}],["tree",{"_index":198,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"8":{},"9":{}},"component":{}}],["triplet",{"_index":899,"title":{},"name":{},"text":{"7":{}},"component":{}}],["true",{"_index":292,"title":{},"name":{},"text":{"2":{}},"component":{}}],["truth",{"_index":724,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["tu",{"_index":561,"title":{},"name":{},"text":{"3":{}},"component":{}}],["two",{"_index":65,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"8":{},"9":{}},"component":{}}],["type",{"_index":267,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"8":{},"9":{}},"component":{}}],["typedef",{"_index":239,"title":{},"name":{},"text":{"2":{},"3":{},"5":{}},"component":{}}],["typedefinfo",{"_index":466,"title":{},"name":{},"text":{"3":{}},"component":{}}],["typic",{"_index":496,"title":{},"name":{},"text":{"3":{},"5":{},"7":{}},"component":{}}],["uncaught",{"_index":634,"title":{},"name":{},"text":{"3":{}},"component":{}}],["uncompl",{"_index":780,"title":{},"name":{},"text":{"5":{}},"component":{}}],["undef",{"_index":934,"title":{},"name":{},"text":{"7":{}},"component":{}}],["under",{"_index":1090,"title":{},"name":{},"text":{"8":{}},"component":{}}],["undermin",{"_index":812,"title":{},"name":{},"text":{"6":{}},"component":{}}],["understand",{"_index":747,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["unifi",{"_index":814,"title":{},"name":{},"text":{"6":{}},"component":{}}],["union",{"_index":1110,"title":{},"name":{},"text":{"8":{}},"component":{}}],["unit",{"_index":540,"title":{},"name":{},"text":{"3":{}},"component":{}}],["unit_test_main",{"_index":648,"title":{},"name":{},"text":{"3":{}},"component":{}}],["univers",{"_index":547,"title":{},"name":{},"text":{"3":{},"8":{}},"component":{}}],["unix",{"_index":893,"title":{},"name":{},"text":{"7":{}},"component":{}}],["unless",{"_index":1203,"title":{},"name":{},"text":{"8":{}},"component":{}}],["unlik",{"_index":1369,"title":{},"name":{},"text":{"9":{}},"component":{}}],["unmanag",{"_index":757,"title":{},"name":{},"text":{"5":{}},"component":{}}],["unnecessari",{"_index":1342,"title":{},"name":{},"text":{"9":{}},"component":{}}],["unread",{"_index":1382,"title":{},"name":{},"text":{"9":{}},"component":{}}],["unrecogn",{"_index":452,"title":{},"name":{},"text":{"3":{}},"component":{}}],["unsign",{"_index":337,"title":{},"name":{},"text":{"2":{}},"component":{}}],["unspecifi",{"_index":790,"title":{},"name":{},"text":{"5":{}},"component":{}}],["unstabl",{"_index":506,"title":{},"name":{},"text":{"3":{}},"component":{}}],["unwant",{"_index":979,"title":{},"name":{},"text":{"7":{}},"component":{}}],["unwind",{"_index":1050,"title":{},"name":{},"text":{"7":{}},"component":{}}],["up",{"_index":744,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["urbana",{"_index":1301,"title":{},"name":{},"text":{"8":{}},"component":{}}],["uri",{"_index":912,"title":{},"name":{},"text":{"7":{}},"component":{}}],["url",{"_index":302,"title":{},"name":{},"text":{"2":{}},"component":{}}],["us",{"_index":47,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["usabl",{"_index":799,"title":{},"name":{},"text":{"6":{}},"component":{}}],["usag",{"_index":111,"title":{"9":{}},"name":{"9":{}},"text":{"2":{},"9":{}},"component":{}}],["user",{"_index":183,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{},"9":{}},"component":{}}],["user’",{"_index":770,"title":{},"name":{},"text":{"5":{}},"component":{}}],["usinginfo",{"_index":487,"title":{},"name":{},"text":{"3":{}},"component":{}}],["usr",{"_index":373,"title":{"3-11":{}},"name":{},"text":{"3":{}},"component":{}}],["usual",{"_index":15,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"9":{}},"component":{}}],["util",{"_index":589,"title":{},"name":{},"text":{"3":{}},"component":{}}],["v0.0.1",{"_index":683,"title":{},"name":{},"text":{"4":{},"7":{}},"component":{}}],["v0.0.2",{"_index":684,"title":{},"name":{},"text":{"4":{},"7":{}},"component":{}}],["v2.0",{"_index":1092,"title":{},"name":{},"text":{"8":{}},"component":{}}],["v2.12.6",{"_index":945,"title":{},"name":{},"text":{"7":{}},"component":{}}],["valid",{"_index":1370,"title":{},"name":{},"text":{"9":{}},"component":{}}],["valu",{"_index":268,"title":{},"name":{},"text":{"2":{},"7":{}},"component":{}}],["vari",{"_index":626,"title":{},"name":{},"text":{"3":{}},"component":{}}],["variabl",{"_index":469,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["variableinfo",{"_index":468,"title":{},"name":{},"text":{"3":{}},"component":{}}],["variant",{"_index":894,"title":{},"name":{},"text":{"7":{}},"component":{}}],["variou",{"_index":168,"title":{},"name":{},"text":{"2":{},"6":{},"7":{}},"component":{}}],["vcpkg",{"_index":891,"title":{},"name":{},"text":{"7":{}},"component":{}}],["vcpkg.bat",{"_index":897,"title":{},"name":{},"text":{"7":{}},"component":{}}],["vcpkg.ex",{"_index":898,"title":{},"name":{},"text":{"7":{}},"component":{}}],["vcpkg.json",{"_index":905,"title":{},"name":{},"text":{"7":{}},"component":{}}],["vcpkg.json.exampl",{"_index":906,"title":{},"name":{},"text":{"7":{}},"component":{}}],["vcpkg.sh",{"_index":901,"title":{},"name":{},"text":{"7":{}},"component":{}}],["verbal",{"_index":1147,"title":{},"name":{},"text":{"8":{}},"component":{}}],["verbos",{"_index":341,"title":{},"name":{},"text":{"2":{}},"component":{}}],["veri",{"_index":772,"title":{},"name":{},"text":{"5":{}},"component":{}}],["version",{"_index":738,"title":{},"name":{},"text":{"5":{},"6":{},"7":{},"8":{},"9":{}},"component":{}}],["via",{"_index":153,"title":{},"name":{},"text":{"2":{},"3":{},"5":{}},"component":{}}],["visit",{"_index":351,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["visitor",{"_index":499,"title":{},"name":{},"text":{"3":{}},"component":{}}],["visual",{"_index":1051,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["void",{"_index":42,"title":{},"name":{},"text":{"1":{},"2":{}},"component":{}}],["waiv",{"_index":1288,"title":{},"name":{},"text":{"8":{}},"component":{}}],["walk",{"_index":542,"title":{},"name":{},"text":{"3":{}},"component":{}}],["want",{"_index":874,"title":{},"name":{},"text":{"7":{},"9":{}},"component":{}}],["warn",{"_index":299,"title":{},"name":{},"text":{"2":{},"3":{}},"component":{}}],["warranti",{"_index":1218,"title":{},"name":{},"text":{"8":{}},"component":{}}],["way",{"_index":203,"title":{},"name":{},"text":{"2":{},"5":{},"9":{}},"component":{}}],["webrequest",{"_index":911,"title":{},"name":{},"text":{"7":{}},"component":{}}],["websit",{"_index":889,"title":{},"name":{},"text":{"7":{}},"component":{}}],["well",{"_index":739,"title":{},"name":{},"text":{"5":{},"6":{}},"component":{}}],["whatev",{"_index":441,"title":{},"name":{},"text":{"3":{}},"component":{}}],["wherev",{"_index":1195,"title":{},"name":{},"text":{"8":{}},"component":{}}],["whether",{"_index":307,"title":{},"name":{},"text":{"2":{},"3":{},"8":{}},"component":{}}],["whole",{"_index":1140,"title":{},"name":{},"text":{"8":{}},"component":{}}],["wide",{"_index":1086,"title":{},"name":{},"text":{"7":{}},"component":{}}],["wildcard",{"_index":212,"title":{},"name":{},"text":{"2":{}},"component":{}}],["win",{"_index":1002,"title":{},"name":{},"text":{"7":{}},"component":{}}],["win64.7z",{"_index":844,"title":{},"name":{},"text":{"7":{}},"component":{}}],["win64.msi",{"_index":847,"title":{},"name":{},"text":{"7":{}},"component":{}}],["win64.zip",{"_index":849,"title":{},"name":{},"text":{"7":{}},"component":{}}],["window",{"_index":625,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["within",{"_index":253,"title":{},"name":{},"text":{"2":{},"6":{},"8":{}},"component":{}}],["without",{"_index":170,"title":{},"name":{},"text":{"2":{},"3":{},"6":{},"8":{}},"component":{}}],["word",{"_index":697,"title":{},"name":{},"text":{"5":{}},"component":{}}],["work",{"_index":532,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"8":{},"9":{}},"component":{}}],["workaround",{"_index":731,"title":{},"name":{},"text":{"5":{}},"component":{}}],["workflow",{"_index":172,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["worldwid",{"_index":1158,"title":{},"name":{},"text":{"8":{}},"component":{}}],["worri",{"_index":781,"title":{},"name":{},"text":{"5":{}},"component":{}}],["worst",{"_index":699,"title":{},"name":{},"text":{"5":{}},"component":{}}],["write",{"_index":159,"title":{},"name":{},"text":{"2":{},"5":{},"7":{},"8":{}},"component":{}}],["written",{"_index":237,"title":{},"name":{},"text":{"2":{},"3":{},"8":{}},"component":{}}],["x64",{"_index":900,"title":{},"name":{},"text":{"7":{}},"component":{}}],["xf",{"_index":920,"title":{},"name":{},"text":{"7":{}},"component":{}}],["xml",{"_index":156,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"5":{}},"component":{}}],["yaml",{"_index":83,"title":{"2-1":{}},"name":{},"text":{"2":{},"3":{}},"component":{}}],["yml",{"_index":655,"title":{},"name":{},"text":{"3":{}},"component":{}}],["you’r",{"_index":1318,"title":{},"name":{},"text":{"9":{}},"component":{}}],["yyyi",{"_index":1269,"title":{},"name":{},"text":{"8":{}},"component":{}}],["zi",{"_index":1012,"title":{},"name":{},"text":{"7":{}},"component":{}}],["zip",{"_index":837,"title":{},"name":{},"text":{"7":{}},"component":{}}]],"pipeline":["stemmer"]},"store":{"documents":{"1":{"id":1,"text":"Documenting the Code arrow_back arrow_forward The code should be documented with the Doc Comment format, also informally known as \"javadoc\" format or Doxygen-style comments. In its most basic form, these are usually comment blocks between /** and */ placed above a class, function, or field declaration: /** The main information about a person This class represents a person with a name and an age. This is the information about a person that we need to store in our system. */ struct person { std::string name; int age; } /** A function to greet a person This function takes a person and prints a greeting message. @param p The person to greet */ void greet(person const& p); A common alternative is to use ///, especially for single-line comments: /// A constant representing the number of hours in a day static constexpr int hours_in_day = 24; Both the class and the function above have doc comments with a brief sentence and a detailed description. Most doc comments will contain these two sections, which could also be explicitly marked with @brief and @details commands. Doc comments can also contain a number of special commands such as @param that are used to document the parameters of a function. The following commands can be used to format the text in the doc comments: Command Description @a Formats the text in italics @e Formats the text in italics @em Formats the text in italics @b Formats the text in bold @strong Formats the text in bold Edit this Page","title":"Commands","component":"mrdocs","version":"develop","name":"commands","url":"/mrdocs/develop/commands.html","titles":[{"text":"Style","hash":"_style","id":1}]},"2":{"id":2,"text":"The Configuration File arrow_back arrow_forward MrDocs uses a configuration file to control how the documentation is generated. The file is used to specify options such as the generator to use, additional compilation options, and filters. Here’s an example of a configuration file: source-root: ../include multipage: false generate: adoc The Usage page provides a detailed explanation of what to combine options from the configuration file and the command line. The Reference section provides a detailed explanation of the options available. To get linting and autocompletion in the config file, a schema for the config can be specified. In JetBrains IDEs, # $schema: can be used to bind a schema to a file. In editors with plugins based on the YAML language server, # yaml-language-server: $schema= can be used. The schema for mrdocs.yml is provided here. The following shows an example of a file specifying an inline-schema that’s compatible with JetBrains IDEs and editors using the YAML language server. # $schema: https://mrdocs.com/docs/mrdocs/develop/_attachments/mrdocs.schema.json # yaml-language-server: $schema=https://mrdocs.com/docs/mrdocs/develop/_attachments/mrdocs.schema.json source-root: ../include multipage: false generate: adoc A number of options can be used to specify with which compile options MrDocs should be run. source-root: .. compilation-database: ../CMakeLists.txt cmake: '-D MRDOCS_BUILD=ON' defines: 'MRDOCS_BUILD' The compile options primarily come from the compilation-database file. When this file is generated from a CMakeLists.txt script, the cmake option can be used to specify additional options to pass to CMake. Additionally, the defines option can be used to specify preprocessor definitions that should be used when generating the documentation. These definitions are included in all targets of the compilation database. MrDocs supports multiple output formats that can be specified via the generate option: Format Description adoc AsciiDoc format. html HTML format. xml XML format. Asciidoc is a text-based format that is easy to read and write. It can also be converted to other formats such as HTML and Markdown. HTML can be generated directly with the html format. XML is a structured format that can be used in tests or as an intermediary format for other tools. The generate option can be used to specify the output format: # ... generate: adoc # ... MrDocs attempts to support various alternatives for customizing the output format and style without complex workflows to post-process XML output. For the Asciidoc and HTML generators, the desired customization can usually be achieved by modifying the templates used to generate the output. In the root of the installation directory, you will find the share/mrdocs/addons/generator directory. This directory contains the templates used to generate the documentation with the markup formats. Users can create a copy of these files and provide their own addons directory via the addons option. This allows users to customize the output format to their needs. addons: /path/to/custom/addons One advantage of custom templates over post-processing XML files is the ability to access symbols as a graph. If symbol A refers to symbol B, some properties of symbol B are likely to be required in the documentation of A. All templates and generators can access a reference to B by searching the symbol tree or simply by accessing the elements A refers to. Not all symbols in a project may be relevant to the documentation. MrDocs provides a way to filter out symbols based on their names. filters: symbols: (1) exclude: (2) include: (3) 1 Optional symbols key 2 Optional exclude key 3 Optional include key Symbol filter patterns are specified using (optionally) qualified names, and may contain wildcards: filters: symbols: exclude: - 'A::B' - 'A::f*' If a symbol matches a pattern in the exclude list, that symbol and its members will not be extracted: filters: symbols: exclude: - 'A' // ok, does not match any excluded pattern void f0(); namespace A // matches the pattern 'A', will not be extracted { // enclosing namespace matches an excluded pattern: // the symbol will not be extracted void f1(); } The filters.symbols.include key can be used to override the exclude list for specific symbols. A symbol which matches an included pattern and an excluded pattern will be extracted. This permits fine-grained control of extraction for individual members of a class or namespace: filters: symbols: exclude: - 'A' include: - 'A::g*' namespace A { // enclosing namespace matches an excluded pattern, will not be extracted void f0(); // ok, matches the pattern 'A::g*' which overrides the exclude list void g0(); } In order for a filter pattern to match a symbol, it must consist of simple identifiers that match the name as written in its declaration: namespace aliases, typedef-names, and decltype specifiers naming the symbol cannot be used. Specifying include patterns is only useful when the pattern would match a subset of symbols matched by an exclude pattern. An include pattern without a subsuming exclude pattern will be ignored. Symbols can also be filtered based on the files they are declared in. This can be useful for excluding files that exclusively contain implementation details or test code. input: include: - ../include (1) file-patterns: - *.hpp (2) 1 A list of directories to include. Only symbols defined in these files will be extracted. 2 A list of file patterns to include. Only symbols defined in files matching these patterns will be extracted. The implementation-detail and see-below options can be used to designate namespaces as implementation detail namespaces. implementation-detail: 'impl' see-below: 'see_below' If a namespace is designated as an implementation detail namespace, all symbols within that namespace will be marked as implementation details in the documentation. namespace impl { class A {}; } /// @brief A foo function A foo(); The impl namespace is designated as an implementation detail namespace, so all symbols within it will be marked as implementation details in the documentation. This means the symbol A would not be documented and the function foo could be documented as follows: /* implementation detail */ foo(); On the other hand, if a namespace is designated as a see_below namespace, all symbols within that namespace will be marked as \"see below\" in the documentation. namespace see_below { class B {}; } In the documentation, the symbol B would be marked as \"see-below\" and could be documented as: class B { /* see below */ }; The following options can be defined both in the configuration file and on the command line, where the command line options always take precedence. Options that can only be provided via the command line The following options can be used to control the general behavior of MrDocs and can only be provided via the command line. These include options to specify inputs and the configuration file, which cannot be set on the configuration file itself. Name Description Default inputs (list of paths) (Command line only) Configuration or compilation database files [] config (file path) (Required, Command line only) MrDocs configuration file \"/mrdocs.yml\" inputs Configuration or compilation database files The inputs are configuration files or compilation database files that used to generate the documentation. When the input ends with mrdocs.yml, it is interpreted as a configuration file, the file is read and the options are used to generate the documentation as if it was provided to the config option. When the input ends with compilation_database.json or CMakeLists.txt, it is interpreted as a compilation database file, the file is read and the compiler flags are used to generate the documentation as if it was provided to the compilation-database option. Type: list of paths Command line only Default value: [] This command is a command line sink. Any command line argument that is not recognized by the parser will be passed to this command. config MrDocs configuration file The configuration file is a YAML file that contains the options used to generate the documentation. The configuration file is read and the options are used to generate the documentation. The configuration file can be used to specify the source code, the output directory, the compilation database, the generator, and the filters. Type: file path Required Command line only Default value: \"/mrdocs.yml\" Relative paths are relative to: \"\" Paths to the source code and output directories Name Description Default source-root (directory path) Path to the root directory of the source code \"\" output (path) Directory or file for generating output \"/reference-output\" compilation-database (file path) Path to the compilation database source-root Path to the root directory of the source code Type: directory path Default value: \"\" Relative paths are relative to: \"\" output Directory or file for generating output Multipage generators expect a directory. Single page generators expect a file or a directory where the file will be created. If the directory does not exist, it will be created. Type: path Default value: \"/reference-output\" Relative paths are relative to: \"\" compilation-database Path to the compilation database Path to the compilation database or a build script to generate it. The compilation database is a JSON file that contains the compiler commands used to build the source code. The compilation database is used to extract the compiler flags and the source files used to build the source code and extract symbols. This option also accepts the path to a build script such as CMakeLists.txt to be used to generate the compilation database. In this case, MrDocs will look for CMake in PATH or in CMAKE_ROOT and run the script to generate the compilation database file. Type: file path Default value: Relative paths are relative to: \"\" Options for building the source code When MrDocs is responsible to running the build scripts and generating the compilation database, these options are used to build the source code. Name Description Default cmake (string) CMake arguments when generating the compilation database from CMakeLists.txt defines (list of strings) Additional defines passed to the compiler [] use-system-stdlib (boolean) Use the system standard library false stdlib-includes (list of paths) Standard Library include paths [\"/share/mrdocs/libcxx\", \"/share/mrdocs/clang\"] system-includes (list of paths) System include paths [] includes (list of paths) Include paths [] cmake CMake arguments when generating the compilation database from CMakeLists.txt When the compilation-database option is a CMakeLists.txt file, these arguments are passed to the cmake command to generate the compilation_database.json. Type: string Default value: defines Additional defines passed to the compiler Additional defines passed to the compiler when building the source code. These defines are added to the compilation database regardless of the strategy to generate it. Type: list of strings Default value: [] use-system-stdlib Use the system standard library True if the compiler has to use just the system standard library. When set to true, the compiler uses the system standard library instead of the standard library provided by the compiler. Type: boolean Default value: false stdlib-includes Standard Library include paths Standard Library include paths. These paths are used to replace the standard library paths provided by the compiler. Type: list of paths Default value: [\"/share/mrdocs/libcxx\", \"/share/mrdocs/clang\"] Relative paths are relative to: \"\" system-includes System include paths System include paths. These paths are used to add directories to the system include search path. The system include search path is used to search for system headers. The system headers are headers that are provided by the system and are not part of the project. The system headers are used to provide the standard library headers and other system headers. The system headers are not part of the project and are not checked for warnings and errors. Type: list of paths Default value: [] includes Include paths Include paths. These paths are used to add directories to the include search path. The include search path is used to search for headers. The headers are used to provide declarations and definitions of symbols. The headers are part of the project and are checked for warnings and errors. Type: list of paths Default value: [] Generators to create the documentation and their options Name Description Default generate (enum) Generator used to create the documentation \"adoc\" multipage (boolean) Generate a multipage documentation true base-url (string) Base URL for links to source code addons (path) Path to the Addons directory \"/share/mrdocs/addons\" generate Generator used to create the documentation Type: enum Default value: \"adoc\" Allowed values: [\"adoc\", \"html\", \"xml\"] multipage Generate a multipage documentation Generates a multipage documentation. The output directory must be a directory. This option acts as a hint to the generator to create a multipage documentation. Whether the hint is followed or not depends on the generator. Type: boolean Default value: true base-url Base URL for links to source code Base URL for links to source code. The base URL is used to create links to the source code in the documentation. The base URL is combined with the path to the source file to create the link. Type: string Default value: addons Path to the Addons directory Path to the Addons directory. The Addons directory contains the template files used by generators to create the documentation. When a custom Addons directory is not specified, the default templates are used. The default templates are located at the share/mrdocs/addons directory of the MrDocs installation. Users can create custom templates by copying the default templates to a custom directory and specifying the custom directory using this option. Type: path Default value: \"/share/mrdocs/addons\" Relative paths are relative to: \"\" Filters to include or exclude files and symbols from the documentation Name Description Default referenced-declarations (enum) Extraction policy for references to external declarations \"dependency\" anonymous-namespaces (enum) Extraction policy for anonymous namespaces \"always\" inaccessible-members (enum) Extraction policy for inaccessible members \"always\" inaccessible-bases (enum) Extraction policy for inaccessible base classes \"always\" see-below (list of strings) Namespaces for symbols rendered as \"see-below\" [] implementation-defined (list of strings) Namespaces for symbols rendered as \"implementation-defined\" [] input (object) Include files to extract filters (object) Filters referenced-declarations Extraction policy for references to external declarations Determine whether external declarations should be extracted when they are referenced in the source code. When set to always, external declarations are always extracted. When set to dependency, external declarations are extracted only if they are referenced by the source code. When set to never, external declarations are never extracted. Type: enum Default value: \"dependency\" Allowed values: [\"always\", \"dependency\", \"never\"] anonymous-namespaces Extraction policy for anonymous namespaces Determine whether symbols in anonymous namespaces should be extracted. When set to always, symbols in anonymous namespaces are always extracted. When set to dependency, symbols in anonymous namespaces are extracted only if they are referenced by the source code. When set to never, symbols in anonymous namespaces are never extracted. Type: enum Default value: \"always\" Allowed values: [\"always\", \"dependency\", \"never\"] inaccessible-members Extraction policy for inaccessible members Determine whether inaccessible members should be extracted. When set to always, inaccessible members are always extracted. When set to dependency, inaccessible members are extracted only if they are referenced by the source code. When set to never, inaccessible members are never extracted. Type: enum Default value: \"always\" Allowed values: [\"always\", \"dependency\", \"never\"] inaccessible-bases Extraction policy for inaccessible base classes Determine whether inaccessible base classes should be extracted. When set to always, inaccessible base classes are always extracted. When set to dependency, inaccessible base classes are extracted only if they are referenced by the source code. When set to never, inaccessible base classes are never extracted. Type: enum Default value: \"always\" Allowed values: [\"always\", \"dependency\", \"never\"] see-below Namespaces for symbols rendered as \"see-below\" Namespaces for symbols rendered as \"see-below\". Symbols in these namespaces are not extracted and are rendered as \"see-below\" in the documentation. This option is used to exclude symbols from the documentation that are considered part of the private API of the project. Type: list of strings Default value: [] implementation-defined Namespaces for symbols rendered as \"implementation-defined\" Namespaces for symbols rendered as \"implementation-defined\". Symbols in these namespaces are not extracted and are rendered as \"implementation-defined\" in the documentation. This option is used to exclude symbols from the documentation that are considered part of the private API of the project. Type: list of strings Default value: [] input Include files to extract Include files to extract. Only the files listed in this option are extracted. The paths are relative to the mrdocs configuration file. Type: object (See below) filters Filters Type: object (See below) input suboptions Name Description Default input.include (list of paths) Input directories to include [] input.file-patterns (list of strings) File patterns to include [] input.include Input directories to include Input directories to include. Only the files in these directories are extracted. The paths are relative to the mrdocs configuration file. Type: list of paths Default value: [] input.file-patterns File patterns to include File patterns to include. Only the files that match these patterns are extracted. The patterns are relative to the input directories. Type: list of strings Default value: [] filters suboptions Name Description Default filters.symbols (object) Symbol filters filters.symbols Symbol filters Symbol filters. Symbols that match these filters are extracted. The filters are applied to the fully qualified name of the symbol. Type: object (See below) symbols suboptions Name Description Default filters.symbols.include (list of strings) Specifies symbol inclusion patterns [] filters.symbols.exclude (list of strings) Specifies symbol exclusion patterns [] filters.symbols.include Specifies symbol inclusion patterns Specifies symbol inclusion patterns. Symbols that match these patterns are extracted. The patterns are applied to the fully qualified name of the symbol. Type: list of strings Default value: [] filters.symbols.exclude Specifies symbol exclusion patterns Specifies symbol exclusion patterns. Symbols that match these patterns are not extracted. The patterns are applied to the fully qualified name of the symbol. Type: list of strings Default value: [] Metadata and C++ constructs to extract Name Description Default detect-sfinae (boolean) Detect SFINAE expressions true detect-sfinae Detect SFINAE expressions When set to true, MrDocs detects SFINAE expressions in the source code and extracts them as part of the documentation. Expressions such as std::enable_if are detected, removed, and documented as a requirement. Type: boolean Default value: true Miscellaneous options Name Description Default concurrency (unsigned integer) (Command line only) Number of threads to use 0 verbose (boolean) Verbose output false report (unsigned integer) The minimum reporting level: 0 to 4 1 ignore-map-errors (boolean) Continue if files are not mapped correctly false ignore-failures (boolean) Whether AST visitation failures should not stop the program false concurrency Number of threads to use The desired level of concurrency: 0 for hardware-suggested. Type: unsigned integer Command line only Default value: 0 Minimum value: 0 verbose Verbose output Verbose output. When set to true, MrDocs outputs additional information during the generation of the documentation. Type: boolean Default value: false report The minimum reporting level: 0 to 4 The reporting level determines the amount of information displayed during the generation of the documentation. The levels are: 0 - no output, 1 - errors only, 2 - errors and warnings, 3 - errors, warnings, and information, 4 - errors, warnings, information, and debug information. Type: unsigned integer Default value: 1 Minimum value: 0 Maximum value: 4 ignore-map-errors Continue if files are not mapped correctly When set to true, MrDocs continues to generate the documentation even if some files are not mapped correctly. Files are not mapped correctly when the source file is not found or the compilation database does not contain the compiler flags for the source file. Type: boolean Default value: false ignore-failures Whether AST visitation failures should not stop the program When set to true, MrDocs continues to generate the documentation even if there are AST visitation failures. AST visitation failures occur when the source code contains constructs that are not supported by MrDocs. Type: boolean Default value: false Edit this Page","title":"The Configuration File","component":"mrdocs","version":"develop","name":"config-file","url":"/mrdocs/develop/config-file.html","titles":[{"text":"YAML Schema","hash":"_yaml_schema","id":1},{"text":"Build Options","hash":"_build_options","id":2},{"text":"Generators","hash":"_generators","id":3},{"text":"Generator Templates","hash":"_generator_templates","id":4},{"text":"Filters","hash":"_filters","id":5},{"text":"Symbol Filters","hash":"_symbol_filters","id":6},{"text":"File Filters","hash":"_file_filters","id":7},{"text":"Private Symbols","hash":"_private_symbols","id":8},{"text":"Reference","hash":"config-options-reference","id":9},{"text":"\n\nCommand Line Options\n","hash":"_command_line_options_options_reference","id":10},{"text":"\n\nPaths\n","hash":"_paths_options_reference","id":11},{"text":"\n\nBuild options\n","hash":"_build_options_options_reference","id":12},{"text":"\n\nGenerators\n","hash":"_generators_options_reference","id":13},{"text":"\n\nFilters\n","hash":"_filters_options_reference","id":14},{"text":"\n\nMetadata\n","hash":"_metadata_options_reference","id":15},{"text":"\n\nMiscellaneous\n","hash":"_miscellaneous_options_reference","id":16}]},"3":{"id":3,"text":"Contributor’s Guide arrow_back arrow_forward This page contains information for contributors to the MrDocs project. It is intended to provide an overview of the codebase and the process of adding new features. The MrDocs codebase is divided into several modules: graph TD CL[Command Line Arguments] --> P CF[Configuration File] --> P P[Options] --> E P --> CD P --> G CD[Compilation Database] --> E E[Extract Symbols] -->|Corpus| G G[Generator] --> D(Documentation) This section provides an overview of each module and how they interact with each other in the MrDocs codebase. MrDocs options affect the behavior of the compilation database, how symbols are extracted, and how the documentation is generated. They are parsed from the command line and configuration file. The main entry point of MrDocs is the DoGenerateAction function in src/tool/GenerateAction.cpp. It loads the options, creates the compilation database, and runs the extraction and generation steps. The options formed from a combination of command line arguments and configuration file settings. Command line and common options are defined in src/tool/ToolArgs.hpp. The ToolArgs class uses the llvm::cl library to define and parse the command line arguments. Common options are defined in mrdocs/Config.hpp. The Config class represents all public options that could be defined in a configuration file. It also provides a representation plugins can use to access public options from the command line or configuration file. The function clang::mrdocs::loadConfig is also provided to parse all public options from a YAML configuration file. Internally, MrDocs uses the derived clang::mrdocs::ConfigImpl class (src/lib/Lib/ConfigImpl.hpp) to also store the private representation of parsed options, such as filters. Common options are stored in the Config class, while the ToolArgs class stores common options and the command line options. For instance, the config option can only be set from the command line, as it would be illogical to expect the location of the configuration file to be defined in the configuration file itself. On the other hand, the output option can be set from both the command line and the configuration file so that the user can define a default output location in the configuration file. Thus, after the command line and configuration file options are parsed, they are finalized in the DoGenerateAction function by calling ToolArgs::apply, which overrides the configuration file options in Config with the command line options, when applicable. As a last step, DoGenerateAction converts the public Config settings into a ConfigImpl object, which is used by the rest of the program with the parsed options. At this stage, the clang frontend is used to parse the source code and generate an AST. The AST information is extracted and stored in a Corpus object (mrdocs/Corpus.hpp). The second step in DoGenerateAction is to create a CompilationDatabase object, so we can extract symbols from its source files. There are multiple possible sources for this file according to the configuration options: the file might be read directly from the path specified in the options, or it might be generated by MrDocs from build scripts. Whatever the source, a derived MrDocsCompilationDatabase object (lib/Lib/MrDocsCompilationDatabase.hpp) is created to represent the compilation database. The difference between the original CompilationDatabase and the MrDocsCompilationDatabase is that the latter includes a number of pre-processing steps to filter and transform compilation commands. For each compilation command: Command line arguments are adjusted Warnings are supressed Additional defines are added Implicit include directories are added Unrecognized arguments are removed Paths are normalized Non C++ files are filtered MrDocs represents each C++ symbol or construct as an Info node (mrdocs/Metadata/Info.hpp). MrDocs currently defines the following Info nodes: Name Description Declaration NamespaceInfo The symbol is a namespace mrdocs/Metadata/Namespace.hpp RecordInfo The symbol is a record (class or struct) mrdocs/Metadata/Record.hpp FunctionInfo The symbol is a function mrdocs/Metadata/Function.hpp EnumInfo The symbol is an enum mrdocs/Metadata/Enum.hpp TypedefInfo The symbol is a typedef mrdocs/Metadata/Typedef.hpp VariableInfo The symbol is a variable mrdocs/Metadata/Variable.hpp FieldInfo The symbol is a field mrdocs/Metadata/Field.hpp SpecializationInfo The symbol is a template specialization mrdocs/Metadata/Specialization.hpp FriendInfo The symbol is a friend declaration mrdocs/Metadata/Friend.hpp EnumeratorInfo The symbol is an enumerator mrdocs/Metadata/Enumerator.hpp GuideInfo The symbol is a deduction guide mrdocs/Metadata/Guide.hpp AliasInfo The symbol is a namespace alias mrdocs/Metadata/Alias.hpp UsingInfo The symbol is a using declaration mrdocs/Metadata/Using.hpp ConceptInfo The symbol is a concept mrdocs/Metadata/Concept.hpp Info can not only represent direct AST symbols but also C++ constructs that need to be inferred from these symbols. Nodes in the first category will typically be created in the initial extraction step, and nodes in the second category will be created in the finalization step. When defining a new Info type, it is important to consider how this type will be supported in all other modules of the codebase, including the AST visitor, generators, tests, and the documentation. The script .github/check_info_nodes_support.sh will attempt to infer whether most of these features have been implemented for each node type. MrDocs uses Clang to extract Info objects from the C++ AST. Clang offers two interfaces to access the C++ AST: the LibClang and LibTooling libraries. MrDocs uses the latter, as it provides full control over the AST traversal process at the cost of an unstable API. In LibTooling, once we have a Compilation Database, we can create a ClangTool object to run the Clang frontend on a set of source files. clang::tooling::ClangTool Tool(compilationDatabase, sourceFiles); newFrontendActionFactory actionFactory(); return Tool.run(actionFactory.get()); The clang::tooling::ClangTool::run method takes a clang::tooling::ToolAction object that defines how to process the AST. The action object that usually comes from a clang::tooling::FrontendActionFactory. In the example above, the SyntaxOnlyAction is used to parse the source code and generate the AST without any further processing. In MrDocs, this process happens in clang::mrdocs::CorpusImpl::build (src/lib/Lib/CorpusImpl.cpp), where we call Tool.run for each object in the database with our custom ASTAction action and ASTActionFactory factory (src/lib/AST/ASTVisitor.cpp). While ASTAction is the entry point for processing the AST, the real work is done by the ASTVisitor class. As the AST is generated, it is traversed by the ASTVisitor class. The entry point of this class is ASTVisitor::build, which recursively calls ASTVisitor::traverseDecl for the root clang::TranslationUnitDecl node of the translation unit. During the AST traversal stage, the complete AST generated by the clang frontend is walked beginning with this root TranslationUnitDecl node. Each clang node is converted into a mrdocs::Info node, which is then stored with any relevant information in a mrdocs::Corpus object. It is during this stage that USRs (universal symbol references) are generated and hashed with SHA1 to form the 160 bit SymbolID for an entity. Except for built-in types, all entities referenced in the corpus will be traversed and be assigned a SymbolID; including those from the standard library. This is necessary to generate the full interface for user-defined types. After running the AST traversal on all translation units, CorpusImpl::build contains finalization steps for the Corpus object. At this point, we process C++ constructs that are not directly represented in the AST. The first finalization step happens in CorpusImpl::build (src/lib/Lib/CorpusImpl.cpp), where the Info objects from a single translation unit are merged into a map containing the merged results from all other TUs. The merging step is necessary as there may be multiple identical definitions of the same entity. For instance, this represents the case where a function is declared at different points in the code base and might have different attributes or comments. At this step, the doc comments are also finalized. Each Info object has a pointer to its Javadoc object (mrdocs/Metadata/Javadoc.hpp), which is a representation of the documentation comments. After AST traversal and Info merging, the result is stored as a map of Info objects indexed by their respective SymbolID. A second finalization step is then performed in clang::mrdocs::finalize (src/lib/Metadata/Finalize.cpp), where any references to SymbolID objects that don’t exist are removed. This is necessary because the AST traversal will generate references to entities that should be filtered and are not present in the corpus. At this point, the Corpus object contains representations of all entities in the code base and further semantic C++ constructs that are not directly represented in the AST can be inferred. Documentation generators may traverse this structure by calling Corpus::traverse with a Corpus::Visitor derived visitor and the SymbolID of the entity to visit (e.g. the global namespace). Documentation generators are responsible for traversing the corpus and generating documentation in the desired format. The API for documentation generators is defined in mrdocs/Generator.hpp. The MrDocs codebase is organized as follows: This directory contains the public headers for the MrDocs library. include/mrdocs/—The core library headers include/mrdocs/ADT—Data Structures include/mrdocs/Dom—The Document Object Model for Abstract Trees include/mrdocs/Metadata—Info nodes and metadata classes include/mrdocs/Support—Various utility classes This directory contains the source code for the MrDocs library and private headers. src/lib/—The core library src/lib/AST/—The AST traversal code src/lib/Dom/—The Document Object Model for Abstract Trees src/lib/Gen/—Generators src/lib/Lib/—The core library classes src/lib/Metadata/—Info nodes and metadata classes src/lib/Support/—Various utility classes src/test/—The test directory src/test_suite/—The library used for testing src/tool/—The main program This directory contains shared resources for the documentation generators and utilities for developers. Its subdirectories are installed in the share directory of the installation. share/—Shared resources for the documentation generators share/cmake/—CMake modules to generate the documentation share/gdb/—GDB pretty printers share/mrdocs/—Shared resources for the documentation generators This directory contains the documentation for the MrDocs project. The documentation is written in AsciiDoc and can be built using the Antora tool. docs/—Documentation configuration files and scripts docs/modules/—The documentation asciidoc files docs/extensions—Antora extensions for the documentation This directory contains build scripts and configuration files for third-party libraries. third-party/—Third-party libraries third-party/llvm/—CMake Presets for LLVM third-party/duktape/—CMake scripts for Duktape third-party/lua/—A bundled Lua interpreter The AST visitor and metadata all use forward slashes to represent file pathnames, even on Windows. This is so the generated reference documentation does not vary based on the platform. Errors thrown by the program should always have type Exception. Objects of this type are capable of transporting an Error object. This is important for the scripting to work; exceptions are used to propagate errors from library code to scripts and back to the invoking code. For exceptional cases, these thrown exceptions should be uncaught. The tool installs an uncaught exception handler that prints a stack trace and exits the process immediately. All new features should be accompanied by tests. The mrdocs-test target is used to run the test suites. This target has its entry point in src/test/TestMain.cpp, which can take two paths: Golden testing: When input paths are provided to the test executable via the command line, the test suite will run the DoTestAction() that iterates all files in test-files comparing the input source files with the expected XML output files. Unit testing: When no input paths are provided, all unit tests will be run via unit_test_main(), defined by the our test-suite library in src/test_suite/test_suite.cpp. The fixtures for golden testing are defined in test-files/golden-tests, where files in each directory have the following format: mrdocs.yml: Basic configuration options for all files in this directory. .cpp: The input source file to extract symbols from. .xml: The expected XML output file generated with the XML generator. .bad.xml: The test output file generated when the test fails. .yml: Extra configuration options for this specific file. If you find a bug or have a feature request, please open an issue on the MrDocs GitHub repository: https://github.com/cppalliance/mrdocs/issues If you would like to contribute a feature or bug fix, please open a pull request on the MrDocs GitHub repository: https://github.com/cppalliance/mrdocs/pulls If you would like to discuss a feature or bug fix before opening a pull request, discussing happen in the #mrdocs channel on the Cpplang Slack: https://cpplang.slack.com/ Edit this Page","title":"Contributor’s Guide","component":"mrdocs","version":"develop","name":"contribute","url":"/mrdocs/develop/contribute.html","titles":[{"text":"Codebase Overview","hash":"_codebase_overview","id":1},{"text":"Parsing options","hash":"options","id":2},{"text":"Command Line Options","hash":"_command_line_options","id":3},{"text":"Configuration File","hash":"_configuration_file","id":4},{"text":"Finalizing Options","hash":"_finalizing_options","id":5},{"text":"Extracting Symbols","hash":"extract_symbols","id":6},{"text":"Compilation Database","hash":"compilation_database","id":7},{"text":"Info Nodes","hash":"info_nodes","id":8},{"text":"Clang LibTooling","hash":"_clang_libtooling","id":9},{"text":"AST Traversal","hash":"_ast_traversal","id":10},{"text":"USR Generation","hash":"_usr_generation","id":11},{"text":"Finalizing the Corpus","hash":"_finalizing_the_corpus","id":12},{"text":"Generators","hash":"_generators","id":13},{"text":"Directory Layout","hash":"_directory_layout","id":14},{"text":"include/—The main include directory","hash":"_includethe_main_include_directory","id":15},{"text":"src/—The main source directory","hash":"_srcthe_main_source_directory","id":16},{"text":"share/—Shared resources","hash":"_shareshared_resources","id":17},{"text":"docs—Documentation","hash":"_docsdocumentation","id":18},{"text":"third-party/—Helpers for third-party libraries","hash":"_third_partyhelpers_for_third_party_libraries","id":19},{"text":"Coding Standards","hash":"_coding_standards","id":20},{"text":"Paths","hash":"_paths","id":21},{"text":"Exceptions","hash":"_exceptions","id":22},{"text":"Testing","hash":"_testing","id":23},{"text":"Contributing","hash":"_contributing","id":24}]},"4":{"id":4,"text":"Demos arrow_back arrow_forward A few examples of reference documentation generated with MrDocs are available in https://mrdocs.com/demos/: ci-all-releases Multi Page Single Page Library Asciidoc Asciidoc XML Boost.URL develop Multi Page Single Page Library Asciidoc Asciidoc XML Boost.Scope Boost.URL master Multi Page Single Page Library Asciidoc Asciidoc XML Boost.URL v0.0.1 Multi Page Single Page Library Asciidoc Asciidoc XML Boost.URL v0.0.2 Multi Page Single Page Library Asciidoc Asciidoc XML Boost.URL Edit this Page","title":"Demos","component":"mrdocs","version":"develop","name":"demos","url":"/mrdocs/develop/demos.html","titles":[]},"5":{"id":5,"text":"Design Notes arrow_back arrow_forward C++ API design is challenging. When you write a function signature, or declare a class, it is at that moment when you are likely to have as much information as you will ever have about what it is supposed to do. The more time passes before you write the documentation, the less likely you are to remember all the details of what motivated the API in the first place. In other words, because best and worst engineers are naturally lazy, the temporal adjacency of the C++ declaration to the documentation improves outcomes. For this reason, having the documentation be as close as possible to the declaration is ideal. That is, the spatial adjacency of the C++ declaration to the documentation improves outcomes because it facilitates temporal adjacency. In summary, the automated extraction of reference documentation from C++ declarations containing attached documentation comments is ideal because: Temporally adjacent documentation is more comprehensive Spatially adjacent documentation requires less effort to maintain And causally connected documentation is more accurate From the perspective of engineers, however, the biggest advantage of automated documentation is that it implies a single source of truth for the API at a low cost. However, C++ codebases are notoriously difficult to document automatically because of constructs where the code needs to diverge from the intended API that represents the contract with the user. Tools like Doxygen typically require workarounds and manual intervention via preprocessor macros to get the documentation right. These workarounds are problematic because they effectively mean that there are two versions of the code: the well-formed and the ill-formed versions. This subverts the single sources of truth for the code. Mr. Docs Automatic Manual No Reference No workarounds ✅ ❌ ✅ ❌ Nice for users ✅ ✅ ✅ ❌ Single Source of Truth ✅ ❌ ❌ ❌ Less Work for Developers ✅ ❌ ❌ ✅ Always up-to-date ✅ ✅ ❌ ❌ By providing no reference to users, they are forced to read header files to understand the API. This is a problem because header files are not always the best source of truth for the API. Developers familiar with cppreference.com will know that the documentation there is often more informative than the header files. A common alternative is to provide a manual reference to the API. Developers duplicate the signatures, which requires extra work. This strategy tends to work well for small libraries and allows the developer to directly express the contract with the user. However, as the single source of truth is lost, it becomes unmanageable as the codebase grows. When the declaration changes, they forget to edit the docs, and the reference becomes out of date. In this case, it looks like the best solution is to automate the documentation. The causal connection between the declaration and the generated documentation improves outcomes. That’s when developers face difficulties with existing tools like Doxygen, which require workarounds and manual intervention to get the documentation right. The workarounds mean that there are two versions of the code: the well-formed and the ill-formed versions. The philosophy behind MrDocs is to provide solutions to these workarounds so that the single source of truth can be maintained with minimal effort by developers. With Mr.Docs, the documented C++ code should be the same as the code that is compiled. Once the documentation is extracted from the code, it is necessary to format it in a way that is useful to the user. This usually involves generating output files that match the content of the documentation to the user’s needs. A limitation of existing tools like Doxygen is that their output formats are not very customizable. It supports minor customization in the output style and, for custom content formats, it requires much more complex workflows, like generating XML files and writing secondary applications to process them. MrDocs attempts to support multiple output formats and customization options. In practice, MrDocs attempts to provide three levels of customization: At the first level, the user can use an existing generator and customize its templates and helper functions. The user can write a MrDocs plugin at a second level that defines a new generator. At a third level, it can use a generator for a structured file format and consume the output in a more uncomplicated secondary application or script. These multiple levels of complexity mean developers can worry only about the documentation content. In practice, developers rarely need new generators and are usually only interested in changing how an existing generator formats the output. Removing the necessity of writing and maintaining a secondary application only to customize the output via XML files can save these developers an immense amount of time. To deal with the complexity of C++ constructs, MrDocs uses clang’s libtooling API. That means MrDocs understands all C++: if clang can compile it, MrDocs knows about it. Here are a few constructs MrDocs attempts to understand and document automatically from the metadata: Overload sets Private APIs Unspecified Return Types Concepts Typedef / Aliases Constants Automatic Related Types Macros SFINAE Hidden Base Classes Hidden EBO Niebloids Coroutines Edit this Page","title":"Design Notes","component":"mrdocs","version":"develop","name":"design-notes","url":"/mrdocs/develop/design-notes.html","titles":[{"text":"Why automate documentation?","hash":"_why_automate_documentation","id":1},{"text":"Customization","hash":"_customization","id":2},{"text":"C++ Constructs","hash":"_c_constructs","id":3}]},"6":{"id":6,"text":"Home arrow_forward Automating C++ reference documentation significantly enhances usability by providing a navigable API and ensuring a single, up-to-date source of truth with minimal effort. However, documenting C++ poses significant challenges due to discrepancies between the codebase and the public API. Doxygen remains a popular tool, yet it is suboptimal for C++ as it fails to fully comprehend C++ constructs and requires many transformation steps, including the incorporation of many macros within the C++ code. These macros maintain well-formed and ill-formed versions of the code, undermining the goal of unifying the source of truth. Existing solutions frequently need better maintenance or usability issues, prompting users to revert to Doxygen. An ideal solution would inherently understand C++ constructs, be actively maintained, and offer diverse options for customizing the output format. MrDocs embodies these qualities. Supported by full-time developers from the C++ Alliance, MrDocs inherently comprehends C++ constructs without the need for macros and provides various output formats, customizable templates, and plugin support, ensuring it meets the demands of comprehensive and efficient documentation. Edit this Page","title":"MrDocs","component":"mrdocs","version":"develop","name":"index","url":"/mrdocs/develop/index.html","titles":[]},"7":{"id":7,"text":"Installation arrow_back arrow_forward Binary packages are available from our Release Page. Most users should use these packages. 🪟 Windows 🐧 Linux 📃 Release 📦 7z 📦 msi 📦 zip 📦 tar.xz 📦 tar.gz v0.0.2 July 10, 2024 🔗 MrDocs-0.0.2-win64.7z (20 MB) 🔗 MrDocs-0.0.2-win64.msi (37 MB) 🔗 MrDocs-0.0.2-win64.zip (37 MB) 🔗 MrDocs-0.0.2-Linux.tar.xz (52 MB) 🔗 MrDocs-0.0.2-Linux.tar.gz (80 MB) v0.0.1 December 1, 2023 🔗 MrDocs-0.0.1-win64.7z (11 MB) 🔗 MrDocs-0.0.1-win64.msi (18 MB) - 🔗 MrDocs-0.0.1-Linux.tar.xz (19 MB) 🔗 MrDocs-0.0.1-Linux.tar.gz (28 MB) master December 1, 2023 🔗 MrDocs-0.0.1-win64.7z (20 MB) 🔗 MrDocs-0.0.1-win64.msi (37 MB) 🔗 MrDocs-0.0.1-win64.zip (37 MB) 🔗 MrDocs-0.0.1-Linux.tar.xz (52 MB) 🔗 MrDocs-0.0.1-Linux.tar.gz (80 MB) The following instructions assume we are at a parent directory that’s going to contain both the MrDocs and the third-party dependencies directories. + + mrdocs + third-party Clone the MrDocs repository with: git clone https://github.com/cppalliance/mrdocs Also create and go to the third-party directory, where we are going to download and install our dependencies: mkdir third-party cd third-party These instructions assume all dependencies are installed in the third-party directory for simplicity. Fell free to install them anywhere you want and adjust the main MrDocs configuration command later. MrDocs uses the fmt library for formatting strings. From the third-party directory, you can clone the fmt repository and install it with the following commands: git clone https://github.com/fmtlib/fmt --branch 10.2.1 --depth 1 (1) cd fmt cmake -S . -B ./build -DCMAKE_BUILD_TYPE=Release -D FMT_DOC=OFF -D FMT_TEST=OFF (2) cmake --build ./build --config Release (3) cmake --install ./build --prefix ./install (4) cd .. 1 Shallow clones the fmt repository. 2 Configure the fmt library with CMake, excluding the documentation and tests. 3 Builds the fmt library in the build directory. 4 Installs the fmt library in the install directory. All instructions in this document assume you are using a CMake version above 3.26. Binaries are available at CMake’s official website. If you prefer using Vcpkg to install dependencies, you can install VcPkg and fmt with the following commands from the third-party directory: Windows PowerShell Unix Variants git clone https://github.com/microsoft/vcpkg.git -b master (1) cd vcpkg bootstrap-vcpkg.bat (2) vcpkg.exe install fmt --triplet x64-windows (3) 1 Clones the Vcpkg repository. 2 Bootstraps Vcpkg. 3 Installs the fmt library. git clone https://github.com/microsoft/vcpkg.git -b master (1) cd vcpkg ./bootstrap-vcpkg.sh (2) ./vcpkg install fmt (3) 1 Clones the Vcpkg repository. 2 Bootstraps Vcpkg. 3 Installs the fmt library. You can also install fmt with Vcpkg in Manifest mode. In manifest mode, you declare your project’s direct dependencies in a manifest file named vcpkg.json. MrDocs includes a vcpkg.json.example file you can duplicate or create a symlink as vcpkg.json to use this mode. This file includes all the dependencies MrDocs needs, except for LLVM. In this mode, VcPkg will create separate installed trees for each project and configuration. This is the recommended vcpkg mode for most users, according to the vcpkg documentation. MrDocs uses the duktape library for JavaScript parsing. From the third-party directory, you can download the duktape source code from the official release: Windows PowerShell Unix Variants Invoke-WebRequest -Uri \"https://github.com/svaarala/duktape/releases/download/v2.7.0/duktape-2.7.0.tar.xz\" -OutFile \"duktape-2.7.0.tar.xz\" (1) 1 Downloads the duktape source code. curl -LJO https://github.com/svaarala/duktape/releases/download/v2.7.0/duktape-2.7.0.tar.xz (1) 1 Downloads the duktape source code. Then patch the Duktape source code to provide CMake support. tar -xf duktape-2.7.0.tar.xz (1) cp ../mrdocs/third-party/duktape/CMakeLists.txt ./duktape-2.7.0/CMakeLists.txt (2) cp ../mrdocs/third-party/duktape/duktapeConfig.cmake.in ./duktape-2.7.0/duktapeConfig.cmake.in (3) cd duktape-2.7.0 1 Extracts the duktape source code. 2 Patches the source code with a CMakeLists.txt file to the duktape-2.7.0 directory so that we can build it with CMake. 3 Copies the duktapeConfig.cmake.in file to the duktape-2.7.0 directory so that we can install it with CMake and find it later from other CMake projects. Now adjust the duk_config.h file to indicate we are statically building Duktape. Windows PowerShell Unix Variants $content = Get-Content -Path \"src\\duk_config.h\" (1) $content = $content -replace '#define DUK_F_DLL_BUILD', '#undef DUK_F_DLL_BUILD' (2) $content | Set-Content -Path \"src\\duk_config.h\" (3) 1 Read the content of duk_config.h 2 Replace the DUK_F_DLL_BUILD macro with #undef DUK_F_DLL_BUILD 3 Write the content back to the file sed -i 's/#define DUK_F_DLL_BUILD/#undef DUK_F_DLL_BUILD/g' \"src/duk_config.h\" (1) 1 Disables the DUK_F_DLL_BUILD macro in the duk_config.h file to indicate we are statically building duktape. And finally install the library with CMake: cmake -S . -B ./build -DCMAKE_BUILD_TYPE=Release (1) cmake --build ./build --config Release (2) cmake --install ./build --prefix ./install (3) 1 Configures the duktape library with CMake. 2 Builds the duktape library in the build directory. 3 Installs the duktape library with CMake support in the install directory. The scripts above downloads the duktape source code, extracts it, and configures it with CMake. The CMake scripts provided by MrDocs are copied to the duktape-2.7.0 directory to facilitate the build process with CMake and provide CMake installation scripts for other projects. If you prefer using Vcpkg to install dependencies, you can install duktape with the following commands from the third-party directory: Windows PowerShell Unix Variants cd vcpkg vcpkg.exe install duktape --triplet x64-windows (1) 1 Installs the duktape library. cd vcpkg ./vcpkg install duktape (1) 1 Installs the duktape library. These examples assume VcPkg is already installed in the third-party/vcpkg directory (see the Fmt section). MrDocs uses libxml2 tools for tests. Only developers need to install this dependency. Users can skip this step. From the third-party directory, you can clone the libxml2 repository and install it with the following commands: git clone https://github.com/GNOME/libxml2 --branch v2.12.6 --depth 1 (1) cd libxml2 cmake -S . -B ./build -DCMAKE_BUILD_TYPE=Release -DLIBXML2_WITH_PROGRAMS=ON -DLIBXML2_WITH_FTP=OFF -DLIBXML2_WITH_HTTP=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_LEGACY=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_ZLIB=OFF -DLIBXML2_WITH_ICU=OFF -DLIBXML2_WITH_TESTS=OFF -DLIBXML2_WITH_HTML=ON -DLIBXML2_WITH_C14N=ON -DLIBXML2_WITH_CATALOG=ON -DLIBXML2_WITH_DEBUG=ON -DLIBXML2_WITH_ISO8859X=ON -DLIBXML2_WITH_MEM_DEBUG=OFF -DLIBXML2_WITH_MODULES=ON -DLIBXML2_WITH_OUTPUT=ON -DLIBXML2_WITH_PATTERN=ON -DLIBXML2_WITH_PUSH=ON -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_READER=ON -DLIBXML2_WITH_REGEXPS=ON -DLIBXML2_WITH_SAX1=ON -DLIBXML2_WITH_SCHEMAS=ON -DLIBXML2_WITH_SCHEMATRON=ON -DLIBXML2_WITH_THREADS=ON -DLIBXML2_WITH_THREAD_ALLOC=OFF -DLIBXML2_WITH_TREE=ON -DLIBXML2_WITH_VALID=ON -DLIBXML2_WITH_WRITER=ON -DLIBXML2_WITH_XINCLUDE=ON -DLIBXML2_WITH_XPATH=ON -DLIBXML2_WITH_XPTR=ON (2) cmake --build ./build --config Release (3) cmake --install ./build --prefix ./install (4) cd .. 1 Shallow clones the libxml2 repository. 2 Configure the libxml2 with CMake, excluding the documentation, tests, and unwanted dependencies. 3 Builds libxml2 in the build directory. 4 Installs libxml2 in the install directory. If you prefer using Vcpkg to install dependencies, you can install libxml2 with the following commands from the third-party directory: Windows PowerShell Unix Variants cd vcpkg vcpkg.exe install libxml2[tools] --triplet x64-windows (1) 1 Installs libxml2. cd vcpkg ./vcpkg install libxml2[tools] (1) 1 Installs libxml2. These examples assume VcPkg is already installed in the third-party/vcpkg directory (see the Fmt section). MrDocs uses LLVM to parse C++ code and extract documentation from it. It depends on a recent version of LLVM: e1065370 Download: You can shallow-clone the project from the official repository. From the third-party directory, run the following commands: mkdir -p llvm-project (1) cd llvm-project git init (2) git remote add origin https://github.com/llvm/llvm-project.git (3) git fetch --depth 1 origin e1065370aaacb1b1cb48e77d37d376bf024f4a39 (4) git checkout FETCH_HEAD (5) 1 Create a directory for the llvm-project instead of cloning it 2 Initialize a git repository 3 Add the official LLVM repository as a remote 4 Fetch the commit we want to use: this allows us to shallow-clone the repository at this commit 5 Checkout the commit we want to use Configure: The mrdocs/third-party/llvm directory provides CMake presets to build LLVM. We recommend using preset files as they contain a replicable set of CMake configuration values that can be used for a project. From third-party/llvm-project, you can copy the CMakePresets.json and CMakeUserPresets.json files to the llvm-project/llvm directory. cp ../../mrdocs/third-party/llvm/CMakePresets.json ./llvm cp ../../mrdocs/third-party/llvm/CMakeUserPresets.json ./llvm/CMakeUserPresets.json Run a command such as the following to configure LLVM: Windows PowerShell Unix Variants cd llvm cmake -S . -B ./build --preset=release-win cd llvm cmake -S . -B ./build --preset=release-unix In the example above, we configure a Release version of LLVM for MrDocs. Choose one of the presets from CMakePresets.json or edit the variants in CMakeUserPresets.json to customize the configurations. Developers might also want to build a custom Debug LLVM configuration including optimizations, which allows for faster execution of tests. The relwithdebinfo and debwithopt presets are provided for this purpose. Or if you prefer using the command line, set CMAKE_CONFIGURATION_TYPES or CMAKE_BUILD_TYPE to Debug and manually include the optimization flags to -D CMAKE_CXX_FLAGS=\"/O2 /Zi\" (MSVC) or -D CMAKE_CXX_FLAGS=\"-Og -g\". This should give you an optimized build with all debug features and flags, such as an appropriate _ITERATOR_DEBUG_LEVEL and the /MDd flag in MSVC. In other platforms, this should give you a release somewhat equivalent to RelWithDebInfo optimized for debugging experience. -Og offers a reasonable level of optimization while maintaining fast compilation and a good debugging experience. Build: Build and install the configured version of LLVM with: cmake --build ./build --config Release --parallel 4 cmake --install ./build --prefix ../install Replace 4 with the number of cores you want to use for building LLVM. Return from ./third-party/llvm-project/llvm to the LLVM project directory: cd ../.. In addition to LLVM, MrDocs requires a deterministic version of the C standard library (LibC) to ensure consistent behavior across various environments. This step is crucial for replicating specific compiler and library configurations. Download: Continue using the same LLVM project directory. Configure: Configure and build LibC++ using the existing structure: export CXX=\"./install/bin/clang++\" export CC=\"./install/bin/clang\" These options set the C and C++ compilers to the ones previously installed by LLVM. MrDocs only depends on the LibC++ headers, so any compiler that works for this step should be fine. Run a command such as the following to configure LLVM: Windows PowerShell Unix Variants cmake -G Ninja \\ -S runtimes \\ -B build-libcxx \\ -DLLVM_ENABLE_RUNTIMES=\"libcxx;libcxxabi\" \\ -DCMAKE_INSTALL_PREFIX=\"$(pwd)/install\" \\ -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \\ -DLIBCXXABI_ENABLE_SHARED=OFF \\ -DLIBCXXABI_ENABLE_STATIC=ON \\ -DLIBCXX_ENABLE_SHARED=OFF \\ -DLIBCXX_NO_VCRUNTIME=ON \\ -DCMAKE_CXX_FLAGS=\"-D__ORDER_LITTLE_ENDIAN__=1234 -D__ORDER_BIG_ENDIAN__=4321 -D__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__\" cmake -G Ninja \\ -S runtimes \\ -B build-libcxx \\ -DLLVM_ENABLE_RUNTIMES=\"libcxx;libcxxabi;libunwind\" \\ -DCMAKE_INSTALL_PREFIX=\"$(pwd)/install\" Build: Build and install the configured version of LibC++ with: Windows PowerShell Unix Variants ninja -C build-libcxx cxx ninja -C build-libcxx install-cxx ninja -C build-libcxx cxx cxxabi unwind ninja -C build-libcxx install-cxx install-cxxabi install-unwind Return from ./third-party/llvm-project to the parent directory to build and install MrDocs: cd ../.. Return from ./third-party/vcpkg to the parent directory of third-party (the one containing the mrdocs directory) to build and install MrDocs: cd ../.. Configure: You can also configure MrDocs with command line arguments or CMake presets. Configure with Command Line Arguments: With the dependencies are available in third-party, you can configure MrDocs with: Windows PowerShell Unix Variants cmake -S mrdocs -B build -G \"Visual Studio 17 2022\" -A x64 -D CMAKE_CONFIGURATION_TYPES=\"RelWithDebInfo\" -D CMAKE_EXPORT_COMPILE_COMMANDS=ON -D LLVM_ROOT=\"%cd%/third-party/llvm+clang/RelWithDebInfo\" -D DUKTAPE_SOURCE_ROOT=\"%cd%/third-party/duktape-2.7.0\" -D CMAKE_TOOLCHAIN_FILE=\"%cd%/third-party/vcpkg/scripts/buildsystems/vcpkg.cmake\" cmake -S mrdocs -B build -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_EXPORT_COMPILE_COMMANDS=ON -D LLVM_ROOT=\"$(pwd)/third-party/llvm+clang/RelWithDebInfo\" -D DUKTAPE_SOURCE_ROOT=\"$(pwd)/third-party/duktape-2.7.0\" -D CMAKE_TOOLCHAIN_FILE=\"$(pwd)/third-party/vcpkg/scripts/buildsystems/vcpkg.cmake\" Configure with CMake Presets: The MrDocs repository also includes a CMakePresets.json file that contains the parameters to configure MrDocs with CMake. To specify the installation directories, you can use the LLVM_ROOT, DUKTAPE_SOURCE_ROOT, CMAKE_TOOLCHAIN_FILE environment variables. To specify a generator (-G) and platform name (-A), you can use the CMAKE_GENERATOR and CMAKE_GENERATOR_PLATFORM environment variables. You can also customize the presets by duplicating and editing the CMakeUserPresets.json.example file in the mrdocs directory. This is typically more convenient than using environment variables. Build: Then build and install MrDocs with: cd build cmake --build . cmake --install . To customize the installation directory, use the CMAKE_INSTALL_PREFIX option or use the --prefix option for the cmake --install . command. To customize the C and C++ compilers, use the CMAKE_C_COMPILER and CMAKE_CXX_COMPILER options. Developers should also enable -D BUILD_TESTING=ON. If any custom build of LLVM other than RelWithDebInfo is being used, the LLVM_ROOT variable should be set to the installation directory of that build. The MrDocs installation directory follows the \"Filesystem Hierarchy Standard\" (FHS) layout: bin: the MrDocs executable intended to be used by users or invoked from the command line. share: resource files installed by MrDocs doc: the MrDocs documentation include: the MrDocs headers lib: the MrDocs library The FHS layout provides a directory structure that also serves as a widely accepted convention for organizing files and directories in Unix-like systems, but that can be used in any operating system. Edit this Page","title":"Install","component":"mrdocs","version":"develop","name":"install","url":"/mrdocs/develop/install.html","titles":[{"text":"Binary Packages","hash":"mrdocs-binaries","id":1},{"text":"Install from Source","hash":"mrdocs-source","id":2},{"text":"Fmt","hash":"install-fmt","id":3},{"text":"Duktape","hash":"_duktape","id":4},{"text":"Libxml2","hash":"_libxml2","id":5},{"text":"LLVM","hash":"_llvm","id":6},{"text":"LibC++","hash":"_libc","id":7},{"text":"MrDocs","hash":"_mrdocs","id":8},{"text":"Package layout","hash":"_package_layout","id":9}]},"8":{"id":8,"text":"License arrow_back ============================================================================== The LLVM Project is under the Apache License v2.0 with LLVM Exceptions: ============================================================================== Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. \"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. \"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. \"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. \"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License. \"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. \"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. \"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). \"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. \"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\" \"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets \"[]\" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same \"printed page\" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ---- LLVM Exceptions to the Apache 2.0 License ---- As an exception, if, as a result of your compiling your source code, portions of this Software are embedded into an Object form of such source code, you may redistribute such embedded portions in such Object form without complying with the conditions of Sections 4(a), 4(b) and 4(d) of the License. In addition, if you combine or link compiled forms of this Software with software that is licensed under the GPLv2 (\"Combined Software\") and if a court of competent jurisdiction determines that the patent provision (Section 3), the indemnity provision (Section 9) or other Section of the License conflicts with the conditions of the GPLv2, you may retroactively and prospectively choose to deem waived or otherwise exclude such Section(s) of the License, but only in their entirety and only with respect to the Combined Software. ============================================================================== Software from third parties included in the LLVM Project: ============================================================================== The LLVM Project contains third party software which is under different license terms. All such code will be identified clearly using at least one of two mechanisms: 1) It will be in a separate directory tree with its own `LICENSE.txt` or `LICENSE` file at the top containing the specific license and restrictions which apply to that software, or 2) It will contain specific license and restriction terms at the top of every file. ============================================================================== Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy): ============================================================================== University of Illinois/NCSA Open Source License Copyright (c) 2003-2019 University of Illinois at Urbana-Champaign. All rights reserved. Developed by: LLVM Team University of Illinois at Urbana-Champaign http://llvm.org Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal with 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: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimers. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimers in the documentation and/or other materials provided with the distribution. * Neither the names of the LLVM Team, University of Illinois at Urbana-Champaign, nor the names of its contributors may be used to endorse or promote products derived from this Software without specific prior written permission. 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 CONTRIBUTORS 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 WITH THE SOFTWARE. Edit this Page","title":"License","component":"mrdocs","version":"develop","name":"license","url":"/mrdocs/develop/license.html","titles":[]},"9":{"id":9,"text":"Getting Started arrow_back arrow_forward The mrdocs.yml configuration file contains information about the project. If you’re used to Doxygen, this file is similar to the Doxyfile configuration file. Here is an example of a mrdocs.yml file: source-root: ../include multipage: false generate: adoc In many projects, it is common to have the documentation in a docs directory, which can also contain this configuration file. + + docs + mrdocs.yml + ... + include + src + test + ... The most important information is the source-root option, which determines the root of the source tree relative to the mrdocs.yml file. The list of all available options can be found in the The Configuration File page. For consistency, these instructions assume you have the mrdocs executable in PATH. You can invoke MrDocs from the command line with the following command: mrdocs path/to/mrdocs.yml If you are at the path of the mrdocs.yml file, you can simply run: mrdocs You can also specify other commands to MrDocs directly from the command line to set or override options from the mrdocs.yml file (See all options in The Configuration File page). mrdocs path/to/mrdocs.yml --output=../docs/reference Except for the path to the mrdocs.yml file, all other relative paths are made absolute relative to the mrdocs.yml file. One way to simplify the documentation generation process is by using a compile_commands.json file generated by CMake to determine the source files to process and their compile options. This file is generated by the CMake configuration step when the CMAKE_EXPORT_COMPILE_COMMANDS option is set to ON. cmake -B build -S . -DCMAKE_EXPORT_COMPILE_COMMANDS=ON At this step, you can also add any other flags you want to pass to cmake, such as -DCMAKE_BUILD_TYPE=Release or -DCMAKE_CXX_COMPILER=clang++. If you are using the Visual Studio generator, you might need to switch to the Ninja generator to generate the compile_commands.json file. This will generate a compile_commands.json file in the build directory containing all commands needed to compile your project. This file can be used by MrDocs to determine the source files to process and their compile options. mrdocs --compilation-database=../build/compile_commands.json --output=../docs/reference MrDocs will go through all the source files listed in the compile_commands.json file and generate the documentation for them. When MrDocs goes through the commands in the compilation database, it will go through the same targets as the compiler. Only symbols present in these targets will be documented. In the case of header-only libraries, the symbols will be documented only if they are included in one of these targets. It’s common to have different configurations for the documentation generation than for the project build. This means CMake is often being run just to generate a custom compile_commands.json for the documentation. Also, the compile_commands.json file is a configuration artifact, which means it often lacks a stable location that can be referenced in the mrdocs.yml configuration file. Thus, the pattern of using a compile_commands.json file generated by CMake is so common that MrDocs provides a CMake module to simplify the process. You can let MrDocs generate the compile_commands.json file for you by providing the path to the CMakeLists.txt file of your project. mrdocs --compilation-database=../CMakeLists.txt --output=../docs/reference By providing your CMakeLists.txt file as the reference for you compilation database, MrDocs will automatically run CMake to generate the compile_commands.json file in a temporary directory. Not only this simplifies the usage but also ensures that the stable compilation database file can be used in the mrdocs.yml configuration file. MrDocs does not bundle CMake. If you want to use this feature, you need to have CMake installed on your system and available in PATH. Parameters for cmake, such as -D BUILDING_TEST=OFF -D MRDOCS_BUILD=ON can also be specified with the cmake option in configuration file. MrDocs will always append the CMAKE_EXPORT_COMPILE_COMMANDS=ON flag to the cmake command. In many projects, a common pattern is to define a special build configuration for the documentation generation such that: Tests, examples, and auxiliary targets excluded All header-only files are included in targets Unnecessary sources files are excluded from targets This can usually be achieved by defining a custom target in the CMakeLists.txt with a single source file that includes all the necessary header files. if (MY_PROJECT_MRDOCS_BUILD) # Glob all header files set(INCLUDE_DIR \"${CMAKE_SOURCE_DIR}/include\") file(GLOB_RECURSE HEADER_FILES \"${INCLUDE_DIR}/*.hpp\") # Create a temporary source file that includes all header files set(TEMP_CPP_FILE \"${CMAKE_CURRENT_BINARY_DIR}/all_headers.cpp\") file(WRITE ${TEMP_CPP_FILE} \"// This file is generated automatically by CMake\\n\\n\") foreach(HEADER_FILE ${HEADER_FILES_LIST}) file(APPEND ${TEMP_CPP_FILE} \"#include \\\"${HEADER_FILE}\\\"\\n\") endforeach() # Create a custom target for MrDocs add_library(my_project_mrdocs_target ${TEMP_CPP_FILE}) # Set any other target properties here target_include_directories(my_project_mrdocs_target PRIVATE ${INCLUDE_DIR}) target_link_libraries(my_project_mrdocs_target PRIVATE an_external_library) # Don't create any other targets return() endif() To use this target, you can run CMake with the MY_PROJECT_MRDOCS_BUILD flag set to ON: mrdocs --cmake=\"-D MY_PROJECT_MRDOCS_BUILD=ON\" --compilation-database=../CMakeLists.txt --output=..\\docs\\reference Because these paths and options are stable, you can specify them in the mrdocs.yml configuration file. cmake: \"-D MY_PROJECT_MRDOCS_BUILD=ON\" compilation-database: ../CMakeLists.txt output: ../docs/reference Unlike other documentation generators, MrDocs only works with valid C++ code. Instead of partially preprocessing the source files and inferring symbols from potentially ill-formed code, MrDocs relies on the compilation database and Clang to preprocess the source files. Thus, for each common C++ construct, MrDocs provides commands or options to identify and extract the relevant information as intended by the user. For instance, a common ill-formed Doxygen pattern to specify a class as an implementation detail is: #ifdef DOCS __implementation_defined__ #else impl::f_return_t #endif f(); In this pattern, the user wants to document the function f as implementation_defined f(); because the library contract is that the user should not rely on a specific return type here. However, this ill-formed pattern is problematic: implementation_defined is not a valid symbol so the code is ill-formed impl::f_return_t doesn’t express the intent of the user for the documentation the developer has to effectively maintain two versions of the code the original source code becomes more and more unreadable Instead, when using MrDocs, the same function could be documented as: impl::f_return_t f(); And the user can specify that impl as a namespace for implementation details in the configuration file: # ... implementation-detail: impl # ... The Commands and The Configuration File pages contain a list of all available commands and options to identify and extract the relevant information as intended by the user. MrDocs provides multiple mechanisms are provided to specify special C++ patterns, such as the example above. For each common C++ construct that would require macros and two versions of the code, MrDocs provides commands to identify the construct and extract the relevant information as intented by the user. Edit this Page","title":"Basic Usage","component":"mrdocs","version":"develop","name":"usage","url":"/mrdocs/develop/usage.html","titles":[{"text":"MrDocs configuration file","hash":"_mrdocs_configuration_file","id":1},{"text":"MrDocs invocation","hash":"_mrdocs_invocation","id":2},{"text":"Basic invocation","hash":"_basic_invocation","id":3},{"text":"Compilation databases","hash":"_compilation_databases","id":4},{"text":"CMake integration","hash":"_cmake_integration","id":5},{"text":"MrDocs Builds","hash":"_mrdocs_builds","id":6},{"text":"Extracting Documentation","hash":"_extracting_documentation","id":7}]}},"components":{},"componentVersions":{"mrdocs/develop":{"displayVersion":"develop","title":"MrDocs","version":"develop","name":"mrdocs","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"MrDocs","site-url":"https://www.mrdocs.com/","logo-img":"","logo-text":"Mr. Docs","icon-img":"","source-language":"asciidoc@","table-caption":false},"sourcemap":false,"extensions":[{},{}]},"url":"/mrdocs/develop/index.html","navigation":[{"items":[{"content":"Home","url":"/mrdocs/develop/index.html","urlType":"internal"},{"content":"Demos","url":"/mrdocs/develop/demos.html","urlType":"internal"},{"content":"Installation","url":"/mrdocs/develop/install.html","urlType":"internal"},{"content":"Getting Started","url":"/mrdocs/develop/usage.html","urlType":"internal"},{"content":"Documenting the Code","url":"/mrdocs/develop/commands.html","urlType":"internal"},{"content":"The Configuration File","url":"/mrdocs/develop/config-file.html","urlType":"internal"},{"content":"Design Notes","url":"/mrdocs/develop/design-notes.html","urlType":"internal"},{"content":"Contributor’s Guide","url":"/mrdocs/develop/contribute.html","urlType":"internal"},{"content":"License","url":"/mrdocs/develop/license.html","urlType":"internal"}],"root":true,"order":0}]}}}}) \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 000000000..618790374 --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,39 @@ + + + +https://www.mrdocs.com/mrdocs/develop/commands.html +2024-10-24T14:37:51.539Z + + +https://www.mrdocs.com/mrdocs/develop/config-file.html +2024-10-24T14:37:51.539Z + + +https://www.mrdocs.com/mrdocs/develop/contribute.html +2024-10-24T14:37:51.539Z + + +https://www.mrdocs.com/mrdocs/develop/demos.html +2024-10-24T14:37:51.539Z + + +https://www.mrdocs.com/mrdocs/develop/design-notes.html +2024-10-24T14:37:51.539Z + + +https://www.mrdocs.com/mrdocs/develop/index.html +2024-10-24T14:37:51.539Z + + +https://www.mrdocs.com/mrdocs/develop/install.html +2024-10-24T14:37:51.539Z + + +https://www.mrdocs.com/mrdocs/develop/license.html +2024-10-24T14:37:51.539Z + + +https://www.mrdocs.com/mrdocs/develop/usage.html +2024-10-24T14:37:51.539Z + + diff --git a/index.html b/index.html new file mode 100644 index 000000000..14c37b89b --- /dev/null +++ b/index.html @@ -0,0 +1,628 @@ + + + + + + + + + + + MrDocs + + + + + + + + + + + + + + + +
+
+

MrDocs

+

MrDocs is a C++ documentation generator for your projects.

+

+ + Get started + + + Download + +

+

No workarounds: A tool that fully understands C++

+
+
+
+ +
+
+
+

Simple code, simple documentation

+

MrDocs understands C++ so you can focus on keeping the code simple.

+
+
+
+ +

Single Source of Truth

+

Mr. Docs takes a specially formatted comment, called a Javadoc, which precedes a C++ declaration and renders it to form a reference as part of documentation.

+
+
+ +

It understands C++

+

Mr. Docs understands C++: Overload sets, private APIs, Concepts and constraints, unspecified return types, aliases, constants, SFINAE, hidden base classes, niebloids, and coroutines.

+
+
+ +

Multiple output formats

+

Choose from multiple output formats: Asciidoc, HTML, or XML.

+
+
+ +

Customizable

+

Mr. Docs is highly customizable. You can change the output format, the theme, and even the way the documentation is generated.

+
+
+
+
+
+
+
+

Examples

+

Examples to discover MrDocs in action.

+
+
+
+ + Boost.URL +
+
+
+
+
+

Boost.URL Antora documentation.

+
+
+ + Boost.URL +
+
+
+
+
+

Boost.URL multi-page Asciidoc documentation.

+
+
+ + Boost.URL +
+
+
+
+
+

Boost.URL single-page Asciidoc documentation.

+
+
+ + Boost.URL +
+
+
+
+
+

Boost.URL single-page HTML documentation.

+
+
+ + Boost.URL +
+
+
+
+
+

Boost.URL XML documentation.

+
+
+ + Boost.Scope +
+
+
+
+
+

Boost.Scope multi-page Asciidoc documentation.

+
+
+ + Boost.Scope +
+
+
+
+
+

Boost.Scope single-page Asciidoc documentation.

+
+
+
+
+
+
+
+

More Code, Fewer Workarounds

+

MrDocs let's you keep the code simple and maintainable.

+
+
+
    +
  • MrDocs understands C++ features such as attributes and noexcept functions.
  • +
+
+
+
/** Exit the program.
+
+    The program will end immediately.
+
+    @note This function does not return.
+*/
+[[noreturn]]
+void
+terminate() noexcept;
+
+
+ + +
+
+

terminate

+
+
+

Exit the program.

+
+
+

Synopsis

+
+

Declared in header <terminate.cpp>

+
+
+
+
void
+terminate() noexcept;
+
+
+
+
+

Description

+
+

The program will end immediately.

+
+
+ + + + + +
+
Note
+
+This function does not return. +
+
+
+
+
+
+ + + +
+
+
+
+
    +
  • Specially formatted comments are rendered to form a reference as part of documentation.
  • +
+
+
+
/** Return the distance between two points
+
+    This function returns the distance between two points
+    according to the Euclidean distance formula.
+
+    @param x0 The x-coordinate of the first point
+    @param y0 The y-coordinate of the first point
+    @param x1 The x-coordinate of the second point
+    @param y1 The y-coordinate of the second point
+    @return The distance between the two points
+*/
+double
+distance(double x0, double y0, double x1, double y1);
+
+
+ + +
+
+

distance

+
+
+

Return the distance between two points

+
+
+

Synopsis

+
+

Declared in header <distance.cpp>

+
+
+
+
double
+distance(
+    double x0,
+    double y0,
+    double x1,
+    double y1);
+
+
+
+
+

Description

+
+

This function returns the distance between two points +according to the Euclidean distance formula.

+
+
+
+

Return Value

+
+

The distance between the two points

+
+
+
+

Parameters

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription

x0

The x-coordinate of the first point

y0

The y-coordinate of the first point

x1

The x-coordinate of the second point

y1

The y-coordinate of the second point

+
+
+
+
+ + + +
+
+
+
+
    +
  • Special directives are used to describe details about the symbols.
  • +
+
+
+
/** Return true if a number is prime.
+
+    @par Complexity
+
+    Linear in n.
+
+    @return Whether or not n is prime.
+    @param n The number to test
+
+*/
+bool
+is_prime(unsigned long long n) noexcept;
+
+
+ + +
+
+

is_prime

+
+
+

Return true if a number is prime.

+
+
+

Synopsis

+
+

Declared in header <is_prime.cpp>

+
+
+
+
bool
+is_prime(unsigned long long n) noexcept;
+
+
+
+
+

Description

+
+

Linear in n.

+
+
+
+

Return Value

+
+

Whether or not n is prime.

+
+
+
+

Parameters

+ ++++ + + + + + + + + + + + + +
NameDescription

n

The number to test

+
+
+
+
+ + + +
+
+
+
+
    +
  • It understands concepts, constraints and SFINAE.
  • +
+
+
+
#include <type_traits>
+#include <stdexcept>
+
+/** Computes the square root of an integral value.
+
+    This function calculates the square root of a
+    given integral value using bit manipulation.
+
+    @throws std::invalid_argument if the input value is negative.
+
+    @tparam T The type of the input value. Must be an integral type.
+    @param value The integral value to compute the square root of.
+    @return The square root of the input value.
+ */
+template <typename T>
+std::enable_if_t<std::is_integral_v<T>, T> sqrt(T value) {
+    if (value < 0) {
+        throw std::invalid_argument(
+            "Cannot compute square root of a negative number");
+    }
+    T result = 0;
+    // The second-to-top bit is set
+    T bit = 1 << (sizeof(T) * 8 - 2);
+    while (bit > value) bit >>= 2;
+    while (bit != 0) {
+        if (value >= result + bit) {
+            value -= result + bit;
+            result += bit << 1;
+        }
+        result >>= 1;
+        bit >>= 2;
+    }
+    return result;
+}
+
+
+
+ + +
+
+

sqrt

+
+
+

Computes the square root of an integral value.

+
+
+

Synopsis

+
+

Declared in header <sqrt.cpp>

+
+
+
+
template<typename T>
+T
+sqrt(T value);
+
+
+
+
+

Description

+
+

This function calculates the square root of a +given integral value using bit manipulation.

+
+
+
+

Exceptions

+ ++++ + + + + + + + + + + + + +
NameThrown on

if

the input value is negative.

+
+
+

Return Value

+
+

The square root of the input value.

+
+
+
+

Template Parameters

+ ++++ + + + + + + + + + + + + +
NameDescription

T

The type of the input value. Must be an integral type.

+
+
+

Parameters

+ ++++ + + + + + + + + + + + + +
NameDescription

value

The integral value to compute the square root of.

+
+
+
+
+ + + +
+
+
+
+
+
+
+

Give us a Star on GitHub: + +

+
+
+
+ + \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 000000000..08e49a8ee --- /dev/null +++ b/styles.css @@ -0,0 +1,2743 @@ +@charset "UTF-8"; +:root { + --font-family: system-ui, -apple-system, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --line-height: 1.5; + --font-weight: 400; + --font-size: 16px; + --border-radius: 0.25rem; + --border-width: 1px; + --outline-width: 3px; + --spacing: 1rem; + --typography-spacing-vertical: 1.5rem; + --block-spacing-vertical: calc(var(--spacing) * 2); + --block-spacing-horizontal: var(--spacing); + --grid-spacing-vertical: 0; + --grid-spacing-horizontal: var(--spacing); + --form-element-spacing-vertical: 0.75rem; + --form-element-spacing-horizontal: 1rem; + --nav-element-spacing-vertical: 1rem; + --nav-element-spacing-horizontal: 0.5rem; + --nav-link-spacing-vertical: 0.5rem; + --nav-link-spacing-horizontal: 0.5rem; + --form-label-font-weight: var(--font-weight); + --transition: 0.2s ease-in-out +} + +@media (min-width: 576px) { + :root { + --font-size: 17px + } +} + +@media (min-width: 768px) { + :root { + --font-size: 18px + } +} + +@media (min-width: 992px) { + :root { + --font-size: 19px + } +} + +@media (min-width: 1200px) { + :root { + --font-size: 20px + } +} + +a { + --text-decoration: none +} + +a.contrast, a.secondary { + --text-decoration: underline +} + +small { + --font-size: 0.875em +} + +h1, h2, h3, h4, h5, h6 { + --font-weight: 700 +} + +h1 { + --font-size: 2rem; + --typography-spacing-vertical: 3rem +} + +h2 { + --font-size: 1.75rem; + --typography-spacing-vertical: 2.625rem +} + +h3 { + --font-size: 1.5rem; + --typography-spacing-vertical: 2.25rem +} + +h4 { + --font-size: 1.25rem; + --typography-spacing-vertical: 1.874rem +} + +h5 { + --font-size: 1.125rem; + --typography-spacing-vertical: 1.6875rem +} + +[type=checkbox], [type=radio] { + --border-width: 2px +} + +[type=checkbox][role=switch] { + --border-width: 3px +} + +tfoot td, tfoot th, thead td, thead th { + --border-width: 3px +} + +:not(thead):not(tfoot) > * > td { + --font-size: 0.875em +} + +code, kbd, pre, samp { + --font-family: "Menlo", "Consolas", "Roboto Mono", "Ubuntu Monospace", "Noto Mono", "Oxygen Mono", "Liberation Mono", monospace, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" +} + +kbd { + --font-weight: bolder +} + +:root:not([data-theme=dark]), [data-theme=light] { + color-scheme: light; + --background-color: #fff; + --color: hsl(205deg, 20%, 32%); + --h1-color: hsl(205deg, 30%, 15%); + --h2-color: #24333e; + --h3-color: hsl(205deg, 25%, 23%); + --h4-color: #374956; + --h5-color: hsl(205deg, 20%, 32%); + --h6-color: #4d606d; + --muted-color: hsl(205deg, 10%, 50%); + --muted-border-color: hsl(205deg, 20%, 94%); + --primary: hsl(195deg, 85%, 41%); + --primary-hover: hsl(195deg, 90%, 32%); + --primary-focus: rgba(16, 149, 193, 0.125); + --primary-inverse: #fff; + --secondary: hsl(205deg, 15%, 41%); + --secondary-hover: hsl(205deg, 20%, 32%); + --secondary-focus: rgba(89, 107, 120, 0.125); + --secondary-inverse: #fff; + --contrast: hsl(205deg, 30%, 15%); + --contrast-hover: #000; + --contrast-focus: rgba(89, 107, 120, 0.125); + --contrast-inverse: #fff; + --mark-background-color: #fff2ca; + --mark-color: #543a26; + --ins-color: #388e3c; + --del-color: #c62828; + --blockquote-border-color: var(--muted-border-color); + --blockquote-footer-color: var(--muted-color); + --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --form-element-background-color: transparent; + --form-element-border-color: hsl(205deg, 14%, 68%); + --form-element-color: var(--color); + --form-element-placeholder-color: var(--muted-color); + --form-element-active-background-color: transparent; + --form-element-active-border-color: var(--primary); + --form-element-focus-color: var(--primary-focus); + --form-element-disabled-background-color: hsl(205deg, 18%, 86%); + --form-element-disabled-border-color: hsl(205deg, 14%, 68%); + --form-element-disabled-opacity: 0.5; + --form-element-invalid-border-color: #c62828; + --form-element-invalid-active-border-color: #d32f2f; + --form-element-invalid-focus-color: rgba(211, 47, 47, 0.125); + --form-element-valid-border-color: #388e3c; + --form-element-valid-active-border-color: #43a047; + --form-element-valid-focus-color: rgba(67, 160, 71, 0.125); + --switch-background-color: hsl(205deg, 16%, 77%); + --switch-color: var(--primary-inverse); + --switch-checked-background-color: var(--primary); + --range-border-color: hsl(205deg, 18%, 86%); + --range-active-border-color: hsl(205deg, 16%, 77%); + --range-thumb-border-color: var(--background-color); + --range-thumb-color: var(--secondary); + --range-thumb-hover-color: var(--secondary-hover); + --range-thumb-active-color: var(--primary); + --table-border-color: var(--muted-border-color); + --table-row-stripped-background-color: #f6f8f9; + --code-background-color: hsl(205deg, 20%, 94%); + --code-color: var(--muted-color); + --code-kbd-background-color: var(--contrast); + --code-kbd-color: var(--contrast-inverse); + --code-tag-color: hsl(330deg, 40%, 50%); + --code-property-color: hsl(185deg, 40%, 40%); + --code-value-color: hsl(40deg, 20%, 50%); + --code-comment-color: hsl(205deg, 14%, 68%); + --accordion-border-color: var(--muted-border-color); + --accordion-close-summary-color: var(--color); + --accordion-open-summary-color: var(--muted-color); + --card-background-color: var(--background-color); + --card-border-color: var(--muted-border-color); + --card-box-shadow: 0.0145rem 0.029rem 0.174rem rgba(27, 40, 50, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(27, 40, 50, 0.024), 0.0625rem 0.125rem 0.75rem rgba(27, 40, 50, 0.03), 0.1125rem 0.225rem 1.35rem rgba(27, 40, 50, 0.036), 0.2085rem 0.417rem 2.502rem rgba(27, 40, 50, 0.04302), 0.5rem 1rem 6rem rgba(27, 40, 50, 0.06), 0 0 0 0.0625rem rgba(27, 40, 50, 0.015); + --card-sectionning-background-color: #fbfbfc; + --dropdown-background-color: #fbfbfc; + --dropdown-border-color: #e1e6eb; + --dropdown-box-shadow: var(--card-box-shadow); + --dropdown-color: var(--color); + --dropdown-hover-background-color: hsl(205deg, 20%, 94%); + --modal-overlay-background-color: rgba(213, 220, 226, 0.8); + --progress-background-color: hsl(205deg, 18%, 86%); + --progress-color: var(--primary); + --loading-spinner-opacity: 0.5; + --tooltip-background-color: var(--contrast); + --tooltip-color: var(--contrast-inverse); + --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23FFF' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(65, 84, 98, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(255, 255, 255, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(255, 255, 255, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(115, 130, 140, 0.999)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(65, 84, 98, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); + --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(198, 40, 40, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23FFF' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(65, 84, 98, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(65, 84, 98, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(56, 142, 60, 0.999)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E") +} + +@media only screen and (prefers-color-scheme: dark) { + :root:not([data-theme=light]) { + color-scheme: dark; + --background-color: #11191f; + --color: hsl(205deg, 16%, 77%); + --h1-color: hsl(205deg, 20%, 94%); + --h2-color: #e1e6eb; + --h3-color: hsl(205deg, 18%, 86%); + --h4-color: #c8d1d8; + --h5-color: hsl(205deg, 16%, 77%); + --h6-color: #afbbc4; + --muted-color: hsl(205deg, 10%, 50%); + --muted-border-color: #1f2d38; + --primary: hsl(195deg, 85%, 41%); + --primary-hover: hsl(195deg, 80%, 50%); + --primary-focus: rgba(16, 149, 193, 0.25); + --primary-inverse: #fff; + --secondary: hsl(205deg, 15%, 41%); + --secondary-hover: hsl(205deg, 10%, 50%); + --secondary-focus: rgba(115, 130, 140, 0.25); + --secondary-inverse: #fff; + --contrast: hsl(205deg, 20%, 94%); + --contrast-hover: #fff; + --contrast-focus: rgba(115, 130, 140, 0.25); + --contrast-inverse: #000; + --mark-background-color: #d1c284; + --mark-color: #11191f; + --ins-color: #388e3c; + --del-color: #c62828; + --blockquote-border-color: var(--muted-border-color); + --blockquote-footer-color: var(--muted-color); + --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --form-element-background-color: #11191f; + --form-element-border-color: #374956; + --form-element-color: var(--color); + --form-element-placeholder-color: var(--muted-color); + --form-element-active-background-color: var(--form-element-background-color); + --form-element-active-border-color: var(--primary); + --form-element-focus-color: var(--primary-focus); + --form-element-disabled-background-color: hsl(205deg, 25%, 23%); + --form-element-disabled-border-color: hsl(205deg, 20%, 32%); + --form-element-disabled-opacity: 0.5; + --form-element-invalid-border-color: #b71c1c; + --form-element-invalid-active-border-color: #c62828; + --form-element-invalid-focus-color: rgba(198, 40, 40, 0.25); + --form-element-valid-border-color: #2e7d32; + --form-element-valid-active-border-color: #388e3c; + --form-element-valid-focus-color: rgba(56, 142, 60, 0.25); + --switch-background-color: #374956; + --switch-color: var(--primary-inverse); + --switch-checked-background-color: var(--primary); + --range-border-color: #24333e; + --range-active-border-color: hsl(205deg, 25%, 23%); + --range-thumb-border-color: var(--background-color); + --range-thumb-color: var(--secondary); + --range-thumb-hover-color: var(--secondary-hover); + --range-thumb-active-color: var(--primary); + --table-border-color: var(--muted-border-color); + --table-row-stripped-background-color: rgba(115, 130, 140, 0.05); + --code-background-color: #18232c; + --code-color: var(--muted-color); + --code-kbd-background-color: var(--contrast); + --code-kbd-color: var(--contrast-inverse); + --code-tag-color: hsl(330deg, 30%, 50%); + --code-property-color: hsl(185deg, 30%, 50%); + --code-value-color: hsl(40deg, 10%, 50%); + --code-comment-color: #4d606d; + --accordion-border-color: var(--muted-border-color); + --accordion-active-summary-color: var(--primary); + --accordion-close-summary-color: var(--color); + --accordion-open-summary-color: var(--muted-color); + --card-background-color: #141e26; + --card-border-color: var(--card-background-color); + --card-box-shadow: 0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024), 0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03), 0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036), 0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302), 0.5rem 1rem 6rem rgba(0, 0, 0, 0.06), 0 0 0 0.0625rem rgba(0, 0, 0, 0.015); + --card-sectionning-background-color: #18232c; + --dropdown-background-color: hsl(205deg, 30%, 15%); + --dropdown-border-color: #24333e; + --dropdown-box-shadow: var(--card-box-shadow); + --dropdown-color: var(--color); + --dropdown-hover-background-color: rgba(36, 51, 62, 0.75); + --modal-overlay-background-color: rgba(36, 51, 62, 0.9); + --progress-background-color: #24333e; + --progress-color: var(--primary); + --loading-spinner-opacity: 0.5; + --tooltip-background-color: var(--contrast); + --tooltip-color: var(--contrast-inverse); + --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23FFF' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(162, 175, 185, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(255, 255, 255, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(0, 0, 0, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(115, 130, 140, 0.999)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(162, 175, 185, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); + --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(183, 28, 28, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23FFF' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(162, 175, 185, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(162, 175, 185, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(46, 125, 50, 0.999)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E") + } +} + +[data-theme=dark] { + color-scheme: dark; + --background-color: #11191f; + --color: hsl(205deg, 16%, 77%); + --h1-color: hsl(205deg, 20%, 94%); + --h2-color: #e1e6eb; + --h3-color: hsl(205deg, 18%, 86%); + --h4-color: #c8d1d8; + --h5-color: hsl(205deg, 16%, 77%); + --h6-color: #afbbc4; + --muted-color: hsl(205deg, 10%, 50%); + --muted-border-color: #1f2d38; + --primary: hsl(195deg, 85%, 41%); + --primary-hover: hsl(195deg, 80%, 50%); + --primary-focus: rgba(16, 149, 193, 0.25); + --primary-inverse: #fff; + --secondary: hsl(205deg, 15%, 41%); + --secondary-hover: hsl(205deg, 10%, 50%); + --secondary-focus: rgba(115, 130, 140, 0.25); + --secondary-inverse: #fff; + --contrast: hsl(205deg, 20%, 94%); + --contrast-hover: #fff; + --contrast-focus: rgba(115, 130, 140, 0.25); + --contrast-inverse: #000; + --mark-background-color: #d1c284; + --mark-color: #11191f; + --ins-color: #388e3c; + --del-color: #c62828; + --blockquote-border-color: var(--muted-border-color); + --blockquote-footer-color: var(--muted-color); + --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --form-element-background-color: #11191f; + --form-element-border-color: #374956; + --form-element-color: var(--color); + --form-element-placeholder-color: var(--muted-color); + --form-element-active-background-color: var(--form-element-background-color); + --form-element-active-border-color: var(--primary); + --form-element-focus-color: var(--primary-focus); + --form-element-disabled-background-color: hsl(205deg, 25%, 23%); + --form-element-disabled-border-color: hsl(205deg, 20%, 32%); + --form-element-disabled-opacity: 0.5; + --form-element-invalid-border-color: #b71c1c; + --form-element-invalid-active-border-color: #c62828; + --form-element-invalid-focus-color: rgba(198, 40, 40, 0.25); + --form-element-valid-border-color: #2e7d32; + --form-element-valid-active-border-color: #388e3c; + --form-element-valid-focus-color: rgba(56, 142, 60, 0.25); + --switch-background-color: #374956; + --switch-color: var(--primary-inverse); + --switch-checked-background-color: var(--primary); + --range-border-color: #24333e; + --range-active-border-color: hsl(205deg, 25%, 23%); + --range-thumb-border-color: var(--background-color); + --range-thumb-color: var(--secondary); + --range-thumb-hover-color: var(--secondary-hover); + --range-thumb-active-color: var(--primary); + --table-border-color: var(--muted-border-color); + --table-row-stripped-background-color: rgba(115, 130, 140, 0.05); + --code-background-color: #18232c; + --code-color: var(--muted-color); + --code-kbd-background-color: var(--contrast); + --code-kbd-color: var(--contrast-inverse); + --code-tag-color: hsl(330deg, 30%, 50%); + --code-property-color: hsl(185deg, 30%, 50%); + --code-value-color: hsl(40deg, 10%, 50%); + --code-comment-color: #4d606d; + --accordion-border-color: var(--muted-border-color); + --accordion-active-summary-color: var(--primary); + --accordion-close-summary-color: var(--color); + --accordion-open-summary-color: var(--muted-color); + --card-background-color: #141e26; + --card-border-color: var(--card-background-color); + --card-box-shadow: 0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024), 0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03), 0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036), 0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302), 0.5rem 1rem 6rem rgba(0, 0, 0, 0.06), 0 0 0 0.0625rem rgba(0, 0, 0, 0.015); + --card-sectionning-background-color: #18232c; + --dropdown-background-color: hsl(205deg, 30%, 15%); + --dropdown-border-color: #24333e; + --dropdown-box-shadow: var(--card-box-shadow); + --dropdown-color: var(--color); + --dropdown-hover-background-color: rgba(36, 51, 62, 0.75); + --modal-overlay-background-color: rgba(36, 51, 62, 0.9); + --progress-background-color: #24333e; + --progress-color: var(--primary); + --loading-spinner-opacity: 0.5; + --tooltip-background-color: var(--contrast); + --tooltip-color: var(--contrast-inverse); + --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23FFF' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(162, 175, 185, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(255, 255, 255, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(0, 0, 0, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(115, 130, 140, 0.999)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(162, 175, 185, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); + --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(183, 28, 28, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23FFF' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(162, 175, 185, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(162, 175, 185, 0.999)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(46, 125, 50, 0.999)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E") +} + +*, ::after, ::before { + box-sizing: border-box; + background-repeat: no-repeat +} + +::after, ::before { + text-decoration: inherit; + vertical-align: inherit +} + +:where(:root) { + -webkit-tap-highlight-color: transparent; + -webkit-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; + text-size-adjust: 100%; + text-rendering: optimizeLegibility; + background-color: var(--background-color); + color: var(--color); + font-weight: var(--font-weight); + font-size: var(--font-size); + line-height: var(--line-height); + font-family: var(--font-family); + overflow-wrap: break-word; + cursor: default; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4 +} + +.container, .container-fluid { + width: 100%; + margin-right: auto; + margin-left: auto; + padding-right: var(--spacing); + padding-left: var(--spacing) +} + +@media (min-width: 576px) { + .container { + max-width: 510px; + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width: 768px) { + .container { + max-width: 700px + } +} + +@media (min-width: 992px) { + .container { + max-width: 920px + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1130px + } +} + +b, strong { + font-weight: bolder +} + +sub, sup { + position: relative; + font-size: .75em; + line-height: 0; + vertical-align: baseline +} + +sub { + bottom: -.25em +} + +sup { + top: -.5em +} + +address, blockquote, dl, figure, form, ol, p, pre, table, ul { + margin-top: 0; + margin-bottom: var(--typography-spacing-vertical); + color: var(--color); + font-style: normal; + font-weight: var(--font-weight); + font-size: var(--font-size) +} + +[role=link], a { + --color: var(--primary); + --background-color: transparent; + outline: 0; + background-color: var(--background-color); + color: var(--color); + -webkit-text-decoration: var(--text-decoration); + text-decoration: var(--text-decoration); + transition: background-color var(--transition), color var(--transition), box-shadow var(--transition), -webkit-text-decoration var(--transition); + transition: background-color var(--transition), color var(--transition), text-decoration var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), color var(--transition), text-decoration var(--transition), box-shadow var(--transition), -webkit-text-decoration var(--transition) +} + +[role=link]:is([aria-current],:hover,:active,:focus), a:is([aria-current],:hover,:active,:focus) { + --color: var(--primary-hover); + --text-decoration: underline +} + +[role=link]:focus, a:focus { + --background-color: var(--primary-focus) +} + +[role=link].secondary, a.secondary { + --color: var(--secondary) +} + +[role=link].secondary:is([aria-current],:hover,:active,:focus), a.secondary:is([aria-current],:hover,:active,:focus) { + --color: var(--secondary-hover) +} + +[role=link].secondary:focus, a.secondary:focus { + --background-color: var(--secondary-focus) +} + +[role=link].contrast, a.contrast { + --color: var(--contrast) +} + +[role=link].contrast:is([aria-current],:hover,:active,:focus), a.contrast:is([aria-current],:hover,:active,:focus) { + --color: var(--contrast-hover) +} + +[role=link].contrast:focus, a.contrast:focus { + --background-color: var(--contrast-focus) +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: var(--typography-spacing-vertical); + color: var(--color); + font-weight: var(--font-weight); + font-size: var(--font-size); + font-family: var(--font-family) +} + +h1 { + --color: var(--h1-color) +} + +h2 { + --color: var(--h2-color) +} + +h3 { + --color: var(--h3-color) +} + +h4 { + --color: var(--h4-color) +} + +h5 { + --color: var(--h5-color) +} + +h6 { + --color: var(--h6-color) +} + +:where(address,blockquote,dl,figure,form,ol,p,pre,table,ul) ~ :is(h1,h2,h3,h4,h5,h6) { + margin-top: var(--typography-spacing-vertical) +} + +.headings, hgroup { + margin-bottom: var(--typography-spacing-vertical) +} + +.headings > *, hgroup > * { + margin-bottom: 0 +} + +.headings > :last-child, hgroup > :last-child { + --color: var(--muted-color); + --font-weight: unset; + font-size: 1rem; + font-family: unset +} + +p { + margin-bottom: var(--typography-spacing-vertical) +} + +small { + font-size: var(--font-size) +} + +:where(dl,ol,ul) { + padding-right: 0; + padding-left: var(--spacing); + -webkit-padding-start: var(--spacing); + padding-inline-start: var(--spacing); + -webkit-padding-end: 0; + padding-inline-end: 0 +} + +:where(dl,ol,ul) li { + margin-bottom: calc(var(--typography-spacing-vertical) * .25) +} + +:where(dl,ol,ul) :is(dl,ol,ul) { + margin: 0; + margin-top: calc(var(--typography-spacing-vertical) * .25) +} + +ul li { + list-style: square +} + +mark { + padding: .125rem .25rem; + background-color: var(--mark-background-color); + color: var(--mark-color); + vertical-align: baseline +} + +blockquote { + display: block; + margin: var(--typography-spacing-vertical) 0; + padding: var(--spacing); + border-right: none; + border-left: .25rem solid var(--blockquote-border-color); + -webkit-border-start: .25rem solid var(--blockquote-border-color); + border-inline-start: .25rem solid var(--blockquote-border-color); + -webkit-border-end: none; + border-inline-end: none +} + +blockquote footer { + margin-top: calc(var(--typography-spacing-vertical) * .5); + color: var(--blockquote-footer-color) +} + +abbr[title] { + border-bottom: 1px dotted; + text-decoration: none; + cursor: help +} + +ins { + color: var(--ins-color); + text-decoration: none +} + +del { + color: var(--del-color) +} + +::-moz-selection { + background-color: var(--primary-focus) +} + +::selection { + background-color: var(--primary-focus) +} + +button { + margin: 0; + overflow: visible; + font-family: inherit; + text-transform: none +} + +[type=button], [type=reset], [type=submit], button { + -webkit-appearance: button +} + +button { + display: block; + width: 100%; + margin-bottom: var(--spacing) +} + +[role=button] { + display: inline-block; + text-decoration: none +} + +[role=button], button, input[type=button], input[type=reset], input[type=submit] { + --background-color: var(--primary); + --border-color: var(--primary); + --color: var(--primary-inverse); + --box-shadow: 0 0 0 rgba(0, 0, 0, 0); + padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal); + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + font-size: 1rem; + line-height: var(--line-height); + text-align: center; + cursor: pointer; + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +[role=button]:is([aria-current],:hover,:active,:focus), button:is([aria-current],:hover,:active,:focus), input[type=button]:is([aria-current],:hover,:active,:focus), input[type=reset]:is([aria-current],:hover,:active,:focus), input[type=submit]:is([aria-current],:hover,:active,:focus) { + --background-color: var(--primary-hover); + --border-color: var(--primary-hover); + --box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --color: var(--primary-inverse) +} + +[role=button]:focus, button:focus, input[type=button]:focus, input[type=reset]:focus, input[type=submit]:focus { + --box-shadow: 0 0 0 rgba(0, 0, 0, 0), 0 0 0 var(--outline-width) var(--primary-focus) +} + +:is(button,input[type=submit],input[type=button],[role=button]).secondary, input[type=reset] { + --background-color: var(--secondary); + --border-color: var(--secondary); + --color: var(--secondary-inverse); + cursor: pointer +} + +:is(button,input[type=submit],input[type=button],[role=button]).secondary:is([aria-current],:hover,:active,:focus), input[type=reset]:is([aria-current],:hover,:active,:focus) { + --background-color: var(--secondary-hover); + --border-color: var(--secondary-hover); + --color: var(--secondary-inverse) +} + +:is(button,input[type=submit],input[type=button],[role=button]).secondary:focus, input[type=reset]:focus { + --box-shadow: 0 0 0 rgba(0, 0, 0, 0), 0 0 0 var(--outline-width) var(--secondary-focus) +} + +:is(button,input[type=submit],input[type=button],[role=button]).contrast { + --background-color: var(--contrast); + --border-color: var(--contrast); + --color: var(--contrast-inverse) +} + +:is(button,input[type=submit],input[type=button],[role=button]).contrast:is([aria-current],:hover,:active,:focus) { + --background-color: var(--contrast-hover); + --border-color: var(--contrast-hover); + --color: var(--contrast-inverse) +} + +:is(button,input[type=submit],input[type=button],[role=button]).contrast:focus { + --box-shadow: 0 0 0 rgba(0, 0, 0, 0), 0 0 0 var(--outline-width) var(--contrast-focus) +} + +:is(button,input[type=submit],input[type=button],[role=button]).outline, input[type=reset].outline { + --background-color: transparent; + --color: var(--primary) +} + +:is(button,input[type=submit],input[type=button],[role=button]).outline:is([aria-current],:hover,:active,:focus), input[type=reset].outline:is([aria-current],:hover,:active,:focus) { + --background-color: transparent; + --color: var(--primary-hover) +} + +:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary, input[type=reset].outline { + --color: var(--secondary) +} + +:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary:is([aria-current],:hover,:active,:focus), input[type=reset].outline:is([aria-current],:hover,:active,:focus) { + --color: var(--secondary-hover) +} + +:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast { + --color: var(--contrast) +} + +:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast:is([aria-current],:hover,:active,:focus) { + --color: var(--contrast-hover) +} + +:where(button,[type=submit],[type=button],[type=reset],[role=button])[disabled], :where(fieldset[disabled]) :is(button,[type=submit],[type=button],[type=reset],[role=button]), a[role=button]:not([href]) { + opacity: .5; + pointer-events: none +} + +input, optgroup, select, textarea { + margin: 0; + font-size: 1rem; + line-height: var(--line-height); + font-family: inherit; + letter-spacing: inherit +} + +input { + overflow: visible +} + +select { + text-transform: none +} + +legend { + max-width: 100%; + padding: 0; + color: inherit; + white-space: normal +} + +textarea { + overflow: auto +} + +[type=checkbox], [type=radio] { + padding: 0 +} + +::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + -webkit-appearance: textfield; + outline-offset: -2px +} + +[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit +} + +::-moz-focus-inner { + padding: 0; + border-style: none +} + +:-moz-focusring { + outline: 0 +} + +:-moz-ui-invalid { + box-shadow: none +} + +::-ms-expand { + display: none +} + +[type=file], [type=range] { + padding: 0; + border-width: 0 +} + +input:not([type=checkbox]):not([type=radio]):not([type=range]) { + height: calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2) +} + +fieldset { + margin: 0; + margin-bottom: var(--spacing); + padding: 0; + border: 0 +} + +fieldset legend, label { + display: block; + margin-bottom: calc(var(--spacing) * .25); + font-weight: var(--form-label-font-weight, var(--font-weight)) +} + +input:not([type=checkbox]):not([type=radio]), select, textarea { + width: 100% +} + +input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]), select, textarea { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal) +} + +input, select, textarea { + --background-color: var(--form-element-background-color); + --border-color: var(--form-element-border-color); + --color: var(--form-element-color); + --box-shadow: none; + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +:where(select,textarea):is(:active,:focus), input:not([type=submit]):not([type=button]):not([type=reset]):not([type=checkbox]):not([type=radio]):not([readonly]):is(:active,:focus) { + --background-color: var(--form-element-active-background-color) +} + +:where(select,textarea):is(:active,:focus), input:not([type=submit]):not([type=button]):not([type=reset]):not([role=switch]):not([readonly]):is(:active,:focus) { + --border-color: var(--form-element-active-border-color) +} + +input:not([type=submit]):not([type=button]):not([type=reset]):not([type=range]):not([type=file]):not([readonly]):focus, select:focus, textarea:focus { + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color) +} + +:where(fieldset[disabled]) :is(input:not([type=submit]):not([type=button]):not([type=reset]),select,textarea), input:not([type=submit]):not([type=button]):not([type=reset])[disabled], select[disabled], textarea[disabled] { + --background-color: var(--form-element-disabled-background-color); + --border-color: var(--form-element-disabled-border-color); + opacity: var(--form-element-disabled-opacity); + pointer-events: none +} + +:where(input,select,textarea):not([type=checkbox]):not([type=radio])[aria-invalid] { + padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem) !important; + padding-left: var(--form-element-spacing-horizontal); + -webkit-padding-start: var(--form-element-spacing-horizontal) !important; + padding-inline-start: var(--form-element-spacing-horizontal) !important; + -webkit-padding-end: calc(var(--form-element-spacing-horizontal) + 1.5rem) !important; + padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem) !important; + background-position: center right .75rem; + background-size: 1rem auto; + background-repeat: no-repeat +} + +:where(input,select,textarea):not([type=checkbox]):not([type=radio])[aria-invalid=false] { + background-image: var(--icon-valid) +} + +:where(input,select,textarea):not([type=checkbox]):not([type=radio])[aria-invalid=true] { + background-image: var(--icon-invalid) +} + +:where(input,select,textarea)[aria-invalid=false] { + --border-color: var(--form-element-valid-border-color) +} + +:where(input,select,textarea)[aria-invalid=false]:is(:active,:focus) { + --border-color: var(--form-element-valid-active-border-color) !important; + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-valid-focus-color) !important +} + +:where(input,select,textarea)[aria-invalid=true] { + --border-color: var(--form-element-invalid-border-color) +} + +:where(input,select,textarea)[aria-invalid=true]:is(:active,:focus) { + --border-color: var(--form-element-invalid-active-border-color) !important; + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-invalid-focus-color) !important +} + +[dir=rtl] :where(input,select,textarea):not([type=checkbox]):not([type=radio])[aria-invalid=false], [dir=rtl] :where(input,select,textarea):not([type=checkbox]):not([type=radio])[aria-invalid=true], [dir=rtl] :where(input,select,textarea):not([type=checkbox]):not([type=radio])[aria-invalid] { + background-position: center left .75rem +} + +input::-webkit-input-placeholder, input::placeholder, select:invalid, textarea::-webkit-input-placeholder, textarea::placeholder { + color: var(--form-element-placeholder-color); + opacity: 1 +} + +input:not([type=checkbox]):not([type=radio]), select, textarea { + margin-bottom: var(--spacing) +} + +select::-ms-expand { + border: 0; + background-color: transparent +} + +select:not([multiple]):not([size]) { + padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem); + padding-left: var(--form-element-spacing-horizontal); + -webkit-padding-start: var(--form-element-spacing-horizontal); + padding-inline-start: var(--form-element-spacing-horizontal); + -webkit-padding-end: calc(var(--form-element-spacing-horizontal) + 1.5rem); + padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem); + background-image: var(--icon-chevron); + background-position: center right .75rem; + background-size: 1rem auto; + background-repeat: no-repeat +} + +[dir=rtl] select:not([multiple]):not([size]) { + background-position: center left .75rem +} + +:where(input,select,textarea) + small { + display: block; + width: 100%; + margin-top: calc(var(--spacing) * -.75); + margin-bottom: var(--spacing); + color: var(--muted-color) +} + +label > :where(input,select,textarea) { + margin-top: calc(var(--spacing) * .25) +} + +[type=checkbox], [type=radio] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + width: 1.25em; + height: 1.25em; + margin-top: -.125em; + margin-right: .375em; + margin-left: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + -webkit-margin-end: .375em; + margin-inline-end: .375em; + border-width: var(--border-width); + font-size: inherit; + vertical-align: middle; + cursor: pointer +} + +[type=checkbox]::-ms-check, [type=radio]::-ms-check { + display: none +} + +[type=checkbox]:checked, [type=checkbox]:checked:active, [type=checkbox]:checked:focus, [type=radio]:checked, [type=radio]:checked:active, [type=radio]:checked:focus { + --background-color: var(--primary); + --border-color: var(--primary); + background-image: var(--icon-checkbox); + background-position: center; + background-size: .75em auto; + background-repeat: no-repeat +} + +[type=checkbox] ~ label, [type=radio] ~ label { + display: inline-block; + margin-right: .375em; + margin-bottom: 0; + cursor: pointer +} + +[type=checkbox]:indeterminate { + --background-color: var(--primary); + --border-color: var(--primary); + background-image: var(--icon-minus); + background-position: center; + background-size: .75em auto; + background-repeat: no-repeat +} + +[type=radio] { + border-radius: 50% +} + +[type=radio]:checked, [type=radio]:checked:active, [type=radio]:checked:focus { + --background-color: var(--primary-inverse); + border-width: .35em; + background-image: none +} + +[type=checkbox][role=switch] { + --background-color: var(--switch-background-color); + --border-color: var(--switch-background-color); + --color: var(--switch-color); + width: 2.25em; + height: 1.25em; + border: var(--border-width) solid var(--border-color); + border-radius: 1.25em; + background-color: var(--background-color); + line-height: 1.25em +} + +[type=checkbox][role=switch]:focus { + --background-color: var(--switch-background-color); + --border-color: var(--switch-background-color) +} + +[type=checkbox][role=switch]:checked { + --background-color: var(--switch-checked-background-color); + --border-color: var(--switch-checked-background-color) +} + +[type=checkbox][role=switch]:before { + display: block; + width: calc(1.25em - (var(--border-width) * 2)); + height: 100%; + border-radius: 50%; + background-color: var(--color); + content: ""; + transition: margin .1s ease-in-out +} + +[type=checkbox][role=switch]:checked { + background-image: none +} + +[type=checkbox][role=switch]:checked::before { + margin-left: calc(1.125em - var(--border-width)); + -webkit-margin-start: calc(1.125em - var(--border-width)); + margin-inline-start: calc(1.125em - var(--border-width)) +} + +[type=checkbox]:checked[aria-invalid=false], [type=checkbox][aria-invalid=false], [type=checkbox][role=switch]:checked[aria-invalid=false], [type=checkbox][role=switch][aria-invalid=false], [type=radio]:checked[aria-invalid=false], [type=radio][aria-invalid=false] { + --border-color: var(--form-element-valid-border-color) +} + +[type=checkbox]:checked[aria-invalid=true], [type=checkbox][aria-invalid=true], [type=checkbox][role=switch]:checked[aria-invalid=true], [type=checkbox][role=switch][aria-invalid=true], [type=radio]:checked[aria-invalid=true], [type=radio][aria-invalid=true] { + --border-color: var(--form-element-invalid-border-color) +} + +[type=color]::-webkit-color-swatch-wrapper { + padding: 0 +} + +[type=color]::-moz-focus-inner { + padding: 0 +} + +[type=color]::-webkit-color-swatch { + border: 0; + border-radius: calc(var(--border-radius) * .5) +} + +[type=color]::-moz-color-swatch { + border: 0; + border-radius: calc(var(--border-radius) * .5) +} + +input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=date], input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=datetime-local], input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=month], input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=time], input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=week] { + --icon-position: 0.75rem; + --icon-width: 1rem; + padding-right: calc(var(--icon-width) + var(--icon-position)); + background-image: var(--icon-date); + background-position: center right var(--icon-position); + background-size: var(--icon-width) auto; + background-repeat: no-repeat +} + +input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=time] { + background-image: var(--icon-time) +} + +[type=date]::-webkit-calendar-picker-indicator, [type=datetime-local]::-webkit-calendar-picker-indicator, [type=month]::-webkit-calendar-picker-indicator, [type=time]::-webkit-calendar-picker-indicator, [type=week]::-webkit-calendar-picker-indicator { + width: var(--icon-width); + margin-right: calc(var(--icon-width) * -1); + margin-left: var(--icon-position); + opacity: 0 +} + +[dir=rtl] :is([type=date],[type=datetime-local],[type=month],[type=time],[type=week]) { + text-align: right +} + +[type=file] { + --color: var(--muted-color); + padding: calc(var(--form-element-spacing-vertical) * .5) 0; + border: 0; + border-radius: 0; + background: 0 0 +} + +[type=file]::-webkit-file-upload-button { + --background-color: var(--secondary); + --border-color: var(--secondary); + --color: var(--secondary-inverse); + margin-right: calc(var(--spacing) / 2); + margin-left: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + -webkit-margin-end: calc(var(--spacing) / 2); + margin-inline-end: calc(var(--spacing) / 2); + padding: calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5); + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + font-size: 1rem; + line-height: var(--line-height); + text-align: center; + cursor: pointer; + -webkit-transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +[type=file]::file-selector-button { + --background-color: var(--secondary); + --border-color: var(--secondary); + --color: var(--secondary-inverse); + margin-right: calc(var(--spacing) / 2); + margin-left: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + -webkit-margin-end: calc(var(--spacing) / 2); + margin-inline-end: calc(var(--spacing) / 2); + padding: calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5); + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + font-size: 1rem; + line-height: var(--line-height); + text-align: center; + cursor: pointer; + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +[type=file]::-webkit-file-upload-button:is(:hover,:active,:focus) { + --background-color: var(--secondary-hover); + --border-color: var(--secondary-hover) +} + +[type=file]::file-selector-button:is(:hover,:active,:focus) { + --background-color: var(--secondary-hover); + --border-color: var(--secondary-hover) +} + +[type=file]::-webkit-file-upload-button { + --background-color: var(--secondary); + --border-color: var(--secondary); + --color: var(--secondary-inverse); + margin-right: calc(var(--spacing) / 2); + margin-left: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + -webkit-margin-end: calc(var(--spacing) / 2); + margin-inline-end: calc(var(--spacing) / 2); + padding: calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5); + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + font-size: 1rem; + line-height: var(--line-height); + text-align: center; + cursor: pointer; + -webkit-transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +[type=file]::-webkit-file-upload-button:is(:hover,:active,:focus) { + --background-color: var(--secondary-hover); + --border-color: var(--secondary-hover) +} + +[type=file]::-ms-browse { + --background-color: var(--secondary); + --border-color: var(--secondary); + --color: var(--secondary-inverse); + margin-right: calc(var(--spacing) / 2); + margin-left: 0; + margin-inline-start: 0; + margin-inline-end: calc(var(--spacing) / 2); + padding: calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5); + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + font-size: 1rem; + line-height: var(--line-height); + text-align: center; + cursor: pointer; + -ms-transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +[type=file]::-ms-browse:is(:hover,:active,:focus) { + --background-color: var(--secondary-hover); + --border-color: var(--secondary-hover) +} + +[type=range] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + width: 100%; + height: 1.25rem; + background: 0 0 +} + +[type=range]::-webkit-slider-runnable-track { + width: 100%; + height: .25rem; + border-radius: var(--border-radius); + background-color: var(--range-border-color); + -webkit-transition: background-color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), box-shadow var(--transition) +} + +[type=range]::-moz-range-track { + width: 100%; + height: .25rem; + border-radius: var(--border-radius); + background-color: var(--range-border-color); + -moz-transition: background-color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), box-shadow var(--transition) +} + +[type=range]::-ms-track { + width: 100%; + height: .25rem; + border-radius: var(--border-radius); + background-color: var(--range-border-color); + -ms-transition: background-color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), box-shadow var(--transition) +} + +[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + width: 1.25rem; + height: 1.25rem; + margin-top: -.5rem; + border: 2px solid var(--range-thumb-border-color); + border-radius: 50%; + background-color: var(--range-thumb-color); + cursor: pointer; + -webkit-transition: background-color var(--transition), transform var(--transition); + transition: background-color var(--transition), transform var(--transition) +} + +[type=range]::-moz-range-thumb { + -webkit-appearance: none; + width: 1.25rem; + height: 1.25rem; + margin-top: -.5rem; + border: 2px solid var(--range-thumb-border-color); + border-radius: 50%; + background-color: var(--range-thumb-color); + cursor: pointer; + -moz-transition: background-color var(--transition), transform var(--transition); + transition: background-color var(--transition), transform var(--transition) +} + +[type=range]::-ms-thumb { + -webkit-appearance: none; + width: 1.25rem; + height: 1.25rem; + margin-top: -.5rem; + border: 2px solid var(--range-thumb-border-color); + border-radius: 50%; + background-color: var(--range-thumb-color); + cursor: pointer; + -ms-transition: background-color var(--transition), transform var(--transition); + transition: background-color var(--transition), transform var(--transition) +} + +[type=range]:focus, [type=range]:hover { + --range-border-color: var(--range-active-border-color); + --range-thumb-color: var(--range-thumb-hover-color) +} + +[type=range]:active { + --range-thumb-color: var(--range-thumb-active-color) +} + +[type=range]:active::-webkit-slider-thumb { + transform: scale(1.25) +} + +[type=range]:active::-moz-range-thumb { + transform: scale(1.25) +} + +[type=range]:active::-ms-thumb { + transform: scale(1.25) +} + +input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=search] { + -webkit-padding-start: calc(var(--form-element-spacing-horizontal) + 1.75rem); + padding-inline-start: calc(var(--form-element-spacing-horizontal) + 1.75rem); + border-radius: 5rem; + background-image: var(--icon-search); + background-position: center left 1.125rem; + background-size: 1rem auto; + background-repeat: no-repeat +} + +input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=search][aria-invalid] { + -webkit-padding-start: calc(var(--form-element-spacing-horizontal) + 1.75rem) !important; + padding-inline-start: calc(var(--form-element-spacing-horizontal) + 1.75rem) !important; + background-position: center left 1.125rem, center right .75rem +} + +input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=search][aria-invalid=false] { + background-image: var(--icon-search), var(--icon-valid) +} + +input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=search][aria-invalid=true] { + background-image: var(--icon-search), var(--icon-invalid) +} + +[type=search]::-webkit-search-cancel-button { + -webkit-appearance: none; + display: none +} + +[dir=rtl] :where(input):not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=search] { + background-position: center right 1.125rem +} + +[dir=rtl] :where(input):not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file])[type=search][aria-invalid] { + background-position: center right 1.125rem, center left .75rem +} + +code, kbd, pre, samp { + font-size: .875em; + font-family: var(--font-family) +} + +pre { + -ms-overflow-style: scrollbar; + overflow: auto +} + +code, kbd, pre { + border-radius: var(--border-radius); + background: var(--code-background-color); + color: var(--code-color); + font-weight: var(--font-weight); + line-height: initial +} + +code, kbd { + display: inline-block; + padding: .375rem .5rem +} + +pre { + display: block; + margin-bottom: var(--spacing); + overflow-x: auto +} + +pre > code { + display: block; + padding: var(--spacing); + background: 0 0; + font-size: 14px; + line-height: var(--line-height) +} + +code b { + color: var(--code-tag-color); + font-weight: var(--font-weight) +} + +code i { + color: var(--code-property-color); + font-style: normal +} + +code u { + color: var(--code-value-color); + text-decoration: none +} + +code em { + color: var(--code-comment-color); + font-style: normal +} + +kbd { + background-color: var(--code-kbd-background-color); + color: var(--code-kbd-color); + vertical-align: baseline +} + +hr { + height: 0; + border: 0; + border-top: 1px solid var(--muted-border-color); + color: inherit +} + +[hidden], template { + display: none !important +} + +canvas { + display: inline-block +} + +:where(navli)::before { + float: left; + content: "​" +} + +nav, nav ul { + display: flex +} + +nav { + justify-content: space-between +} + +nav ol, nav ul { + align-items: center; + margin-bottom: 0; + padding: 0; + list-style: none +} + +nav ol:first-of-type, nav ul:first-of-type { + margin-left: calc(var(--nav-element-spacing-horizontal) * -1) +} + +nav ol:last-of-type, nav ul:last-of-type { + margin-right: calc(var(--nav-element-spacing-horizontal) * -1) +} + +nav li { + display: inline-block; + margin: 0; + padding: var(--nav-element-spacing-vertical) var(--nav-element-spacing-horizontal) +} + +nav li > * { + --spacing: 0 +} + +nav :where(a,[role=link]) { + display: inline-block; + margin: calc(var(--nav-link-spacing-vertical) * -1) calc(var(--nav-link-spacing-horizontal) * -1); + padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal); + border-radius: var(--border-radius); + text-decoration: none +} + +nav :where(a,[role=link]):is([aria-current],:hover,:active,:focus) { + text-decoration: none +} + +nav [role=button] { + margin-right: inherit; + margin-left: inherit; + padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal) +} + +aside li, aside nav, aside ol, aside ul { + display: block +} + +aside li { + padding: calc(var(--nav-element-spacing-vertical) * .5) var(--nav-element-spacing-horizontal) +} + +aside li a { + display: block +} + +aside li [role=button] { + margin: inherit +} + +progress { + display: inline-block; + vertical-align: baseline +} + +progress { + -webkit-appearance: none; + -moz-appearance: none; + display: inline-block; + appearance: none; + width: 100%; + height: .5rem; + margin-bottom: calc(var(--spacing) * .5); + overflow: hidden; + border: 0; + border-radius: var(--border-radius); + background-color: var(--progress-background-color); + color: var(--progress-color) +} + +progress::-webkit-progress-bar { + border-radius: var(--border-radius); + background: 0 0 +} + +progress[value]::-webkit-progress-value { + background-color: var(--progress-color) +} + +progress::-moz-progress-bar { + background-color: var(--progress-color) +} + +@media (prefers-reduced-motion: no-preference) { + progress:indeterminate { + background: var(--progress-background-color) linear-gradient(to right, var(--progress-color) 30%, var(--progress-background-color) 30%) top left/150% 150% no-repeat; + -webkit-animation: progressIndeterminate 1s linear infinite; + animation: progressIndeterminate 1s linear infinite + } + + progress:indeterminate[value]::-webkit-progress-value { + background-color: transparent + } + + progress:indeterminate::-moz-progress-bar { + background-color: transparent + } +} + +@media (prefers-reduced-motion: no-preference) { + [dir=rtl] progress:indeterminate { + animation-direction: reverse + } +} + +@-webkit-keyframes progressIndeterminate { + 0% { + background-position: 200% 0 + } + 100% { + background-position: -200% 0 + } +} + +@keyframes progressIndeterminate { + 0% { + background-position: 200% 0 + } + 100% { + background-position: -200% 0 + } +} + +[aria-busy=true] { + cursor: progress +} + +[aria-busy=true]:not(input):not(select):not(textarea)::before { + display: inline-block; + width: 1em; + height: 1em; + border: .1875em solid currentColor; + border-radius: 1em; + border-right-color: transparent; + content: ""; + vertical-align: text-bottom; + vertical-align: -.125em; + -webkit-animation: spinner .75s linear infinite; + animation: spinner .75s linear infinite; + opacity: var(--loading-spinner-opacity) +} + +[aria-busy=true]:not(input):not(select):not(textarea):not(:empty)::before { + margin-right: calc(var(--spacing) * .5); + margin-left: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + -webkit-margin-end: calc(var(--spacing) * .5); + margin-inline-end: calc(var(--spacing) * .5) +} + +[aria-busy=true]:not(input):not(select):not(textarea):empty { + text-align: center +} + +a[aria-busy=true], button[aria-busy=true], input[type=button][aria-busy=true], input[type=reset][aria-busy=true], input[type=submit][aria-busy=true] { + pointer-events: none +} + +@-webkit-keyframes spinner { + to { + transform: rotate(360deg) + } +} + +@keyframes spinner { + to { + transform: rotate(360deg) + } +} + +[data-tooltip] { + position: relative +} + +[data-tooltip]:not(a):not(button):not(input) { + border-bottom: 1px dotted; + text-decoration: none; + cursor: help +} + +[data-tooltip]::after, [data-tooltip]::before { + display: block; + z-index: 99; + position: absolute; + bottom: 100%; + left: 50%; + padding: .25rem .5rem; + overflow: hidden; + transform: translate(-50%, -.25rem); + border-radius: var(--border-radius); + background: var(--tooltip-background-color); + content: attr(data-tooltip); + color: var(--tooltip-color); + font-style: normal; + font-weight: var(--font-weight); + font-size: .875rem; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; + opacity: 0; + pointer-events: none +} + +[data-tooltip]::after { + padding: 0; + transform: translate(-50%, 0); + border-top: .3rem solid; + border-right: .3rem solid transparent; + border-left: .3rem solid transparent; + border-radius: 0; + background-color: transparent; + content: ""; + color: var(--tooltip-background-color) +} + +[data-tooltip]:focus::after, [data-tooltip]:focus::before, [data-tooltip]:hover::after, [data-tooltip]:hover::before { + opacity: 1 +} + +@media (hover: hover) and (pointer: fine) { + [data-tooltip]:focus::after, [data-tooltip]:focus::before, [data-tooltip]:hover::after, [data-tooltip]:hover::before { + -webkit-animation-duration: .2s; + animation-duration: .2s; + -webkit-animation-name: slide; + animation-name: slide + } + + [data-tooltip]:focus::after, [data-tooltip]:hover::after { + -webkit-animation-name: slideCaret; + animation-name: slideCaret + } +} + +@-webkit-keyframes slide { + from { + transform: translate(-50%, .75rem); + opacity: 0 + } + to { + transform: translate(-50%, -.25rem); + opacity: 1 + } +} + +@keyframes slide { + from { + transform: translate(-50%, .75rem); + opacity: 0 + } + to { + transform: translate(-50%, -.25rem); + opacity: 1 + } +} + +@-webkit-keyframes slideCaret { + from { + opacity: 0 + } + 50% { + transform: translate(-50%, -.25rem); + opacity: 0 + } + to { + transform: translate(-50%, 0); + opacity: 1 + } +} + +@keyframes slideCaret { + from { + opacity: 0 + } + 50% { + transform: translate(-50%, -.25rem); + opacity: 0 + } + to { + transform: translate(-50%, 0); + opacity: 1 + } +} + +[aria-controls] { + cursor: pointer +} + +[aria-disabled=true], [disabled] { + cursor: not-allowed +} + +[aria-hidden=false][hidden] { + display: initial +} + +[aria-hidden=false][hidden]:not(:focus) { + clip: rect(0, 0, 0, 0); + position: absolute +} + +[tabindex], a, area, button, input, label, select, summary, textarea { + -ms-touch-action: manipulation +} + +[dir=rtl] { + direction: rtl +} + +:root { + --icon-external: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(115, 130, 140, 0.999)' opacity='0.66' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); + --icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23FFF' stroke-width='5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-check-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(0, 0, 0, 0.75)' stroke-width='5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E") +} + +:root:not([data-theme=dark]), [data-theme=light] { + --invalid-color: #c62828; + --valid-color: #388e3c; + --nav-background-color: rgba(255, 255, 255, 0.7); + --nav-border-color: rgba(115, 130, 140, 0.2); + --nav-logo-color: #fff; + --article-code-background-color: #f9fafb +} + +@media only screen and (prefers-color-scheme: dark) { + :root:not([data-theme=light]) { + --invalid-color: rgba(183, 28, 28, 0.5); + --valid-color: rgba(46, 125, 50, 0.5); + --nav-background-color: rgba(16, 24, 30, 0.8); + --nav-border-color: rgba(115, 130, 140, 0.2); + --nav-logo-color: #0e1419; + --article-code-background-color: var(--code-background-color) + } +} + +[data-theme=dark] { + --invalid-color: rgba(183, 28, 28, 0.5); + --valid-color: rgba(46, 125, 50, 0.5); + --nav-background-color: rgba(16, 24, 30, 0.8); + --nav-border-color: rgba(115, 130, 140, 0.2); + --nav-logo-color: #0e1419; + --article-code-background-color: var(--code-background-color) +} + +html { + scroll-behavior: smooth +} + +.switcher { + position: fixed; + right: calc(var(--spacing) / 2 + 0px); + bottom: var(--spacing); + width: auto; + margin-bottom: 0; + padding: .75rem; + border-radius: 2rem; + box-shadow: var(--card-box-shadow); + line-height: 1; + text-align: right +} + +.switcher::after { + display: inline-block; + width: 1rem; + height: 1rem; + border: .15rem solid currentColor; + border-radius: 50%; + background: linear-gradient(to right, currentColor 0, currentColor 50%, transparent 50%); + content: ""; + vertical-align: bottom; + transition: transform var(--transition) +} + +.switcher i { + display: inline-block; + max-width: 0; + padding: 0; + overflow: hidden; + font-style: normal; + font-size: .875rem; + white-space: nowrap +} + +.switcher:focus, .switcher:hover { + max-width: 100%; + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +.switcher:hover::after { + transform: rotate(180deg) +} + +.switcher:hover i { + max-width: 100%; + padding: 0 calc(var(--spacing) / 2) 0 calc(var(--spacing) / 4); + transition: max-width var(--transition), padding var(--transition) +} + +.switcher:focus { + box-shadow: var(--card-box-shadow), 0 0 0 .2rem var(--secondary-focus) +} + +@media (min-width: 576px) { + .switcher { + right: calc(var(--spacing) + 0px) + } +} + +:root:not([data-theme=dark]), [data-theme=light] { + --demo-background: linear-gradient( + 180deg, + #fff 0%, + rgba(188, 235, 251, 0.25) 33%, + rgba(188, 235, 251, 0.25) 66%, + #fff 100% + ) +} + +@media only screen and (prefers-color-scheme: dark) { + :root:not([data-theme=light]) { + --demo-background: linear-gradient(180deg, #11191f 0%, + rgba(10, 53, 67, 0.5) 33%, + rgba(10, 53, 67, 0.5) 66%, + #11191f 100%) + } +} + +[data-theme=dark] { + --demo-background: linear-gradient(180deg, #11191f 0%, + rgba(10, 53, 67, 0.5) 33%, + rgba(10, 53, 67, 0.5) 66%, + #11191f 100%) +} + +header h1, header h2, main h1, main h2 { + --font-weight: 800 +} + +h1 { + line-height: 1.125 +} + +@media (min-width: 576px) { + h1 { + --font-size: 2.25rem + } +} + +@media (min-width: 768px) { + h1 { + --font-size: 2.5rem + } +} + +@media (min-width: 992px) { + h1 { + --font-size: 2.75rem + } +} + +@media (min-width: 1200px) { + h1 { + --font-size: 3rem + } +} + +h2 { + line-height: 1.25 +} + +@media (min-width: 576px) { + h2 { + --font-size: 1.875rem + } +} + +@media (min-width: 768px) { + h2 { + --font-size: 2rem + } +} + +@media (min-width: 992px) { + h2 { + --font-size: 2.125rem + } +} + +@media (min-width: 1200px) { + h2 { + --font-size: 2.25rem + } +} + +hgroup { + margin-bottom: var(--block-spacing-vertical) +} + +hgroup:after { + display: block; + max-width: 100px; + margin-top: 1rem; + border-bottom: .125rem solid var(--primary); + content: "" +} + +#principles hgroup, header h1, header p { + max-width: 60ch; + margin-left: auto; + margin-right: auto +} + +ul.check { + padding: 0 +} + +ul.check li { + margin-left: 1.5rem; + list-style: none +} + +ul.check li::before { + display: block; + position: absolute; + width: 1rem; + height: 1rem; + margin-top: .25rem; + margin-left: -1.5rem; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgba(16, 149, 193, 0.999)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + background-size: 100%; + content: "" +} + +body { + width: 100%; + margin: 0 +} + +footer, header, main > section { + --block-spacing-vertical: 3rem; + --demo-height: calc(4.5rem + 352px); + width: 100%; + margin: 0; + padding: var(--block-spacing-vertical) 0 +} + +@media (min-width: 576px) { + footer, header, main > section { + --block-spacing-vertical: 4rem; + --demo-height: calc(6rem + 392px) + } +} + +@media (min-width: 768px) { + footer, header, main > section { + --block-spacing-vertical: 5rem; + --demo-height: calc(7.5rem + 440px) + } +} + +@media (min-width: 992px) { + footer, header, main > section { + --block-spacing-vertical: 6rem; + --demo-height: calc(9rem + 488px) + } +} + +@media (min-width: 1200px) { + footer, header, main > section { + --block-spacing-vertical: 7rem; + --demo-height: calc(10.5rem + 540px) + } +} + +header { + padding-bottom: 0 +} + +#demo { + display: flex; + align-items: center +} + +#examples, #star { + background-color: var(--background-color) +} + +#principles { + padding-top: 0 +} + +#star { + padding: calc(var(--block-spacing-vertical) / 2) 0; + text-align: center +} + +body > nav { + --nav-link-spacing-vertical: 1rem; + box-shadow: 0 1px 0 var(--nav-border-color) +} + +body > nav a { + border-radius: 0 +} + +body > nav a svg { + vertical-align: text-bottom; + height: 1rem +} + +body > nav ul:first-of-type { + margin-left: calc(var(--spacing) * -1) +} + +body > nav ul:first-of-type li { + padding: 0 +} + +body > nav ul:first-of-type li:first-of-type a { + display: block; + margin: 0; + padding: 0; + background: var(--h1-color); + color: var(--nav-logo-color) +} + +body > nav ul:first-of-type li:first-of-type a svg { + display: block; + width: 3.5rem; + height: 3.5rem +} + +body > nav ul:first-of-type li:nth-of-type(2) { + display: none; + margin-left: calc(var(--spacing) * 1.5); + color: var(--h1-color); + font-weight: 200 +} + +body > nav ul:first-of-type li:nth-of-type(2) strong { + font-weight: 400 +} + +@media (min-width: 992px) { + body > nav ul:first-of-type li:nth-of-type(2) { + display: inline + } +} + +header h1, header p { + text-align: center +} + +header h1 { + margin-bottom: var(--spacing) +} + +header h1 ~ p { + color: var(--muted-color) +} + +header a:not(:last-of-type) { + margin-right: calc(var(--spacing) * .5) +} + +header p:last-of-type { + margin-bottom: 0 +} + +article { + margin: var(--block-spacing-vertical) 0; + padding: var(--block-spacing-vertical) var(--block-spacing-horizontal); + overflow: hidden; + border-radius: var(--border-radius); + background: var(--card-background-color); + box-shadow: var(--card-box-shadow) +} + +article > footer, article > header, article > pre { + margin-right: calc(var(--block-spacing-horizontal) * -1); + margin-left: calc(var(--block-spacing-horizontal) * -1); + padding: calc(var(--block-spacing-vertical) * .66) var(--block-spacing-horizontal); + background-color: var(--card-sectionning-background-color) +} + +article > header { + margin-top: calc(var(--block-spacing-vertical) * -1); + margin-bottom: var(--block-spacing-vertical); + border-bottom: var(--border-width) solid var(--card-border-color) +} + +article > footer, article > pre { + margin-top: var(--block-spacing-vertical); + margin-bottom: calc(var(--block-spacing-vertical) * -1); + border-top: var(--border-width) solid var(--card-border-color) +} + +#demo { + height: var(--demo-height); + background: var(--demo-background) +} + +#demo article { + --block-spacing-vertical: 2rem; + max-width: 510px; + height: auto; + min-height: calc(var(--block-spacing-vertical) * 2); + max-height: calc(var(--block-spacing-vertical) * 2); + margin: 0; + margin-right: auto; + margin-left: auto; + pointer-events: none; + transition: min-height var(--transition), max-height var(--transition); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none +} + +@media (min-width: 576px) { + #demo article { + --block-spacing-vertical: 2.5rem + } +} + +@media (min-width: 768px) { + #demo article { + --block-spacing-vertical: 3rem + } +} + +@media (min-width: 992px) { + #demo article { + --block-spacing-vertical: 3.5rem + } +} + +@media (min-width: 1200px) { + #demo article { + --block-spacing-vertical: 4rem + } +} + +#demo article pre > code { + padding: 0 +} + +#demo article label { + color: var(--color) +} + +#demo article .demo-last-child, #demo article form { + margin-bottom: 0 !important +} + +#demo article input[type=text] { + height: inherit +} + +#demo article .ti-cursor { + margin: 0 -.5ch !important +} + +#demo article .fadeIn, #demo article .fadeOut { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; + -webkit-animation-duration: .4s; + animation-duration: .4s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both +} + +#demo article .fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0 + } + to { + opacity: 1 + } +} + +@keyframes fadeIn { + from { + opacity: 0 + } + to { + opacity: 1 + } +} + +@-webkit-keyframes fadeOut { + from { + opacity: 1 + } + to { + opacity: 0 + } +} + +@keyframes fadeOut { + from { + opacity: 1 + } + to { + opacity: 0 + } +} + +a[role=button].active, button.active, input[type=button].active, input[type=reset].active, input[type=submit].active { + --background-color: var(--primary-hover); + --border-color: var(--primary-hover); + --box-shadow: 0 0 0 rgba(0, 0, 0, 0), 0 0 0 var(--outline-width) var(--primary-focus) +} + +input:not([type=submit]):not([type=button]):not([type=reset]):not([type=checkbox]):not([type=radio]):not([readonly]).active, select.active, textarea.active { + --background-color: var(--form-element-active-background-color) +} + +input:not([type=submit]):not([type=button]):not([type=reset]):not([role=switch]):not([readonly]).active, select.active, textarea.active { + --border-color: var(--form-element-active-border-color) +} + +input:not([type=submit]):not([type=button]):not([type=reset]):not([type=range]):not([type=file]):not([readonly]).active, select.active, textarea.active { + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color) +} + +[type=checkbox]:checked, [type=checkbox]:checked.active, [type=radio]:checked, [type=radio]:checked.active { + --background-color: var(--primary); + --border-color: var(--primary) +} + +[type=checkbox][role=switch].active { + --background-color: var(--switch-background-color); + --border-color: var(--switch-background-color) +} + +[type=checkbox][role=switch]:checked { + --background-color: var(--switch-checked-background-color); + --border-color: var(--switch-checked-background-color) +} + +[type=range].active { + --range-thumb-color: var(--range-thumb-active-color); + --range-border-color: var(--range-active-border-color) +} + +[type=range].active::-webkit-slider-thumb { + transform: scale(1.25) +} + +[type=range].active::-moz-range-thumb { + transform: scale(1.25) +} + +[type=range].active::-ms-thumb { + transform: scale(1.25) +} + +#principles .grid { + grid-gap: 2rem; + display: grid; + grid-template-columns:1fr; + margin: 0 +} + +@media (min-width: 768px) { + #principles .grid { + grid-template-columns:1fr 1fr + } +} + +@media (min-width: 1200px) { + #principles .grid { + grid-template-columns:1fr 1fr 1fr 1fr + } +} + +#principles hgroup { + text-align: center +} + +#principles hgroup h2 { + margin-bottom: var(--spacing) +} + +#principles hgroup:after { + display: none +} + +#principles h3 { + --font-weight: 400 +} + +#principles svg { + color: var(--primary); + width: auto; + height: 1.25rem +} + +#principles h4 { + --font-size: 1rem; + --font-weight: 400; + margin-bottom: .5rem +} + +#principles p { + --color: var(--muted-color) +} + +#examples .grid { + grid-gap: 2rem; + display: grid; + grid-template-columns:1fr; + margin: 0 +} + +@media (min-width: 576px) { + #examples .grid { + grid-template-columns:1fr 1fr + } +} + +@media (min-width: 992px) { + #examples .grid { + grid-template-columns:1fr 1fr 1fr + } +} + +#examples .grid > div > a { + text-transform: uppercase; + font-weight: 500 +} + +.example { + position: relative; + width: 100%; + margin-top: calc(var(--spacing) * .5); + margin-bottom: var(--spacing); + padding-top: 56.25% +} + +.example .desktop, .example .mobile { + position: absolute; + transform: scale(1.001); + background-color: var(--card-background-color); + background-repeat: no-repeat; + background-size: 200% auto; + box-shadow: var(--card-box-shadow); + transition: background-position .15s ease-in-out, transform .3s ease-in-out +} + +.example .desktop::before, .example .mobile::before { + position: absolute; + top: -1px; + right: -1px; + bottom: -1px; + left: -1px; + border: 1px solid rgba(138, 153, 163, .25); + content: ""; + transition: box-shadow .3s ease-in-out +} + +.example .desktop { + top: 0; + left: 0; + width: calc(100% - var(--spacing)); + padding-top: calc(56.25% - var(--spacing)) +} + +.example .mobile { + right: 0; + bottom: 0; + width: 19.53125%; + padding-top: calc(42.2916666667% - var(--spacing)); + border-radius: var(--border-radius); + transition-delay: 75ms +} + +.example .mobile::before { + border-radius: var(--border-radius); + transition-delay: 75ms +} + +a:active .desktop, a:focus .desktop, a:hover .desktop { + transform: scale(1.03125) +} + +a:active .mobile, a:focus .mobile, a:hover .mobile { + transform: scale(1.0625) +} + +a:active .desktop::before, a:active .mobile::before, a:focus .desktop::before, a:focus .mobile::before, a:hover .desktop::before, a:hover .mobile::before { + box-shadow: 0 0 1rem .1rem +} + +:root:not([data-theme=dark]) .example .desktop, :root:not([data-theme=dark]) .example .mobile, [data-theme=light] .example .desktop, [data-theme=light] .example .mobile { + background-position: 100% 0; + background-position: calc(100% - 1px) 0 +} + +:root:not([data-theme=dark]) .example:hover .desktop, :root:not([data-theme=dark]) .example:hover .mobile, [data-theme=light] .example:hover .desktop, [data-theme=light] .example:hover .mobile { + background-position: 0 0 +} + +@media only screen and (prefers-color-scheme: dark) { + :root:not([data-theme=light]) .example .desktop, :root:not([data-theme=light]) .example .mobile { + background-position: 0 0 + } + + :root:not([data-theme=light]) .example:hover .desktop, :root:not([data-theme=light]) .example:hover .mobile { + background-position: 100% 0; + background-position: calc(100% - 1px) 0 + } +} + +[data-theme=dark] .example .desktop, [data-theme=dark] .example .mobile { + background-position: 0 0 +} + +[data-theme=dark] .example:hover .desktop, [data-theme=dark] .example:hover .mobile { + background-position: 100% 0; + background-position: calc(100% - 1px) 0 +} + +#why [data-theme]:first-of-type pre, #why ul { + margin-bottom: var(--block-spacing-vertical) +} + +[data-theme=invalid], [data-theme=valid] { + position: relative; + margin-bottom: 0 !important +} + +[data-theme=invalid]:before, [data-theme=valid]:before { + display: block; + position: absolute; + top: 0; + right: 0; + padding: .375rem .75rem; + border-radius: 0; + color: var(--primary-inverse); + font-size: 14px; + line-height: 1 +} + +@media (min-width: 992px) { + [data-theme=invalid]:before, [data-theme=valid]:before { + top: var(--spacing); + right: var(--spacing) + } +} + +[data-theme=invalid] pre, [data-theme=valid] pre { + padding: var(--spacing) +} + +[data-theme=invalid] pre code, [data-theme=valid] pre code { + padding: calc(var(--spacing) * 1.625) 0 +} + +[data-theme=invalid]:before { + background: var(--invalid-color); + content: "Bulky" +} + +[data-theme=valid] pre { + margin-bottom: 0 +} + +[data-theme=valid]:before { + background: var(--valid-color); + content: "Great" +} + +#star p { + margin-bottom: 0; + line-height: 1 +} + +#star iframe { + display: block; + margin-top: calc(var(--spacing) * .5); + margin-right: auto; + margin-left: auto +} + +@media (min-width: 576px) { + #star iframe { + display: inline-block; + margin-top: 0; + margin-right: 0; + margin-bottom: .125rem; + margin-left: calc(var(--spacing) * .25); + vertical-align: middle + } +} + +body > footer ul, body > footer ul li { + margin-bottom: 0; + padding: 0; + color: var(--muted-color); + list-style: none +} + +body > footer li { + display: inline-block +} + +body > footer li:not(:first-child)::before { + margin: 0 .25rem; + content: "·" +} + +body > footer ul:first-of-type { + margin-bottom: calc(var(--spacing) * .5) +} + +body > footer ul:first-of-type a { + text-decoration: none +} + +@media (max-width: 767px) { + body > footer ul:last-of-type li { + display: list-item + } + + body > footer ul:last-of-type li::before { + display: none + } +} + +header { + padding-bottom: var(--block-spacing-vertical) +} + +section#demo { + display: none +} + +[data-typeit-id]:before { + content: '.'; + display: inline-block; + width: 0; + visibility: hidden; +} + +@keyframes blink-9870177 { + 0% { + opacity: 0 + } + 49% { + opacity: 0 + } + 50% { + opacity: 1 + } +} + +[data-typeit-id='9870177'] .ti-cursor { + animation: blink-9870177 1s infinite; +} + +[data-typeit-id='9870177'] .ti-cursor.with-delay { + animation-delay: 500ms; +} + +[data-typeit-id='9870177'] .ti-cursor.disabled { + animation: none; +} + +.panel-container { + display: flex; + justify-content: space-between; +} + +.snippet-panel { + flex: 1; + margin-right: 10px; /* adjust as needed */ +} + +.documentation-panel { + background-color: #213544; + border-radius: 20px; + flex: 1; + padding: 30px; +} + +.snippet-documentation-panel { + margin-top: 20px; + margin-bottom: 20px; +} + +.snippet-documentation-panel h2 { + font-size: 2.0rem; +} + +.halign-left { + text-align: left; +} + +.grid-all th, .grid-all td { + border: 1px solid #dfe2e5; + border-collapse: collapse; +} + +.hljs-string { + color: green; +} + +.hljs-meta .hljs-string { + color: green; +}