├── .github ├── dependabot.yml └── workflows │ ├── ci-version.yml │ └── ci.yml ├── resources ├── mathjax-config.js ├── webfont.js ├── highlight-code.js ├── font-cjk.css ├── font-cjk-mono.css ├── github.css ├── github-markdown.css └── highlight.min.js ├── src ├── lib.rs ├── cli.rs └── main.rs ├── Makefile ├── Cargo.toml ├── LICENSE ├── rustfmt.toml ├── .gitignore ├── example.md └── README.md /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" -------------------------------------------------------------------------------- /resources/mathjax-config.js: -------------------------------------------------------------------------------- 1 | window.MathJax = { 2 | tex: { 3 | inlineMath: [['#{{', '}}#']], 4 | displayMath: [['#{{{', '}}}#']] 5 | } 6 | }; -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | /*! 2 | # Markdown to HTML Converter 3 | 4 | Markdown to HTML Converter is a free tool for converting a Markdown file to a single HTML file with built-in CSS and JS. 5 | */ 6 | -------------------------------------------------------------------------------- /resources/webfont.js: -------------------------------------------------------------------------------- 1 | document.getElementsByClassName("markdown-body")[0].style.fontFamily = 'CJK'; 2 | 3 | var code = document.getElementsByTagName("code"); 4 | 5 | for (var i = 0; i < code.length; ++i) { 6 | code[i].style.fontFamily = 'CJK MONO'; 7 | } -------------------------------------------------------------------------------- /resources/highlight-code.js: -------------------------------------------------------------------------------- 1 | document.querySelectorAll('code[class^="language-"]').forEach(function(element) { 2 | var c = element.getAttribute('class'); 3 | element.setAttribute('class', c.replace(/language-/g, '')); 4 | 5 | hljs.highlightElement(element); 6 | }); -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | EXECUTABLE_NAME := markdown2html-converter 2 | 3 | all: ./target/x86_64-unknown-linux-musl/release/$(EXECUTABLE_NAME) 4 | 5 | ./target/x86_64-unknown-linux-musl/release/$(EXECUTABLE_NAME): $(shell find . -type f -iname '*.rs' -o -name 'Cargo.toml' | grep -v ./target | sed 's/ /\\ /g') $(shell find ./resources -type f | sed 's/ /\\ /g') 6 | cargo build --release --target x86_64-unknown-linux-musl 7 | 8 | install: 9 | $(MAKE) 10 | sudo cp ./target/x86_64-unknown-linux-musl/release/$(EXECUTABLE_NAME) /usr/local/bin/$(EXECUTABLE_NAME) 11 | sudo chown root: /usr/local/bin/$(EXECUTABLE_NAME) 12 | sudo chmod 0755 /usr/local/bin/$(EXECUTABLE_NAME) 13 | 14 | uninstall: 15 | sudo rm /usr/local/bin/$(EXECUTABLE_NAME) 16 | 17 | test: 18 | cargo test --verbose 19 | 20 | clean: 21 | cargo clean 22 | -------------------------------------------------------------------------------- /resources/font-cjk.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'CJK'; 3 | src: local("NotoSansCJKTC-Regular"), local("SourceHanSansTC-Regular"), local("SourceHanSansTW-Regular"), local("NotoSansCJKJP-Regular"), local("NotoSansCJKKR-Regular"), local("NotoSansCJKHK-Regular"), local("NotoSansCJKSC-Regular"), url("https://cdn.jsdelivr.net/gh/magiclen/source-han-sans-tc-woff2@2.004/SourceHanSansTC-Regular.woff2") format("woff2"); 4 | font-display: swap 5 | } 6 | 7 | @font-face { 8 | font-family: 'CJK'; 9 | font-weight: bold; 10 | src: local("NotoSansCJKTC-Bold"), local("SourceHanSansTC-Bold"), local("SourceHanSansTW-Bold"), local("NotoSansCJKJP-Bold"), local("NotoSansCJKKR-Bold"), local("NotoSansCJKHK-Bold"), local("NotoSansCJKSC-Bold"), url("https://cdn.jsdelivr.net/gh/magiclen/source-han-sans-tc-woff2@2.004/SourceHanSansTC-Bold.woff2") format("woff2"); 11 | font-display: swap 12 | } -------------------------------------------------------------------------------- /resources/font-cjk-mono.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'CJK MONO'; 3 | src: local("NotoSansMonoCJKTC-Regular"), local("SourceHanSansHWTC-Regular"), local("SourceHanSansHWTW-Regular"), local("NotoSansMonoCJKJP-Regular"), local("NotoSansMonoCJKKR-Regular"), local("NotoSansMonoCJKHK-Regular"), local("NotoSansMonoCJKSC-Regular"), url("https://cdn.jsdelivr.net/gh/magiclen/source-han-sans-hw-tc-woff2@2.004/SourceHanSansHWTC-Regular.woff2") format("woff2"); 4 | font-display: swap 5 | } 6 | 7 | @font-face { 8 | font-family: 'CJK MONO'; 9 | font-weight: bold; 10 | src: local("NotoSansMonoCJKTC-Bold"), local("SourceHanSansHWTC-Bold"), local("SourceHanSansHWTW-Bold"), local("NotoSansMonoCJKJP-Bold"), local("NotoSansMonoCJKKR-Bold"), local("NotoSansMonoCJKHK-Bold"), local("NotoSansMonoCJKSC-Bold"), url($font_url + "SourceHanSansHWTC-Bold.woff2") format("woff2"); 11 | font-display: swap 12 | } -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "markdown2html-converter" 3 | version = "1.1.12" 4 | authors = ["Magic Len "] 5 | edition = "2021" 6 | rust-version = "1.70" 7 | repository = "https://github.com/magiclen/markdown2html-converter" 8 | homepage = "https://magiclen.org/markdown2html-converter" 9 | keywords = ["markdown", "html", "MathJax", "LaTeX", "highlight"] 10 | categories = ["command-line-utilities"] 11 | description = "A tool for converting a Markdown file to a single HTML file with built-in CSS and JS." 12 | license = "MIT" 13 | include = ["src/**/*", "Cargo.toml", "README.md", "LICENSE", "resources/*"] 14 | 15 | [profile.release] 16 | lto = true 17 | codegen-units = 1 18 | panic = "abort" 19 | strip = true 20 | 21 | [dependencies] 22 | clap = { version = "4", features = ["derive"] } 23 | concat-with = "0.2" 24 | terminal_size = "0.3" 25 | 26 | anyhow = "1" 27 | 28 | lazy-static-include = "3.1.1" 29 | html-minifier = "4" 30 | comrak = { version = "0.19", default-features = false } 31 | html-escape = "0.2" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 magiclen.org (Ron Li) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /resources/github.css: -------------------------------------------------------------------------------- 1 | .hljs { 2 | display: block; 3 | overflow-x: auto; 4 | padding: 0.5em; 5 | color: #333; 6 | background: #f8f8f8; 7 | } 8 | 9 | .hljs-comment, 10 | .hljs-quote { 11 | color: #998; 12 | font-style: italic; 13 | } 14 | 15 | .hljs-keyword, 16 | .hljs-selector-tag, 17 | .hljs-subst { 18 | color: #333; 19 | font-weight: bold; 20 | } 21 | 22 | .hljs-number, 23 | .hljs-literal, 24 | .hljs-variable, 25 | .hljs-template-variable, 26 | .hljs-tag .hljs-attr { 27 | color: #008080; 28 | } 29 | 30 | .hljs-string, 31 | .hljs-doctag { 32 | color: #d14; 33 | } 34 | 35 | .hljs-title, 36 | .hljs-section, 37 | .hljs-selector-id { 38 | color: #900; 39 | font-weight: bold; 40 | } 41 | 42 | .hljs-subst { 43 | font-weight: normal; 44 | } 45 | 46 | .hljs-type, 47 | .hljs-class .hljs-title { 48 | color: #458; 49 | font-weight: bold; 50 | } 51 | 52 | .hljs-tag, 53 | .hljs-name, 54 | .hljs-attribute { 55 | color: #000080; 56 | font-weight: normal; 57 | } 58 | 59 | .hljs-regexp, 60 | .hljs-link { 61 | color: #009926; 62 | } 63 | 64 | .hljs-symbol, 65 | .hljs-bullet { 66 | color: #990073; 67 | } 68 | 69 | .hljs-built_in, 70 | .hljs-builtin-name { 71 | color: #0086b3; 72 | } 73 | 74 | .hljs-meta { 75 | color: #999; 76 | font-weight: bold; 77 | } 78 | 79 | .hljs-deletion { 80 | background: #fdd; 81 | } 82 | 83 | .hljs-addition { 84 | background: #dfd; 85 | } 86 | 87 | .hljs-emphasis { 88 | font-style: italic; 89 | } 90 | 91 | .hljs-strong { 92 | font-weight: bold; 93 | } -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | # array_width = 60 2 | # attr_fn_like_width = 70 3 | binop_separator = "Front" 4 | blank_lines_lower_bound = 0 5 | blank_lines_upper_bound = 1 6 | brace_style = "PreferSameLine" 7 | # chain_width = 60 8 | color = "Auto" 9 | # comment_width = 100 10 | condense_wildcard_suffixes = true 11 | control_brace_style = "AlwaysSameLine" 12 | empty_item_single_line = true 13 | enum_discrim_align_threshold = 80 14 | error_on_line_overflow = false 15 | error_on_unformatted = false 16 | # fn_call_width = 60 17 | fn_params_layout = "Tall" 18 | fn_single_line = false 19 | force_explicit_abi = true 20 | force_multiline_blocks = false 21 | format_code_in_doc_comments = true 22 | doc_comment_code_block_width = 80 23 | format_generated_files = true 24 | format_macro_matchers = true 25 | format_macro_bodies = true 26 | skip_macro_invocations = [] 27 | format_strings = true 28 | hard_tabs = false 29 | hex_literal_case = "Upper" 30 | imports_indent = "Block" 31 | imports_layout = "Mixed" 32 | indent_style = "Block" 33 | inline_attribute_width = 0 34 | match_arm_blocks = true 35 | match_arm_leading_pipes = "Never" 36 | match_block_trailing_comma = true 37 | max_width = 100 38 | merge_derives = true 39 | imports_granularity = "Crate" 40 | newline_style = "Unix" 41 | normalize_comments = false 42 | normalize_doc_attributes = true 43 | overflow_delimited_expr = true 44 | remove_nested_parens = true 45 | reorder_impl_items = true 46 | reorder_imports = true 47 | group_imports = "StdExternalCrate" 48 | reorder_modules = true 49 | short_array_element_width_threshold = 10 50 | # single_line_if_else_max_width = 50 51 | space_after_colon = true 52 | space_before_colon = false 53 | spaces_around_ranges = false 54 | struct_field_align_threshold = 80 55 | struct_lit_single_line = false 56 | # struct_lit_width = 18 57 | # struct_variant_width = 35 58 | tab_spaces = 4 59 | trailing_comma = "Vertical" 60 | trailing_semicolon = true 61 | type_punctuation_density = "Wide" 62 | use_field_init_shorthand = true 63 | use_small_heuristics = "Max" 64 | use_try_shorthand = true 65 | where_single_line = false 66 | wrap_comments = false -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | example.html 2 | 3 | # Created by https://www.gitignore.io/api/intellij+all 4 | 5 | ### Intellij+all ### 6 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 7 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 8 | 9 | # User-specific stuff 10 | .idea/**/workspace.xml 11 | .idea/**/tasks.xml 12 | .idea/**/usage.statistics.xml 13 | .idea/**/dictionaries 14 | .idea/**/shelf 15 | 16 | # Sensitive or high-churn files 17 | .idea/**/dataSources/ 18 | .idea/**/dataSources.ids 19 | .idea/**/dataSources.local.xml 20 | .idea/**/sqlDataSources.xml 21 | .idea/**/dynamic.xml 22 | .idea/**/uiDesigner.xml 23 | .idea/**/dbnavigator.xml 24 | 25 | # Gradle 26 | .idea/**/gradle.xml 27 | .idea/**/libraries 28 | 29 | # Gradle and Maven with auto-import 30 | # When using Gradle or Maven with auto-import, you should exclude module files, 31 | # since they will be recreated, and may cause churn. Uncomment if using 32 | # auto-import. 33 | # .idea/modules.xml 34 | # .idea/*.iml 35 | # .idea/modules 36 | 37 | # CMake 38 | cmake-build-*/ 39 | 40 | # Mongo Explorer plugin 41 | .idea/**/mongoSettings.xml 42 | 43 | # File-based project format 44 | *.iws 45 | 46 | # IntelliJ 47 | out/ 48 | 49 | # mpeltonen/sbt-idea plugin 50 | .idea_modules/ 51 | 52 | # JIRA plugin 53 | atlassian-ide-plugin.xml 54 | 55 | # Cursive Clojure plugin 56 | .idea/replstate.xml 57 | 58 | # Crashlytics plugin (for Android Studio and IntelliJ) 59 | com_crashlytics_export_strings.xml 60 | crashlytics.properties 61 | crashlytics-build.properties 62 | fabric.properties 63 | 64 | # Editor-based Rest Client 65 | .idea/httpRequests 66 | 67 | ### Intellij+all Patch ### 68 | # Ignores the whole .idea folder and all .iml files 69 | # See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 70 | 71 | .idea/ 72 | 73 | # Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 74 | 75 | *.iml 76 | modules.xml 77 | .idea/misc.xml 78 | *.ipr 79 | 80 | 81 | # End of https://www.gitignore.io/api/intellij+all 82 | 83 | 84 | ### Rust ### 85 | # Generated by Cargo 86 | # will have compiled files and executables 87 | /target/ 88 | 89 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries 90 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html 91 | Cargo.lock 92 | 93 | # These are backup files generated by rustfmt 94 | **/*.rs.bk 95 | 96 | 97 | # End of https://www.gitignore.io/api/rust 98 | -------------------------------------------------------------------------------- /example.md: -------------------------------------------------------------------------------- 1 | # h1 Heading 2 | ## h2 Heading 3 | ### h3 Heading 4 | #### h4 Heading 5 | ##### h5 Heading 6 | ###### h6 Heading 7 | 8 | 9 | ## Horizontal Rules 10 | 11 | ___ 12 | 13 | --- 14 | 15 | *** 16 | 17 | ## Emphasis 18 | 19 | **This is bold text** 20 | 21 | __This is bold text__ 22 | 23 | *This is italic text* 24 | 25 | _This is italic text_ 26 | 27 | ~~Strikethrough~~ 28 | 29 | 30 | ## Blockquotes 31 | 32 | 33 | > Blockquotes can also be nested... 34 | >> ...by using additional greater-than signs right next to each other... 35 | > > > ...or with spaces between arrows. 36 | 37 | 38 | ## Lists 39 | 40 | Unordered 41 | 42 | + Create a list by starting a line with `+`, `-`, or `*` 43 | + Sub-lists are made by indenting 2 spaces: 44 | - Marker character change forces new list start: 45 | * Ac tristique libero volutpat at 46 | + Facilisis in pretium nisl aliquet 47 | - Nulla volutpat aliquam velit 48 | + Very easy! 49 | 50 | Ordered 51 | 52 | 1. Lorem ipsum dolor sit amet 53 | 2. Consectetur adipiscing elit 54 | 3. Integer molestie lorem at massa 55 | 56 | 57 | 1. You can use sequential numbers... 58 | 1. ...or keep all the numbers as `1.` 59 | 60 | Start numbering with offset: 61 | 62 | 57. foo 63 | 1. bar 64 | 65 | 66 | ## Code 67 | 68 | Inline `code` 69 | 70 | Indented code 71 | 72 | // Some comments 73 | line 1 of code 74 | line 2 of code 75 | line 3 of code 76 | 77 | 78 | Block code "fences" 79 | 80 | ``` 81 | Sample text here... 82 | ``` 83 | 84 | Syntax highlighting 85 | 86 | ``` js 87 | var foo = function (bar) { 88 | return bar++; 89 | }; 90 | 91 | console.log(foo(5)); 92 | ``` 93 | 94 | ## Tables 95 | 96 | | Option | Description | 97 | | ------ | ----------- | 98 | | data | path to data files to supply the data that will be passed into templates. | 99 | | engine | engine to be used for processing templates. Handlebars is the default. | 100 | | ext | extension to be used for dest files. | 101 | 102 | Right aligned columns 103 | 104 | | Option | Description | 105 | | ------:| -----------:| 106 | | data | path to data files to supply the data that will be passed into templates. | 107 | | engine | engine to be used for processing templates. Handlebars is the default. | 108 | | ext | extension to be used for dest files. | 109 | 110 | 111 | ## Links 112 | 113 | [link text](http://dev.nodeca.com) 114 | 115 | [link with title](http://nodeca.github.io/pica/demo/ "title text!") 116 | 117 | Autoconverted link https://github.com/nodeca/pica (enable linkify to see) 118 | 119 | 120 | ## Images 121 | 122 | ![Minion](https://octodex.github.com/images/minion.png) 123 | ![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat") 124 | 125 | Like links, Images also have a footnote style syntax 126 | 127 | ![Alt text][id] 128 | 129 | With a reference later in the document defining the URL location: 130 | 131 | [id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" 132 | 133 | ## Math 134 | 135 | Inline math equation: #{{ \omega = d\phi / dt }}#. Display math should get its own line like so: 136 | 137 | #{{{I = \int \rho R^{2} dV}}}# -------------------------------------------------------------------------------- /src/cli.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | 3 | use clap::{CommandFactory, FromArgMatches, Parser}; 4 | use concat_with::concat_line; 5 | use terminal_size::terminal_size; 6 | 7 | pub const APP_NAME: &str = "Markdown to HTML Converter"; 8 | pub const CARGO_PKG_VERSION: &str = env!("CARGO_PKG_VERSION"); 9 | const CARGO_PKG_AUTHORS: &str = env!("CARGO_PKG_AUTHORS"); 10 | 11 | const AFTER_HELP: &str = "Enjoy it! https://magiclen.org"; 12 | 13 | const APP_ABOUT: &str = concat!( 14 | "A simple tool for converting Simple Chinese to Traditional Chinese(TW).\n\nEXAMPLES:\n", 15 | concat_line!(prefix "markdown2html-converter ", 16 | "/path/to/file.md # Convert /path/to/file.md to /path/to/file.html, titled \"file\"", 17 | "/path/to/file.md -o /path/to/output.html # Convert /path/to/file.md to /path/to/output.html, titled \"output\"", 18 | "/path/to/file.md -t 'Hello World!' # Convert /path/to/file.md to /path/to/file.html, titled \"Hello World!\"", 19 | ) 20 | ); 21 | 22 | #[derive(Debug, Parser)] 23 | #[command(name = APP_NAME)] 24 | #[command(term_width = terminal_size().map(|(width, _)| width.0 as usize).unwrap_or(0))] 25 | #[command(version = CARGO_PKG_VERSION)] 26 | #[command(author = CARGO_PKG_AUTHORS)] 27 | #[command(after_help = AFTER_HELP)] 28 | pub struct CLIArgs { 29 | #[arg(short, long)] 30 | #[arg(help = "Specify the title of your HTML file")] 31 | pub title: Option, 32 | 33 | #[arg(value_hint = clap::ValueHint::FilePath)] 34 | #[arg(help = "Specify the path of your Markdown file")] 35 | pub markdown_path: PathBuf, 36 | 37 | #[arg(short = 'o', long)] 38 | #[arg(value_hint = clap::ValueHint::FilePath)] 39 | #[arg(help = "Specify the path of your HTML file")] 40 | pub html_path: Option, 41 | 42 | #[arg(short, long)] 43 | #[arg(help = "Force to output if the HTML file exists")] 44 | pub force: bool, 45 | 46 | #[arg(long)] 47 | #[arg(help = "Allow raw HTML and dangerous URLs")] 48 | pub no_safe: bool, 49 | 50 | #[arg(long)] 51 | #[arg(help = "Not allow to use highlight.js")] 52 | pub no_highlight: bool, 53 | 54 | #[arg(long)] 55 | #[arg(help = "Not allow to use mathjax.js")] 56 | pub no_mathjax: bool, 57 | 58 | #[arg(long)] 59 | #[arg(help = "Not allow to use CJK fonts")] 60 | pub no_cjk_fonts: bool, 61 | 62 | #[arg(long)] 63 | #[arg(help = "Specify the path of your custom CSS file")] 64 | pub css_path: Option, 65 | 66 | #[arg(long)] 67 | #[arg(value_hint = clap::ValueHint::FilePath)] 68 | #[arg(help = "Specify the path of your custom highlight.js file")] 69 | pub highlight_js_path: Option, 70 | 71 | #[arg(long)] 72 | #[arg(value_hint = clap::ValueHint::FilePath)] 73 | #[arg(help = "Specify the path of your custom CSS file for highlight.js code blocks")] 74 | pub highlight_css_path: Option, 75 | 76 | #[arg(long)] 77 | #[arg(value_hint = clap::ValueHint::FilePath)] 78 | #[arg(help = "Specify the path of your custom single MATH_JAX.js file")] 79 | pub mathjax_js_path: Option, 80 | } 81 | 82 | pub fn get_args() -> CLIArgs { 83 | let args = CLIArgs::command(); 84 | 85 | let about = format!("{APP_NAME} {CARGO_PKG_VERSION}\n{CARGO_PKG_AUTHORS}\n{APP_ABOUT}"); 86 | 87 | let args = args.about(about); 88 | 89 | let matches = args.get_matches(); 90 | 91 | match CLIArgs::from_arg_matches(&matches) { 92 | Ok(args) => args, 93 | Err(err) => { 94 | err.exit(); 95 | }, 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /.github/workflows/ci-version.yml: -------------------------------------------------------------------------------- 1 | name: CI-version 2 | 3 | on: 4 | push: 5 | tags: 6 | - "v*" 7 | 8 | env: 9 | CARGO_TERM_COLOR: always 10 | 11 | jobs: 12 | tests-1: 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | os: 17 | - ubuntu-latest 18 | toolchain: 19 | - stable 20 | - nightly 21 | target: 22 | - x86_64-unknown-linux-gnu 23 | - x86_64-unknown-linux-musl 24 | features: 25 | - 26 | name: Test ${{ matrix.toolchain }} on ${{ matrix.os }} to ${{ matrix.target }} (${{ matrix.features }}) 27 | runs-on: ${{ matrix.os }} 28 | steps: 29 | - name: Install musl-tools (Linux) 30 | run: | 31 | sudo apt update 32 | sudo apt install musl-tools 33 | if: matrix.target == 'x86_64-unknown-linux-musl' 34 | - uses: actions/checkout@v4 35 | - uses: actions-rust-lang/setup-rust-toolchain@v1 36 | with: 37 | toolchain: ${{ matrix.toolchain }} 38 | target: ${{ matrix.target }} 39 | - run: cargo test --release --target ${{ matrix.target }} ${{ matrix.features }} 40 | - run: cargo doc --release --target ${{ matrix.target }} ${{ matrix.features }} 41 | 42 | tests-2: 43 | strategy: 44 | fail-fast: false 45 | matrix: 46 | os: 47 | - macos-latest 48 | - windows-latest 49 | toolchain: 50 | - stable 51 | - nightly 52 | features: 53 | - 54 | name: Test ${{ matrix.toolchain }} on ${{ matrix.os }} (${{ matrix.features }}) 55 | runs-on: ${{ matrix.os }} 56 | steps: 57 | - uses: actions/checkout@v4 58 | - uses: actions-rust-lang/setup-rust-toolchain@v1 59 | with: 60 | toolchain: ${{ matrix.toolchain }} 61 | target: ${{ matrix.target }} 62 | - run: cargo test --release ${{ matrix.features }} 63 | - run: cargo doc --release ${{ matrix.features }} 64 | 65 | MSRV-1: 66 | strategy: 67 | fail-fast: false 68 | matrix: 69 | os: 70 | - ubuntu-latest 71 | toolchain: 72 | - "1.70" 73 | target: 74 | - x86_64-unknown-linux-gnu 75 | - x86_64-unknown-linux-musl 76 | features: 77 | - 78 | name: Test ${{ matrix.toolchain }} on ${{ matrix.os }} to ${{ matrix.target }} (${{ matrix.features }}) 79 | runs-on: ${{ matrix.os }} 80 | steps: 81 | - name: Install musl-tools (Linux) 82 | run: | 83 | sudo apt update 84 | sudo apt install musl-tools 85 | if: matrix.target == 'x86_64-unknown-linux-musl' 86 | - uses: actions/checkout@v4 87 | - uses: actions-rust-lang/setup-rust-toolchain@v1 88 | with: 89 | toolchain: ${{ matrix.toolchain }} 90 | target: ${{ matrix.target }} 91 | - run: cargo test --release --lib --bins --target ${{ matrix.target }} ${{ matrix.features }} 92 | 93 | MSRV-2: 94 | strategy: 95 | fail-fast: false 96 | matrix: 97 | os: 98 | - macos-latest 99 | - windows-latest 100 | toolchain: 101 | - "1.70" 102 | features: 103 | - 104 | name: Test ${{ matrix.toolchain }} on ${{ matrix.os }} (${{ matrix.features }}) 105 | runs-on: ${{ matrix.os }} 106 | steps: 107 | - uses: actions/checkout@v4 108 | - uses: actions-rust-lang/setup-rust-toolchain@v1 109 | with: 110 | toolchain: ${{ matrix.toolchain }} 111 | target: ${{ matrix.target }} 112 | - run: cargo test --release --lib --bins ${{ matrix.features }} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Markdown to HTML Converter 2 | ==================== 3 | 4 | [![CI](https://github.com/magiclen/markdown2html-converter/actions/workflows/ci.yml/badge.svg)](https://github.com/magiclen/markdown2html-converter/actions/workflows/ci.yml) 5 | 6 | Markdown to HTML Converter is a free tool for converting a Markdown file to a single HTML file with built-in CSS and JS. 7 | 8 | ## Help 9 | 10 | ``` 11 | EXAMPLES: 12 | markdown2html-converter /path/to/file.md # Convert /path/to/file.md to /path/to/file.html, titled "file" 13 | markdown2html-converter /path/to/file.md -o /path/to/output.html # Convert /path/to/file.md to /path/to/output.html, titled "output" 14 | markdown2html-converter /path/to/file.md -t 'Hello World!' # Convert /path/to/file.md to /path/to/file.html, titled "Hello World!" 15 | 16 | Usage: markdown2html-converter [OPTIONS] 17 | 18 | Arguments: 19 | Specify the path of your Markdown file 20 | 21 | Options: 22 | -t, --title Specify the title of your HTML file 23 | -o, --html-path <HTML_PATH> Specify the path of your HTML file 24 | -f, --force Force to output if the HTML file exists 25 | --no-safe Allow raw HTML and dangerous URLs 26 | --no-highlight Not allow to use highlight.js 27 | --no-mathjax Not allow to use mathjax.js 28 | --no-cjk-fonts Not allow to use CJK fonts 29 | --css-path <CSS_PATH> Specify the path of your custom CSS file 30 | --highlight-js-path <HIGHLIGHT_JS_PATH> Specify the path of your custom highlight.js file 31 | --highlight-css-path <HIGHLIGHT_CSS_PATH> Specify the path of your custom CSS file for highlight.js code blocks 32 | --mathjax-js-path <MATHJAX_JS_PATH> Specify the path of your custom single MATH_JAX.js file 33 | -h, --help Print help 34 | -V, --version Print version 35 | ``` 36 | 37 | ## Dependency 38 | 39 | Markdown is converted to HTML by the [comrak](https://crates.io/crates/comrak) crate. The default stylesheet (the CSS file) is from [sindresorhus/github-markdown-css](https://github.com/sindresorhus/github-markdown-css). 40 | 41 | If ` ``` ` is used in the input Markdown file, the [highlight.js](https://highlightjs.org/) will be automatically embedded in the output HTML file. The preset supported languages are listed below. 42 | 43 | * Apache 44 | * Bash 45 | * C 46 | * C# 47 | * C++ 48 | * CSS 49 | * Diff 50 | * Dockerfile 51 | * Go 52 | * HTML, XML 53 | * JSON 54 | * Java 55 | * JavaScript 56 | * Kotlin 57 | * Less 58 | * Lua 59 | * Makefile 60 | * Markdown 61 | * Nginx 62 | * Objective-C 63 | * PHP 64 | * PHP Template 65 | * Perl 66 | * Python 67 | * Python REPL 68 | * R 69 | * Ruby 70 | * Rust 71 | * SCSS 72 | * SQL 73 | * Shell 74 | * Swift 75 | * TOML, INI 76 | * TypeScript 77 | * Visual Basic .NET 78 | * YAML 79 | 80 | If `#{{` - `}}#` or `#{{{` - `}}}#` is used in the input Markdown file, the [mathjax.js](https://www.mathjax.org/) will be automatically embedded in the output HTML file. `#{{` and `}}#` are `inlineMath` delimiters. `#{{{` and `}}}#` are `displayMath` delimiters. The default **mathjax.js** are using the [tex-mml-chtml](http://docs.mathjax.org/en/latest/web/components/combined.html#tex-mml-chtml) configuration file. 81 | 82 | ## A Markdown Example 83 | 84 | [The Markdown File](https://github.com/magiclen/markdown2html-converter/blob/master/example.md) 85 | 86 | [The HTML File](https://jsfiddle.net/magiclen/jgs324w0/latest) 87 | 88 | ## License 89 | 90 | [MIT](LICENSE) -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [ push, pull_request ] 4 | 5 | env: 6 | CARGO_TERM_COLOR: always 7 | 8 | jobs: 9 | rustfmt: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: actions-rust-lang/setup-rust-toolchain@v1 14 | with: 15 | toolchain: nightly 16 | components: rustfmt 17 | - uses: actions-rust-lang/rustfmt@v1 18 | 19 | clippy: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions-rust-lang/setup-rust-toolchain@v1 24 | with: 25 | components: clippy 26 | - run: cargo clippy --all-targets --all-features -- -D warnings 27 | 28 | tests-1: 29 | strategy: 30 | fail-fast: false 31 | matrix: 32 | os: 33 | - ubuntu-latest 34 | toolchain: 35 | - stable 36 | - nightly 37 | target: 38 | - x86_64-unknown-linux-gnu 39 | - x86_64-unknown-linux-musl 40 | features: 41 | - 42 | name: Test ${{ matrix.toolchain }} on ${{ matrix.os }} to ${{ matrix.target }} (${{ matrix.features }}) 43 | runs-on: ${{ matrix.os }} 44 | steps: 45 | - name: Install musl-tools (Linux) 46 | run: | 47 | sudo apt update 48 | sudo apt install musl-tools 49 | if: matrix.target == 'x86_64-unknown-linux-musl' 50 | - uses: actions/checkout@v4 51 | - uses: actions-rust-lang/setup-rust-toolchain@v1 52 | with: 53 | toolchain: ${{ matrix.toolchain }} 54 | target: ${{ matrix.target }} 55 | - run: cargo test --target ${{ matrix.target }} ${{ matrix.features }} 56 | - run: cargo doc --target ${{ matrix.target }} ${{ matrix.features }} 57 | 58 | tests-2: 59 | strategy: 60 | fail-fast: false 61 | matrix: 62 | os: 63 | - macos-latest 64 | - windows-latest 65 | toolchain: 66 | - stable 67 | - nightly 68 | features: 69 | - 70 | name: Test ${{ matrix.toolchain }} on ${{ matrix.os }} (${{ matrix.features }}) 71 | runs-on: ${{ matrix.os }} 72 | steps: 73 | - uses: actions/checkout@v4 74 | - uses: actions-rust-lang/setup-rust-toolchain@v1 75 | with: 76 | toolchain: ${{ matrix.toolchain }} 77 | target: ${{ matrix.target }} 78 | - run: cargo test ${{ matrix.features }} 79 | - run: cargo doc ${{ matrix.features }} 80 | 81 | MSRV-1: 82 | strategy: 83 | fail-fast: false 84 | matrix: 85 | os: 86 | - ubuntu-latest 87 | toolchain: 88 | - "1.70" 89 | target: 90 | - x86_64-unknown-linux-gnu 91 | - x86_64-unknown-linux-musl 92 | features: 93 | - 94 | name: Test ${{ matrix.toolchain }} on ${{ matrix.os }} to ${{ matrix.target }} (${{ matrix.features }}) 95 | runs-on: ${{ matrix.os }} 96 | steps: 97 | - name: Install musl-tools (Linux) 98 | run: | 99 | sudo apt update 100 | sudo apt install musl-tools 101 | if: matrix.target == 'x86_64-unknown-linux-musl' 102 | - uses: actions/checkout@v4 103 | - uses: actions-rust-lang/setup-rust-toolchain@v1 104 | with: 105 | toolchain: ${{ matrix.toolchain }} 106 | target: ${{ matrix.target }} 107 | - run: cargo test --lib --bins --target ${{ matrix.target }} ${{ matrix.features }} 108 | 109 | MSRV-2: 110 | strategy: 111 | fail-fast: false 112 | matrix: 113 | os: 114 | - macos-latest 115 | - windows-latest 116 | toolchain: 117 | - "1.70" 118 | features: 119 | - 120 | name: Test ${{ matrix.toolchain }} on ${{ matrix.os }} (${{ matrix.features }}) 121 | runs-on: ${{ matrix.os }} 122 | steps: 123 | - uses: actions/checkout@v4 124 | - uses: actions-rust-lang/setup-rust-toolchain@v1 125 | with: 126 | toolchain: ${{ matrix.toolchain }} 127 | target: ${{ matrix.target }} 128 | - run: cargo test --lib --bins ${{ matrix.features }} -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | mod cli; 2 | 3 | use std::{borrow::Cow, fs, io}; 4 | 5 | use anyhow::{anyhow, Context}; 6 | use cli::*; 7 | use comrak::{markdown_to_html, ComrakOptions}; 8 | use html_minifier::HTMLMinifier; 9 | use lazy_static_include::lazy_static_include_str; 10 | 11 | lazy_static_include_str! { 12 | MARKDOWN_CSS => "resources/github-markdown.css", 13 | FONT_CJK => "resources/font-cjk.css", 14 | FONT_CJK_MONO => "resources/font-cjk-mono.css", 15 | GITHUB => "resources/github.css", 16 | WEBFONT => "resources/webfont.js", 17 | HIGHLIGHT_CODE => "resources/highlight-code.js", 18 | MATH_JAX => "resources/mathjax.min.js", 19 | MATH_JAX_CONFIG => "resources/mathjax-config.js", 20 | HIGHLIGHT => "resources/highlight.min.js", 21 | } 22 | 23 | fn main() -> anyhow::Result<()> { 24 | let args = get_args(); 25 | 26 | if args.markdown_path.metadata().with_context(|| anyhow!("{:?}", args.markdown_path))?.is_dir() 27 | { 28 | return Err(anyhow!("{:?} is a directory!", args.markdown_path)); 29 | } 30 | 31 | let file_ext = args 32 | .markdown_path 33 | .extension() 34 | .map(|ext| ext.to_string_lossy()) 35 | .unwrap_or_else(|| "".into()); 36 | 37 | match file_ext.to_ascii_lowercase().as_str() { 38 | "md" | "markdown" => (), 39 | _ => { 40 | return Err(anyhow!("{:?} is not a Markdown file.", args.markdown_path)); 41 | }, 42 | } 43 | 44 | let file_stem = args 45 | .markdown_path 46 | .file_stem() 47 | .map(|ext| ext.to_string_lossy()) 48 | .unwrap_or_else(|| "".into()); 49 | 50 | let html_path = match args.html_path { 51 | Some(html_path) => Cow::from(html_path), 52 | None => { 53 | let folder_path = args.markdown_path.parent().unwrap(); 54 | 55 | Cow::from(folder_path.join(format!("{file_stem}.html"))) 56 | }, 57 | }; 58 | 59 | match html_path.metadata() { 60 | Ok(metadata) => { 61 | if metadata.is_dir() || !args.force { 62 | return Err(anyhow!("`{html_path:?}` exists!")); 63 | } 64 | }, 65 | Err(error) if error.kind() == io::ErrorKind::NotFound => (), 66 | Err(error) => return Err(error).with_context(|| anyhow!("{html_path:?}")), 67 | } 68 | 69 | let title = match args.title { 70 | Some(title) => Cow::from(title), 71 | None => file_stem, 72 | }; 73 | 74 | let markdown = fs::read_to_string(args.markdown_path.as_path()) 75 | .with_context(|| anyhow!("{:?}", args.markdown_path))?; 76 | 77 | let markdown_html = { 78 | let mut options = ComrakOptions::default(); 79 | 80 | if args.no_safe { 81 | options.render.unsafe_ = true; 82 | } 83 | 84 | options.extension.autolink = true; 85 | options.extension.description_lists = true; 86 | options.extension.footnotes = true; 87 | options.extension.strikethrough = true; 88 | options.extension.superscript = true; 89 | options.extension.table = true; 90 | options.extension.tagfilter = true; 91 | options.extension.tasklist = true; 92 | options.render.hardbreaks = true; 93 | 94 | markdown_to_html(&markdown, &options) 95 | }; 96 | 97 | let mut html_minifier = HTMLMinifier::new(); 98 | 99 | html_minifier.digest("<!DOCTYPE html>")?; 100 | html_minifier.digest("<html>").unwrap(); 101 | 102 | html_minifier.digest("<head>").unwrap(); 103 | html_minifier.digest("<meta charset=UTF-8>").unwrap(); 104 | html_minifier 105 | .digest( 106 | "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, \ 107 | shrink-to-fit=no\">", 108 | ) 109 | .unwrap(); 110 | html_minifier 111 | .digest(format!( 112 | "<meta name=\"generator\" content=\"{} {} by magiclen.org\"/>", 113 | APP_NAME, CARGO_PKG_VERSION, 114 | )) 115 | .unwrap(); 116 | html_minifier.digest("<title>").unwrap(); 117 | html_minifier.digest(html_escape::encode_text(title.as_ref()).as_ref()).unwrap(); 118 | html_minifier.digest("").unwrap(); 119 | 120 | html_minifier.digest("").unwrap(); 135 | 136 | let has_code = { 137 | if args.no_highlight { 138 | false 139 | } else { 140 | markdown_html.contains("") 141 | } 142 | }; 143 | 144 | let has_mathjax = { 145 | if args.no_mathjax { 146 | false 147 | } else { 148 | markdown_html.contains("#{{") 149 | } 150 | }; 151 | 152 | if !args.no_cjk_fonts { 153 | html_minifier.digest("").unwrap(); 156 | 157 | html_minifier.digest("").unwrap(); 160 | } 161 | 162 | if has_code { 163 | html_minifier.digest("").unwrap(); 178 | 179 | html_minifier.digest("").unwrap(); 194 | } 195 | 196 | if has_mathjax { 197 | html_minifier.digest("").unwrap(); 200 | 201 | html_minifier.digest("").unwrap(); 216 | } 217 | 218 | html_minifier.digest("").unwrap(); 219 | 220 | html_minifier.digest("").unwrap(); 221 | 222 | html_minifier.digest("
").unwrap(); 223 | html_minifier.digest(&markdown_html).unwrap(); 224 | html_minifier.digest("
").unwrap(); 225 | 226 | if !args.no_cjk_fonts { 227 | html_minifier.digest("").unwrap(); 230 | } 231 | 232 | if has_code { 233 | html_minifier.digest("").unwrap(); 236 | } 237 | 238 | html_minifier.digest("").unwrap(); 239 | 240 | html_minifier.digest("").unwrap(); 241 | 242 | let minified_html = html_minifier.get_html(); 243 | 244 | fs::write(html_path.as_ref(), minified_html).with_context(|| anyhow!("{html_path:?}"))?; 245 | 246 | Ok(()) 247 | } 248 | -------------------------------------------------------------------------------- /resources/github-markdown.css: -------------------------------------------------------------------------------- 1 | @media (prefers-color-scheme: dark) { 2 | .markdown-body, 3 | [data-theme="dark"] { 4 | /*dark*/ 5 | color-scheme: dark; 6 | --color-prettylights-syntax-comment: #8b949e; 7 | --color-prettylights-syntax-constant: #79c0ff; 8 | --color-prettylights-syntax-entity: #d2a8ff; 9 | --color-prettylights-syntax-storage-modifier-import: #c9d1d9; 10 | --color-prettylights-syntax-entity-tag: #7ee787; 11 | --color-prettylights-syntax-keyword: #ff7b72; 12 | --color-prettylights-syntax-string: #a5d6ff; 13 | --color-prettylights-syntax-variable: #ffa657; 14 | --color-prettylights-syntax-brackethighlighter-unmatched: #f85149; 15 | --color-prettylights-syntax-invalid-illegal-text: #f0f6fc; 16 | --color-prettylights-syntax-invalid-illegal-bg: #8e1519; 17 | --color-prettylights-syntax-carriage-return-text: #f0f6fc; 18 | --color-prettylights-syntax-carriage-return-bg: #b62324; 19 | --color-prettylights-syntax-string-regexp: #7ee787; 20 | --color-prettylights-syntax-markup-list: #f2cc60; 21 | --color-prettylights-syntax-markup-heading: #1f6feb; 22 | --color-prettylights-syntax-markup-italic: #c9d1d9; 23 | --color-prettylights-syntax-markup-bold: #c9d1d9; 24 | --color-prettylights-syntax-markup-deleted-text: #ffdcd7; 25 | --color-prettylights-syntax-markup-deleted-bg: #67060c; 26 | --color-prettylights-syntax-markup-inserted-text: #aff5b4; 27 | --color-prettylights-syntax-markup-inserted-bg: #033a16; 28 | --color-prettylights-syntax-markup-changed-text: #ffdfb6; 29 | --color-prettylights-syntax-markup-changed-bg: #5a1e02; 30 | --color-prettylights-syntax-markup-ignored-text: #c9d1d9; 31 | --color-prettylights-syntax-markup-ignored-bg: #1158c7; 32 | --color-prettylights-syntax-meta-diff-range: #d2a8ff; 33 | --color-prettylights-syntax-brackethighlighter-angle: #8b949e; 34 | --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58; 35 | --color-prettylights-syntax-constant-other-reference-link: #a5d6ff; 36 | --color-fg-default: #e6edf3; 37 | --color-fg-muted: #7d8590; 38 | --color-fg-subtle: #6e7681; 39 | --color-canvas-default: #0d1117; 40 | --color-canvas-subtle: #161b22; 41 | --color-border-default: #30363d; 42 | --color-border-muted: #21262d; 43 | --color-neutral-muted: rgba(110,118,129,0.4); 44 | --color-accent-fg: #2f81f7; 45 | --color-accent-emphasis: #1f6feb; 46 | --color-attention-fg: #d29922; 47 | --color-attention-subtle: rgba(187,128,9,0.15); 48 | --color-danger-fg: #f85149; 49 | --color-done-fg: #a371f7; 50 | } 51 | } 52 | 53 | @media (prefers-color-scheme: light) { 54 | .markdown-body, 55 | [data-theme="light"] { 56 | /*light*/ 57 | color-scheme: light; 58 | --color-prettylights-syntax-comment: #6e7781; 59 | --color-prettylights-syntax-constant: #0550ae; 60 | --color-prettylights-syntax-entity: #6639ba; 61 | --color-prettylights-syntax-storage-modifier-import: #24292f; 62 | --color-prettylights-syntax-entity-tag: #116329; 63 | --color-prettylights-syntax-keyword: #cf222e; 64 | --color-prettylights-syntax-string: #0a3069; 65 | --color-prettylights-syntax-variable: #953800; 66 | --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; 67 | --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; 68 | --color-prettylights-syntax-invalid-illegal-bg: #82071e; 69 | --color-prettylights-syntax-carriage-return-text: #f6f8fa; 70 | --color-prettylights-syntax-carriage-return-bg: #cf222e; 71 | --color-prettylights-syntax-string-regexp: #116329; 72 | --color-prettylights-syntax-markup-list: #3b2300; 73 | --color-prettylights-syntax-markup-heading: #0550ae; 74 | --color-prettylights-syntax-markup-italic: #24292f; 75 | --color-prettylights-syntax-markup-bold: #24292f; 76 | --color-prettylights-syntax-markup-deleted-text: #82071e; 77 | --color-prettylights-syntax-markup-deleted-bg: #ffebe9; 78 | --color-prettylights-syntax-markup-inserted-text: #116329; 79 | --color-prettylights-syntax-markup-inserted-bg: #dafbe1; 80 | --color-prettylights-syntax-markup-changed-text: #953800; 81 | --color-prettylights-syntax-markup-changed-bg: #ffd8b5; 82 | --color-prettylights-syntax-markup-ignored-text: #eaeef2; 83 | --color-prettylights-syntax-markup-ignored-bg: #0550ae; 84 | --color-prettylights-syntax-meta-diff-range: #8250df; 85 | --color-prettylights-syntax-brackethighlighter-angle: #57606a; 86 | --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f; 87 | --color-prettylights-syntax-constant-other-reference-link: #0a3069; 88 | --color-fg-default: #1F2328; 89 | --color-fg-muted: #656d76; 90 | --color-fg-subtle: #6e7781; 91 | --color-canvas-default: #ffffff; 92 | --color-canvas-subtle: #f6f8fa; 93 | --color-border-default: #d0d7de; 94 | --color-border-muted: hsla(210,18%,87%,1); 95 | --color-neutral-muted: rgba(175,184,193,0.2); 96 | --color-accent-fg: #0969da; 97 | --color-accent-emphasis: #0969da; 98 | --color-attention-fg: #9a6700; 99 | --color-attention-subtle: #fff8c5; 100 | --color-danger-fg: #d1242f; 101 | --color-done-fg: #8250df; 102 | --color-prettylights-syntax-comment: #6e7781; 103 | --color-prettylights-syntax-constant: #0550ae; 104 | --color-prettylights-syntax-entity: #6639ba; 105 | --color-prettylights-syntax-storage-modifier-import: #24292f; 106 | --color-prettylights-syntax-entity-tag: #116329; 107 | --color-prettylights-syntax-keyword: #cf222e; 108 | --color-prettylights-syntax-string: #0a3069; 109 | --color-prettylights-syntax-variable: #953800; 110 | --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; 111 | --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; 112 | --color-prettylights-syntax-invalid-illegal-bg: #82071e; 113 | --color-prettylights-syntax-carriage-return-text: #f6f8fa; 114 | --color-prettylights-syntax-carriage-return-bg: #cf222e; 115 | --color-prettylights-syntax-string-regexp: #116329; 116 | --color-prettylights-syntax-markup-list: #3b2300; 117 | --color-prettylights-syntax-markup-heading: #0550ae; 118 | --color-prettylights-syntax-markup-italic: #24292f; 119 | --color-prettylights-syntax-markup-bold: #24292f; 120 | --color-prettylights-syntax-markup-deleted-text: #82071e; 121 | --color-prettylights-syntax-markup-deleted-bg: #ffebe9; 122 | --color-prettylights-syntax-markup-inserted-text: #116329; 123 | --color-prettylights-syntax-markup-inserted-bg: #dafbe1; 124 | --color-prettylights-syntax-markup-changed-text: #953800; 125 | --color-prettylights-syntax-markup-changed-bg: #ffd8b5; 126 | --color-prettylights-syntax-markup-ignored-text: #eaeef2; 127 | --color-prettylights-syntax-markup-ignored-bg: #0550ae; 128 | --color-prettylights-syntax-meta-diff-range: #8250df; 129 | --color-prettylights-syntax-brackethighlighter-angle: #57606a; 130 | --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f; 131 | --color-prettylights-syntax-constant-other-reference-link: #0a3069; 132 | --color-fg-default: #1F2328; 133 | --color-fg-muted: #656d76; 134 | --color-fg-subtle: #6e7781; 135 | --color-canvas-default: #ffffff; 136 | --color-canvas-subtle: #f6f8fa; 137 | --color-border-default: #d0d7de; 138 | --color-border-muted: hsla(210,18%,87%,1); 139 | --color-neutral-muted: rgba(175,184,193,0.2); 140 | --color-accent-fg: #0969da; 141 | --color-accent-emphasis: #0969da; 142 | --color-attention-fg: #9a6700; 143 | --color-attention-subtle: #fff8c5; 144 | --color-danger-fg: #d1242f; 145 | --color-done-fg: #8250df; 146 | } 147 | } 148 | 149 | .markdown-body { 150 | -ms-text-size-adjust: 100%; 151 | -webkit-text-size-adjust: 100%; 152 | margin: 0; 153 | color: var(--color-fg-default); 154 | background-color: var(--color-canvas-default); 155 | font-family: sans-serif; 156 | font-size: 16px; 157 | line-height: 1.5; 158 | word-wrap: break-word; 159 | } 160 | 161 | .markdown-body .octicon { 162 | display: inline-block; 163 | fill: currentColor; 164 | vertical-align: text-bottom; 165 | } 166 | 167 | .markdown-body h1:hover .anchor .octicon-link:before, 168 | .markdown-body h2:hover .anchor .octicon-link:before, 169 | .markdown-body h3:hover .anchor .octicon-link:before, 170 | .markdown-body h4:hover .anchor .octicon-link:before, 171 | .markdown-body h5:hover .anchor .octicon-link:before, 172 | .markdown-body h6:hover .anchor .octicon-link:before { 173 | width: 16px; 174 | height: 16px; 175 | content: ' '; 176 | display: inline-block; 177 | background-color: currentColor; 178 | -webkit-mask-image: url("data:image/svg+xml,"); 179 | mask-image: url("data:image/svg+xml,"); 180 | } 181 | 182 | .markdown-body details, 183 | .markdown-body figcaption, 184 | .markdown-body figure { 185 | display: block; 186 | } 187 | 188 | .markdown-body summary { 189 | display: list-item; 190 | } 191 | 192 | .markdown-body [hidden] { 193 | display: none !important; 194 | } 195 | 196 | .markdown-body a { 197 | background-color: transparent; 198 | color: var(--color-accent-fg); 199 | text-decoration: none; 200 | } 201 | 202 | .markdown-body abbr[title] { 203 | border-bottom: none; 204 | -webkit-text-decoration: underline dotted; 205 | text-decoration: underline dotted; 206 | } 207 | 208 | .markdown-body b, 209 | .markdown-body strong { 210 | font-weight: var(--base-text-weight-semibold, 600); 211 | } 212 | 213 | .markdown-body dfn { 214 | font-style: italic; 215 | } 216 | 217 | .markdown-body h1 { 218 | margin: .67em 0; 219 | font-weight: var(--base-text-weight-semibold, 600); 220 | padding-bottom: .3em; 221 | font-size: 2em; 222 | border-bottom: 1px solid var(--color-border-muted); 223 | } 224 | 225 | .markdown-body mark { 226 | background-color: var(--color-attention-subtle); 227 | color: var(--color-fg-default); 228 | } 229 | 230 | .markdown-body small { 231 | font-size: 90%; 232 | } 233 | 234 | .markdown-body sub, 235 | .markdown-body sup { 236 | font-size: 75%; 237 | line-height: 0; 238 | position: relative; 239 | vertical-align: baseline; 240 | } 241 | 242 | .markdown-body sub { 243 | bottom: -0.25em; 244 | } 245 | 246 | .markdown-body sup { 247 | top: -0.5em; 248 | } 249 | 250 | .markdown-body img { 251 | border-style: none; 252 | max-width: 100%; 253 | box-sizing: content-box; 254 | background-color: var(--color-canvas-default); 255 | } 256 | 257 | .markdown-body code, 258 | .markdown-body kbd, 259 | .markdown-body pre, 260 | .markdown-body samp { 261 | font-family: monospace; 262 | font-size: 1em; 263 | } 264 | 265 | .markdown-body figure { 266 | margin: 1em 40px; 267 | } 268 | 269 | .markdown-body hr { 270 | box-sizing: content-box; 271 | overflow: hidden; 272 | background: transparent; 273 | border-bottom: 1px solid var(--color-border-muted); 274 | height: .25em; 275 | padding: 0; 276 | margin: 24px 0; 277 | background-color: var(--color-border-default); 278 | border: 0; 279 | } 280 | 281 | .markdown-body input { 282 | font: inherit; 283 | margin: 0; 284 | overflow: visible; 285 | font-family: inherit; 286 | font-size: inherit; 287 | line-height: inherit; 288 | } 289 | 290 | .markdown-body [type=button], 291 | .markdown-body [type=reset], 292 | .markdown-body [type=submit] { 293 | -webkit-appearance: button; 294 | } 295 | 296 | .markdown-body [type=checkbox], 297 | .markdown-body [type=radio] { 298 | box-sizing: border-box; 299 | padding: 0; 300 | } 301 | 302 | .markdown-body [type=number]::-webkit-inner-spin-button, 303 | .markdown-body [type=number]::-webkit-outer-spin-button { 304 | height: auto; 305 | } 306 | 307 | .markdown-body [type=search]::-webkit-search-cancel-button, 308 | .markdown-body [type=search]::-webkit-search-decoration { 309 | -webkit-appearance: none; 310 | } 311 | 312 | .markdown-body ::-webkit-input-placeholder { 313 | color: inherit; 314 | opacity: .54; 315 | } 316 | 317 | .markdown-body ::-webkit-file-upload-button { 318 | -webkit-appearance: button; 319 | font: inherit; 320 | } 321 | 322 | .markdown-body a:hover { 323 | text-decoration: underline; 324 | } 325 | 326 | .markdown-body ::placeholder { 327 | color: var(--color-fg-subtle); 328 | opacity: 1; 329 | } 330 | 331 | .markdown-body hr::before { 332 | display: table; 333 | content: ""; 334 | } 335 | 336 | .markdown-body hr::after { 337 | display: table; 338 | clear: both; 339 | content: ""; 340 | } 341 | 342 | .markdown-body table { 343 | border-spacing: 0; 344 | border-collapse: collapse; 345 | display: block; 346 | width: max-content; 347 | max-width: 100%; 348 | overflow: auto; 349 | } 350 | 351 | .markdown-body td, 352 | .markdown-body th { 353 | padding: 0; 354 | } 355 | 356 | .markdown-body details summary { 357 | cursor: pointer; 358 | } 359 | 360 | .markdown-body details:not([open])>*:not(summary) { 361 | display: none !important; 362 | } 363 | 364 | .markdown-body a:focus, 365 | .markdown-body [role=button]:focus, 366 | .markdown-body input[type=radio]:focus, 367 | .markdown-body input[type=checkbox]:focus { 368 | outline: 2px solid var(--color-accent-fg); 369 | outline-offset: -2px; 370 | box-shadow: none; 371 | } 372 | 373 | .markdown-body a:focus:not(:focus-visible), 374 | .markdown-body [role=button]:focus:not(:focus-visible), 375 | .markdown-body input[type=radio]:focus:not(:focus-visible), 376 | .markdown-body input[type=checkbox]:focus:not(:focus-visible) { 377 | outline: solid 1px transparent; 378 | } 379 | 380 | .markdown-body a:focus-visible, 381 | .markdown-body [role=button]:focus-visible, 382 | .markdown-body input[type=radio]:focus-visible, 383 | .markdown-body input[type=checkbox]:focus-visible { 384 | outline: 2px solid var(--color-accent-fg); 385 | outline-offset: -2px; 386 | box-shadow: none; 387 | } 388 | 389 | .markdown-body a:not([class]):focus, 390 | .markdown-body a:not([class]):focus-visible, 391 | .markdown-body input[type=radio]:focus, 392 | .markdown-body input[type=radio]:focus-visible, 393 | .markdown-body input[type=checkbox]:focus, 394 | .markdown-body input[type=checkbox]:focus-visible { 395 | outline-offset: 0; 396 | } 397 | 398 | .markdown-body kbd { 399 | display: inline-block; 400 | padding: 3px 5px; 401 | font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 402 | line-height: 10px; 403 | color: var(--color-fg-default); 404 | vertical-align: middle; 405 | background-color: var(--color-canvas-subtle); 406 | border: solid 1px var(--color-neutral-muted); 407 | border-bottom-color: var(--color-neutral-muted); 408 | border-radius: 6px; 409 | box-shadow: inset 0 -1px 0 var(--color-neutral-muted); 410 | } 411 | 412 | .markdown-body h1, 413 | .markdown-body h2, 414 | .markdown-body h3, 415 | .markdown-body h4, 416 | .markdown-body h5, 417 | .markdown-body h6 { 418 | margin-top: 24px; 419 | margin-bottom: 16px; 420 | font-weight: var(--base-text-weight-semibold, 600); 421 | line-height: 1.25; 422 | } 423 | 424 | .markdown-body h2 { 425 | font-weight: var(--base-text-weight-semibold, 600); 426 | padding-bottom: .3em; 427 | font-size: 1.5em; 428 | border-bottom: 1px solid var(--color-border-muted); 429 | } 430 | 431 | .markdown-body h3 { 432 | font-weight: var(--base-text-weight-semibold, 600); 433 | font-size: 1.25em; 434 | } 435 | 436 | .markdown-body h4 { 437 | font-weight: var(--base-text-weight-semibold, 600); 438 | font-size: 1em; 439 | } 440 | 441 | .markdown-body h5 { 442 | font-weight: var(--base-text-weight-semibold, 600); 443 | font-size: .875em; 444 | } 445 | 446 | .markdown-body h6 { 447 | font-weight: var(--base-text-weight-semibold, 600); 448 | font-size: .85em; 449 | color: var(--color-fg-muted); 450 | } 451 | 452 | .markdown-body p { 453 | margin-top: 0; 454 | margin-bottom: 10px; 455 | } 456 | 457 | .markdown-body blockquote { 458 | margin: 0; 459 | padding: 0 1em; 460 | color: var(--color-fg-muted); 461 | border-left: .25em solid var(--color-border-default); 462 | } 463 | 464 | .markdown-body ul, 465 | .markdown-body ol { 466 | margin-top: 0; 467 | margin-bottom: 0; 468 | padding-left: 2em; 469 | } 470 | 471 | .markdown-body ol ol, 472 | .markdown-body ul ol { 473 | list-style-type: lower-roman; 474 | } 475 | 476 | .markdown-body ul ul ol, 477 | .markdown-body ul ol ol, 478 | .markdown-body ol ul ol, 479 | .markdown-body ol ol ol { 480 | list-style-type: lower-alpha; 481 | } 482 | 483 | .markdown-body dd { 484 | margin-left: 0; 485 | } 486 | 487 | .markdown-body tt, 488 | .markdown-body code, 489 | .markdown-body samp { 490 | font-family: monospace,monospace; 491 | font-size: 12px; 492 | } 493 | 494 | .markdown-body pre { 495 | margin-top: 0; 496 | margin-bottom: 0; 497 | font-family: monospace,monospace; 498 | font-size: 12px; 499 | word-wrap: normal; 500 | } 501 | 502 | .markdown-body .octicon { 503 | display: inline-block; 504 | overflow: visible !important; 505 | vertical-align: text-bottom; 506 | fill: currentColor; 507 | } 508 | 509 | .markdown-body input::-webkit-outer-spin-button, 510 | .markdown-body input::-webkit-inner-spin-button { 511 | margin: 0; 512 | -webkit-appearance: none; 513 | appearance: none; 514 | } 515 | 516 | .markdown-body .color-fg-accent { 517 | color: var(--color-accent-fg) !important; 518 | } 519 | 520 | .markdown-body .color-fg-attention { 521 | color: var(--color-attention-fg) !important; 522 | } 523 | 524 | .markdown-body .color-fg-done { 525 | color: var(--color-done-fg) !important; 526 | } 527 | 528 | .markdown-body .flex-items-center { 529 | align-items: center !important; 530 | } 531 | 532 | .markdown-body .mb-1 { 533 | margin-bottom: var(--base-size-4, 4px) !important; 534 | } 535 | 536 | .markdown-body .text-semibold { 537 | font-weight: var(--base-text-weight-medium, 500) !important; 538 | } 539 | 540 | .markdown-body .d-inline-flex { 541 | display: inline-flex !important; 542 | } 543 | 544 | .markdown-body::before { 545 | display: table; 546 | content: ""; 547 | } 548 | 549 | .markdown-body::after { 550 | display: table; 551 | clear: both; 552 | content: ""; 553 | } 554 | 555 | .markdown-body>*:first-child { 556 | margin-top: 0 !important; 557 | } 558 | 559 | .markdown-body>*:last-child { 560 | margin-bottom: 0 !important; 561 | } 562 | 563 | .markdown-body a:not([href]) { 564 | color: inherit; 565 | text-decoration: none; 566 | } 567 | 568 | .markdown-body .absent { 569 | color: var(--color-danger-fg); 570 | } 571 | 572 | .markdown-body .anchor { 573 | float: left; 574 | padding-right: 4px; 575 | margin-left: -20px; 576 | line-height: 1; 577 | } 578 | 579 | .markdown-body .anchor:focus { 580 | outline: none; 581 | } 582 | 583 | .markdown-body p, 584 | .markdown-body blockquote, 585 | .markdown-body ul, 586 | .markdown-body ol, 587 | .markdown-body dl, 588 | .markdown-body table, 589 | .markdown-body pre, 590 | .markdown-body details { 591 | margin-top: 0; 592 | margin-bottom: 16px; 593 | } 594 | 595 | .markdown-body blockquote>:first-child { 596 | margin-top: 0; 597 | } 598 | 599 | .markdown-body blockquote>:last-child { 600 | margin-bottom: 0; 601 | } 602 | 603 | .markdown-body h1 .octicon-link, 604 | .markdown-body h2 .octicon-link, 605 | .markdown-body h3 .octicon-link, 606 | .markdown-body h4 .octicon-link, 607 | .markdown-body h5 .octicon-link, 608 | .markdown-body h6 .octicon-link { 609 | color: var(--color-fg-default); 610 | vertical-align: middle; 611 | visibility: hidden; 612 | } 613 | 614 | .markdown-body h1:hover .anchor, 615 | .markdown-body h2:hover .anchor, 616 | .markdown-body h3:hover .anchor, 617 | .markdown-body h4:hover .anchor, 618 | .markdown-body h5:hover .anchor, 619 | .markdown-body h6:hover .anchor { 620 | text-decoration: none; 621 | } 622 | 623 | .markdown-body h1:hover .anchor .octicon-link, 624 | .markdown-body h2:hover .anchor .octicon-link, 625 | .markdown-body h3:hover .anchor .octicon-link, 626 | .markdown-body h4:hover .anchor .octicon-link, 627 | .markdown-body h5:hover .anchor .octicon-link, 628 | .markdown-body h6:hover .anchor .octicon-link { 629 | visibility: visible; 630 | } 631 | 632 | .markdown-body h1 tt, 633 | .markdown-body h1 code, 634 | .markdown-body h2 tt, 635 | .markdown-body h2 code, 636 | .markdown-body h3 tt, 637 | .markdown-body h3 code, 638 | .markdown-body h4 tt, 639 | .markdown-body h4 code, 640 | .markdown-body h5 tt, 641 | .markdown-body h5 code, 642 | .markdown-body h6 tt, 643 | .markdown-body h6 code { 644 | padding: 0 .2em; 645 | font-size: inherit; 646 | } 647 | 648 | .markdown-body summary h1, 649 | .markdown-body summary h2, 650 | .markdown-body summary h3, 651 | .markdown-body summary h4, 652 | .markdown-body summary h5, 653 | .markdown-body summary h6 { 654 | display: inline-block; 655 | } 656 | 657 | .markdown-body summary h1 .anchor, 658 | .markdown-body summary h2 .anchor, 659 | .markdown-body summary h3 .anchor, 660 | .markdown-body summary h4 .anchor, 661 | .markdown-body summary h5 .anchor, 662 | .markdown-body summary h6 .anchor { 663 | margin-left: -40px; 664 | } 665 | 666 | .markdown-body summary h1, 667 | .markdown-body summary h2 { 668 | padding-bottom: 0; 669 | border-bottom: 0; 670 | } 671 | 672 | .markdown-body ul.no-list, 673 | .markdown-body ol.no-list { 674 | padding: 0; 675 | list-style-type: none; 676 | } 677 | 678 | .markdown-body ol[type="a s"] { 679 | list-style-type: lower-alpha; 680 | } 681 | 682 | .markdown-body ol[type="A s"] { 683 | list-style-type: upper-alpha; 684 | } 685 | 686 | .markdown-body ol[type="i s"] { 687 | list-style-type: lower-roman; 688 | } 689 | 690 | .markdown-body ol[type="I s"] { 691 | list-style-type: upper-roman; 692 | } 693 | 694 | .markdown-body ol[type="1"] { 695 | list-style-type: decimal; 696 | } 697 | 698 | .markdown-body div>ol:not([type]) { 699 | list-style-type: decimal; 700 | } 701 | 702 | .markdown-body ul ul, 703 | .markdown-body ul ol, 704 | .markdown-body ol ol, 705 | .markdown-body ol ul { 706 | margin-top: 0; 707 | margin-bottom: 0; 708 | } 709 | 710 | .markdown-body li>p { 711 | margin-top: 16px; 712 | } 713 | 714 | .markdown-body li+li { 715 | margin-top: .25em; 716 | } 717 | 718 | .markdown-body dl { 719 | padding: 0; 720 | } 721 | 722 | .markdown-body dl dt { 723 | padding: 0; 724 | margin-top: 16px; 725 | font-size: 1em; 726 | font-style: italic; 727 | font-weight: var(--base-text-weight-semibold, 600); 728 | } 729 | 730 | .markdown-body dl dd { 731 | padding: 0 16px; 732 | margin-bottom: 16px; 733 | } 734 | 735 | .markdown-body table th { 736 | font-weight: var(--base-text-weight-semibold, 600); 737 | } 738 | 739 | .markdown-body table th, 740 | .markdown-body table td { 741 | padding: 6px 13px; 742 | border: 1px solid var(--color-border-default); 743 | } 744 | 745 | .markdown-body table td>:last-child { 746 | margin-bottom: 0; 747 | } 748 | 749 | .markdown-body table tr { 750 | background-color: var(--color-canvas-default); 751 | border-top: 1px solid var(--color-border-muted); 752 | } 753 | 754 | .markdown-body table tr:nth-child(2n) { 755 | background-color: var(--color-canvas-subtle); 756 | } 757 | 758 | .markdown-body table img { 759 | background-color: transparent; 760 | } 761 | 762 | .markdown-body img[align=right] { 763 | padding-left: 20px; 764 | } 765 | 766 | .markdown-body img[align=left] { 767 | padding-right: 20px; 768 | } 769 | 770 | .markdown-body .emoji { 771 | max-width: none; 772 | vertical-align: text-top; 773 | background-color: transparent; 774 | } 775 | 776 | .markdown-body span.frame { 777 | display: block; 778 | overflow: hidden; 779 | } 780 | 781 | .markdown-body span.frame>span { 782 | display: block; 783 | float: left; 784 | width: auto; 785 | padding: 7px; 786 | margin: 13px 0 0; 787 | overflow: hidden; 788 | border: 1px solid var(--color-border-default); 789 | } 790 | 791 | .markdown-body span.frame span img { 792 | display: block; 793 | float: left; 794 | } 795 | 796 | .markdown-body span.frame span span { 797 | display: block; 798 | padding: 5px 0 0; 799 | clear: both; 800 | color: var(--color-fg-default); 801 | } 802 | 803 | .markdown-body span.align-center { 804 | display: block; 805 | overflow: hidden; 806 | clear: both; 807 | } 808 | 809 | .markdown-body span.align-center>span { 810 | display: block; 811 | margin: 13px auto 0; 812 | overflow: hidden; 813 | text-align: center; 814 | } 815 | 816 | .markdown-body span.align-center span img { 817 | margin: 0 auto; 818 | text-align: center; 819 | } 820 | 821 | .markdown-body span.align-right { 822 | display: block; 823 | overflow: hidden; 824 | clear: both; 825 | } 826 | 827 | .markdown-body span.align-right>span { 828 | display: block; 829 | margin: 13px 0 0; 830 | overflow: hidden; 831 | text-align: right; 832 | } 833 | 834 | .markdown-body span.align-right span img { 835 | margin: 0; 836 | text-align: right; 837 | } 838 | 839 | .markdown-body span.float-left { 840 | display: block; 841 | float: left; 842 | margin-right: 13px; 843 | overflow: hidden; 844 | } 845 | 846 | .markdown-body span.float-left span { 847 | margin: 13px 0 0; 848 | } 849 | 850 | .markdown-body span.float-right { 851 | display: block; 852 | float: right; 853 | margin-left: 13px; 854 | overflow: hidden; 855 | } 856 | 857 | .markdown-body span.float-right>span { 858 | display: block; 859 | margin: 13px auto 0; 860 | overflow: hidden; 861 | text-align: right; 862 | } 863 | 864 | .markdown-body code, 865 | .markdown-body tt { 866 | padding: .2em .4em; 867 | margin: 0; 868 | font-size: 85%; 869 | white-space: break-spaces; 870 | background-color: var(--color-neutral-muted); 871 | border-radius: 6px; 872 | } 873 | 874 | .markdown-body code br, 875 | .markdown-body tt br { 876 | display: none; 877 | } 878 | 879 | .markdown-body del code { 880 | text-decoration: inherit; 881 | } 882 | 883 | .markdown-body samp { 884 | font-size: 85%; 885 | } 886 | 887 | .markdown-body pre code { 888 | font-size: 100%; 889 | } 890 | 891 | .markdown-body pre>code { 892 | padding: 0; 893 | margin: 0; 894 | word-break: normal; 895 | white-space: pre; 896 | background: transparent; 897 | border: 0; 898 | } 899 | 900 | .markdown-body .highlight { 901 | margin-bottom: 16px; 902 | } 903 | 904 | .markdown-body .highlight pre { 905 | margin-bottom: 0; 906 | word-break: normal; 907 | } 908 | 909 | .markdown-body .highlight pre, 910 | .markdown-body pre { 911 | padding: 16px; 912 | overflow: auto; 913 | font-size: 85%; 914 | line-height: 1.45; 915 | color: var(--color-fg-default); 916 | background-color: var(--color-canvas-subtle); 917 | border-radius: 6px; 918 | } 919 | 920 | .markdown-body pre code, 921 | .markdown-body pre tt { 922 | display: inline; 923 | max-width: auto; 924 | padding: 0; 925 | margin: 0; 926 | overflow: visible; 927 | line-height: inherit; 928 | word-wrap: normal; 929 | background-color: transparent; 930 | border: 0; 931 | } 932 | 933 | .markdown-body .csv-data td, 934 | .markdown-body .csv-data th { 935 | padding: 5px; 936 | overflow: hidden; 937 | font-size: 12px; 938 | line-height: 1; 939 | text-align: left; 940 | white-space: nowrap; 941 | } 942 | 943 | .markdown-body .csv-data .blob-num { 944 | padding: 10px 8px 9px; 945 | text-align: right; 946 | background: var(--color-canvas-default); 947 | border: 0; 948 | } 949 | 950 | .markdown-body .csv-data tr { 951 | border-top: 0; 952 | } 953 | 954 | .markdown-body .csv-data th { 955 | font-weight: var(--base-text-weight-semibold, 600); 956 | background: var(--color-canvas-subtle); 957 | border-top: 0; 958 | } 959 | 960 | .markdown-body [data-footnote-ref]::before { 961 | content: "["; 962 | } 963 | 964 | .markdown-body [data-footnote-ref]::after { 965 | content: "]"; 966 | } 967 | 968 | .markdown-body .footnotes { 969 | font-size: 12px; 970 | color: var(--color-fg-muted); 971 | border-top: 1px solid var(--color-border-default); 972 | } 973 | 974 | .markdown-body .footnotes ol { 975 | padding-left: 16px; 976 | } 977 | 978 | .markdown-body .footnotes ol ul { 979 | display: inline-block; 980 | padding-left: 16px; 981 | margin-top: 16px; 982 | } 983 | 984 | .markdown-body .footnotes li { 985 | position: relative; 986 | } 987 | 988 | .markdown-body .footnotes li:target::before { 989 | position: absolute; 990 | top: -8px; 991 | right: -8px; 992 | bottom: -8px; 993 | left: -24px; 994 | pointer-events: none; 995 | content: ""; 996 | border: 2px solid var(--color-accent-emphasis); 997 | border-radius: 6px; 998 | } 999 | 1000 | .markdown-body .footnotes li:target { 1001 | color: var(--color-fg-default); 1002 | } 1003 | 1004 | .markdown-body .footnotes .data-footnote-backref g-emoji { 1005 | font-family: monospace; 1006 | } 1007 | 1008 | .markdown-body .pl-c { 1009 | color: var(--color-prettylights-syntax-comment); 1010 | } 1011 | 1012 | .markdown-body .pl-c1, 1013 | .markdown-body .pl-s .pl-v { 1014 | color: var(--color-prettylights-syntax-constant); 1015 | } 1016 | 1017 | .markdown-body .pl-e, 1018 | .markdown-body .pl-en { 1019 | color: var(--color-prettylights-syntax-entity); 1020 | } 1021 | 1022 | .markdown-body .pl-smi, 1023 | .markdown-body .pl-s .pl-s1 { 1024 | color: var(--color-prettylights-syntax-storage-modifier-import); 1025 | } 1026 | 1027 | .markdown-body .pl-ent { 1028 | color: var(--color-prettylights-syntax-entity-tag); 1029 | } 1030 | 1031 | .markdown-body .pl-k { 1032 | color: var(--color-prettylights-syntax-keyword); 1033 | } 1034 | 1035 | .markdown-body .pl-s, 1036 | .markdown-body .pl-pds, 1037 | .markdown-body .pl-s .pl-pse .pl-s1, 1038 | .markdown-body .pl-sr, 1039 | .markdown-body .pl-sr .pl-cce, 1040 | .markdown-body .pl-sr .pl-sre, 1041 | .markdown-body .pl-sr .pl-sra { 1042 | color: var(--color-prettylights-syntax-string); 1043 | } 1044 | 1045 | .markdown-body .pl-v, 1046 | .markdown-body .pl-smw { 1047 | color: var(--color-prettylights-syntax-variable); 1048 | } 1049 | 1050 | .markdown-body .pl-bu { 1051 | color: var(--color-prettylights-syntax-brackethighlighter-unmatched); 1052 | } 1053 | 1054 | .markdown-body .pl-ii { 1055 | color: var(--color-prettylights-syntax-invalid-illegal-text); 1056 | background-color: var(--color-prettylights-syntax-invalid-illegal-bg); 1057 | } 1058 | 1059 | .markdown-body .pl-c2 { 1060 | color: var(--color-prettylights-syntax-carriage-return-text); 1061 | background-color: var(--color-prettylights-syntax-carriage-return-bg); 1062 | } 1063 | 1064 | .markdown-body .pl-sr .pl-cce { 1065 | font-weight: bold; 1066 | color: var(--color-prettylights-syntax-string-regexp); 1067 | } 1068 | 1069 | .markdown-body .pl-ml { 1070 | color: var(--color-prettylights-syntax-markup-list); 1071 | } 1072 | 1073 | .markdown-body .pl-mh, 1074 | .markdown-body .pl-mh .pl-en, 1075 | .markdown-body .pl-ms { 1076 | font-weight: bold; 1077 | color: var(--color-prettylights-syntax-markup-heading); 1078 | } 1079 | 1080 | .markdown-body .pl-mi { 1081 | font-style: italic; 1082 | color: var(--color-prettylights-syntax-markup-italic); 1083 | } 1084 | 1085 | .markdown-body .pl-mb { 1086 | font-weight: bold; 1087 | color: var(--color-prettylights-syntax-markup-bold); 1088 | } 1089 | 1090 | .markdown-body .pl-md { 1091 | color: var(--color-prettylights-syntax-markup-deleted-text); 1092 | background-color: var(--color-prettylights-syntax-markup-deleted-bg); 1093 | } 1094 | 1095 | .markdown-body .pl-mi1 { 1096 | color: var(--color-prettylights-syntax-markup-inserted-text); 1097 | background-color: var(--color-prettylights-syntax-markup-inserted-bg); 1098 | } 1099 | 1100 | .markdown-body .pl-mc { 1101 | color: var(--color-prettylights-syntax-markup-changed-text); 1102 | background-color: var(--color-prettylights-syntax-markup-changed-bg); 1103 | } 1104 | 1105 | .markdown-body .pl-mi2 { 1106 | color: var(--color-prettylights-syntax-markup-ignored-text); 1107 | background-color: var(--color-prettylights-syntax-markup-ignored-bg); 1108 | } 1109 | 1110 | .markdown-body .pl-mdr { 1111 | font-weight: bold; 1112 | color: var(--color-prettylights-syntax-meta-diff-range); 1113 | } 1114 | 1115 | .markdown-body .pl-ba { 1116 | color: var(--color-prettylights-syntax-brackethighlighter-angle); 1117 | } 1118 | 1119 | .markdown-body .pl-sg { 1120 | color: var(--color-prettylights-syntax-sublimelinter-gutter-mark); 1121 | } 1122 | 1123 | .markdown-body .pl-corl { 1124 | text-decoration: underline; 1125 | color: var(--color-prettylights-syntax-constant-other-reference-link); 1126 | } 1127 | 1128 | .markdown-body g-emoji { 1129 | display: inline-block; 1130 | min-width: 1ch; 1131 | font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; 1132 | font-size: 1em; 1133 | font-style: normal !important; 1134 | font-weight: var(--base-text-weight-normal, 400); 1135 | line-height: 1; 1136 | vertical-align: -0.075em; 1137 | } 1138 | 1139 | .markdown-body g-emoji img { 1140 | width: 1em; 1141 | height: 1em; 1142 | } 1143 | 1144 | .markdown-body .task-list-item { 1145 | list-style-type: none; 1146 | } 1147 | 1148 | .markdown-body .task-list-item label { 1149 | font-weight: var(--base-text-weight-normal, 400); 1150 | } 1151 | 1152 | .markdown-body .task-list-item.enabled label { 1153 | cursor: pointer; 1154 | } 1155 | 1156 | .markdown-body .task-list-item+.task-list-item { 1157 | margin-top: 4px; 1158 | } 1159 | 1160 | .markdown-body .task-list-item .handle { 1161 | display: none; 1162 | } 1163 | 1164 | .markdown-body .task-list-item-checkbox { 1165 | margin: 0 .2em .25em -1.4em; 1166 | vertical-align: middle; 1167 | } 1168 | 1169 | .markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { 1170 | margin: 0 -1.6em .25em .2em; 1171 | } 1172 | 1173 | .markdown-body .contains-task-list { 1174 | position: relative; 1175 | } 1176 | 1177 | .markdown-body .contains-task-list:hover .task-list-item-convert-container, 1178 | .markdown-body .contains-task-list:focus-within .task-list-item-convert-container { 1179 | display: block; 1180 | width: auto; 1181 | height: 24px; 1182 | overflow: visible; 1183 | clip: auto; 1184 | } 1185 | 1186 | .markdown-body .QueryBuilder .qb-entity { 1187 | color: var(--color-prettylights-syntax-entity); 1188 | } 1189 | 1190 | .markdown-body .QueryBuilder .qb-constant { 1191 | color: var(--color-prettylights-syntax-constant); 1192 | } 1193 | 1194 | .markdown-body ::-webkit-calendar-picker-indicator { 1195 | filter: invert(50%); 1196 | } 1197 | 1198 | .markdown-body .markdown-alert { 1199 | padding: 0 1em; 1200 | margin-bottom: 16px; 1201 | color: inherit; 1202 | border-left: .25em solid var(--color-border-default); 1203 | } 1204 | 1205 | .markdown-body .markdown-alert>:first-child { 1206 | margin-top: 0; 1207 | } 1208 | 1209 | .markdown-body .markdown-alert>:last-child { 1210 | margin-bottom: 0; 1211 | } 1212 | 1213 | .markdown-body .markdown-alert.markdown-alert-note { 1214 | border-left-color: var(--color-accent-fg); 1215 | } 1216 | 1217 | .markdown-body .markdown-alert.markdown-alert-important { 1218 | border-left-color: var(--color-done-fg); 1219 | } 1220 | 1221 | .markdown-body .markdown-alert.markdown-alert-warning { 1222 | border-left-color: var(--color-attention-fg); 1223 | } 1224 | 1225 | .markdown-body { 1226 | box-sizing: border-box; 1227 | min-width: 200px; 1228 | max-width: 980px; 1229 | margin: 0 auto; 1230 | padding: 45px 1231 | } 1232 | 1233 | @media (max-width: 767px) { 1234 | .markdown-body { 1235 | padding: 15px 1236 | } 1237 | } -------------------------------------------------------------------------------- /resources/highlight.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Highlight.js v11.9.0 (git: f47103d4f1) 3 | (c) 2006-2023 undefined and other contributors 4 | License: BSD-3-Clause 5 | */ 6 | var hljs=function(){"use strict";function e(t){ 7 | return t instanceof Map?t.clear=t.delete=t.set=()=>{ 8 | throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{ 9 | throw Error("set is read-only") 10 | }),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{ 11 | const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i) 12 | })),t}class t{constructor(e){ 13 | void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} 14 | ignoreMatch(){this.isMatchIgnored=!0}}function n(e){ 15 | return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") 16 | }function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t] 17 | ;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope 18 | ;class o{constructor(e,t){ 19 | this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){ 20 | this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{ 21 | if(e.startsWith("language:"))return e.replace("language:","language-") 22 | ;if(e.includes(".")){const n=e.split(".") 23 | ;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ") 24 | }return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)} 25 | closeNode(e){s(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ 26 | this.buffer+=``}}const r=(e={})=>{const t={children:[]} 27 | ;return Object.assign(t,e),t};class a{constructor(){ 28 | this.rootNode=r(),this.stack=[this.rootNode]}get top(){ 29 | return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ 30 | this.top.children.push(e)}openNode(e){const t=r({scope:e}) 31 | ;this.add(t),this.stack.push(t)}closeNode(){ 32 | if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ 33 | for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} 34 | walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){ 35 | return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t), 36 | t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){ 37 | "string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ 38 | a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e} 39 | addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ 40 | this.closeNode()}__addSublanguage(e,t){const n=e.root 41 | ;t&&(n.scope="language:"+t),this.add(n)}toHTML(){ 42 | return new o(this,this.options).value()}finalize(){ 43 | return this.closeAllNodes(),!0}}function l(e){ 44 | return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")} 45 | function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")} 46 | function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{ 47 | const t=e[e.length-1] 48 | ;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{} 49 | })(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"} 50 | function p(e){return RegExp(e.toString()+"|").exec("").length-1} 51 | const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ 52 | ;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n 53 | ;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break} 54 | s+=i.substring(0,e.index), 55 | i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0], 56 | "("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)} 57 | const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",y="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",O={ 58 | begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'", 59 | illegal:"\\n",contains:[O]},k={scope:"string",begin:'"',end:'"',illegal:"\\n", 60 | contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t, 61 | contains:[]},n);s.contains.push({scope:"doctag", 62 | begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", 63 | end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) 64 | ;const o=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) 65 | ;return s.contains.push({begin:h(/[ ]+/,"(",o,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s 66 | },S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var j=Object.freeze({ 67 | __proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{ 68 | scope:"number",begin:_,relevance:0},BINARY_NUMBER_RE:_,COMMENT:N, 69 | C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number", 70 | begin:y,relevance:0},C_NUMBER_RE:y,END_SAME_AS_BEGIN:e=>Object.assign(e,{ 71 | "on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{ 72 | t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E, 73 | MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0}, 74 | NUMBER_MODE:{scope:"number",begin:w,relevance:0},NUMBER_RE:w, 75 | PHRASAL_WORDS_MODE:{ 76 | 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/ 77 | },QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, 78 | end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]}, 79 | RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", 80 | SHEBANG:(e={})=>{const t=/^#![ ]*\// 81 | ;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t, 82 | end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)}, 83 | TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x, 84 | UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function A(e,t){ 85 | "."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){ 86 | void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){ 87 | t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", 88 | e.__beforeBegin=A,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, 89 | void 0===e.relevance&&(e.relevance=0))}function L(e,t){ 90 | Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){ 91 | if(e.match){ 92 | if(e.begin||e.end)throw Error("begin & end are not supported with match") 93 | ;e.begin=e.match,delete e.match}}function P(e,t){ 94 | void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return 95 | ;if(e.starts)throw Error("beforeMatch cannot be used with starts") 96 | ;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t] 97 | })),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={ 98 | relevance:0,contains:[Object.assign(n,{endsParent:!0})] 99 | },e.relevance=0,delete n.beforeMatch 100 | },H=["of","and","for","in","not","or","if","then","parent","list","value"],C="keyword" 101 | ;function $(e,t,n=C){const i=Object.create(null) 102 | ;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{ 103 | Object.assign(i,$(e[n],t,n))})),i;function s(e,n){ 104 | t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|") 105 | ;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){ 106 | return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const z={},W=e=>{ 107 | console.error(e)},X=(e,...t)=>{console.log("WARN: "+e,...t)},G=(e,t)=>{ 108 | z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0) 109 | },K=Error();function F(e,t,{key:n}){let i=0;const s=e[n],o={},r={} 110 | ;for(let e=1;e<=t.length;e++)r[e+i]=s[e],o[e+i]=!0,i+=p(t[e-1]) 111 | ;e[n]=r,e[n]._emit=o,e[n]._multi=!0}function Z(e){(e=>{ 112 | e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, 113 | delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ 114 | _wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope 115 | }),(e=>{if(Array.isArray(e.begin)){ 116 | if(e.skip||e.excludeBegin||e.returnBegin)throw W("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), 117 | K 118 | ;if("object"!=typeof e.beginScope||null===e.beginScope)throw W("beginScope must be object"), 119 | K;F(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{ 120 | if(Array.isArray(e.end)){ 121 | if(e.skip||e.excludeEnd||e.returnEnd)throw W("skip, excludeEnd, returnEnd not compatible with endScope: {}"), 122 | K 123 | ;if("object"!=typeof e.endScope||null===e.endScope)throw W("endScope must be object"), 124 | K;F(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function V(e){ 125 | function t(t,n){ 126 | return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":"")) 127 | }class n{constructor(){ 128 | this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} 129 | addRule(e,t){ 130 | t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]), 131 | this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) 132 | ;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|" 133 | }),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex 134 | ;const t=this.matcherRe.exec(e);if(!t)return null 135 | ;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n] 136 | ;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){ 137 | this.rules=[],this.multiRegexes=[], 138 | this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ 139 | if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n 140 | ;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))), 141 | t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){ 142 | return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){ 143 | this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){ 144 | const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex 145 | ;let n=t.exec(e) 146 | ;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{ 147 | const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)} 148 | return n&&(this.regexIndex+=n.position+1, 149 | this.regexIndex===this.count&&this.considerAll()),n}} 150 | if(e.compilerExtensions||(e.compilerExtensions=[]), 151 | e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") 152 | ;return e.classNameAliases=i(e.classNameAliases||{}),function n(o,r){const a=o 153 | ;if(o.isCompiled)return a 154 | ;[I,B,Z,D].forEach((e=>e(o,r))),e.compilerExtensions.forEach((e=>e(o,r))), 155 | o.__beforeBegin=null,[T,L,P].forEach((e=>e(o,r))),o.isCompiled=!0;let c=null 156 | ;return"object"==typeof o.keywords&&o.keywords.$pattern&&(o.keywords=Object.assign({},o.keywords), 157 | c=o.keywords.$pattern, 158 | delete o.keywords.$pattern),c=c||/\w+/,o.keywords&&(o.keywords=$(o.keywords,e.case_insensitive)), 159 | a.keywordPatternRe=t(c,!0), 160 | r&&(o.begin||(o.begin=/\B|\b/),a.beginRe=t(a.begin),o.end||o.endsWithParent||(o.end=/\B|\b/), 161 | o.end&&(a.endRe=t(a.end)), 162 | a.terminatorEnd=l(a.end)||"",o.endsWithParent&&r.terminatorEnd&&(a.terminatorEnd+=(o.end?"|":"")+r.terminatorEnd)), 163 | o.illegal&&(a.illegalRe=t(o.illegal)), 164 | o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{ 165 | variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?i(e,{ 166 | starts:e.starts?i(e.starts):null 167 | }):Object.isFrozen(e)?i(e):e))("self"===e?o:e)))),o.contains.forEach((e=>{n(e,a) 168 | })),o.starts&&n(o.starts,r),a.matcher=(e=>{const t=new s 169 | ;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin" 170 | }))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end" 171 | }),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){ 172 | return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{ 173 | constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}} 174 | const Y=n,Q=i,ee=Symbol("nomatch"),te=n=>{ 175 | const i=Object.create(null),s=Object.create(null),o=[];let r=!0 176 | ;const a="Could not find the language '{}', did you forget to load/include a language module?",l={ 177 | disableAutodetect:!0,name:"Plain text",contains:[]};let p={ 178 | ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, 179 | languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", 180 | cssSelector:"pre code",languages:null,__emitter:c};function b(e){ 181 | return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s="" 182 | ;"object"==typeof t?(i=e, 183 | n=t.ignoreIllegals,s=t.language):(G("10.7.0","highlight(lang, code, ...args) has been deprecated."), 184 | G("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), 185 | s=e,i=t),void 0===n&&(n=!0);const o={code:i,language:s};N("before:highlight",o) 186 | ;const r=o.result?o.result:E(o.language,o.code,n) 187 | ;return r.code=o.code,N("after:highlight",r),r}function E(e,n,s,o){ 188 | const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R) 189 | ;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n="" 190 | ;for(;t;){n+=R.substring(e,t.index) 191 | ;const s=_.case_insensitive?t[0].toLowerCase():t[0],o=(i=s,N.keywords[i]);if(o){ 192 | const[e,i]=o 193 | ;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(j+=i),e.startsWith("_"))n+=t[0];else{ 194 | const n=_.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0] 195 | ;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i 196 | ;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{ 197 | if(""===R)return;let e=null;if("string"==typeof N.subLanguage){ 198 | if(!i[N.subLanguage])return void M.addText(R) 199 | ;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top 200 | }else e=x(R,N.subLanguage.length?N.subLanguage:null) 201 | ;N.relevance>0&&(j+=e.relevance),M.__addSublanguage(e._emitter,e.language) 202 | })():l(),R=""}function u(e,t){ 203 | ""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1 204 | ;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue} 205 | const i=_.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}} 206 | function h(e,t){ 207 | return e.scope&&"string"==typeof e.scope&&M.openNode(_.classNameAliases[e.scope]||e.scope), 208 | e.beginScope&&(e.beginScope._wrap?(u(R,_.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), 209 | R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{ 210 | value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t) 211 | ;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e) 212 | ;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){ 213 | for(;e.endsParent&&e.parent;)e=e.parent;return e}} 214 | if(e.endsWithParent)return f(e.parent,n,i)}function b(e){ 215 | return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){ 216 | const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return ee;const o=N 217 | ;N.endScope&&N.endScope._wrap?(g(), 218 | u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(), 219 | d(N.endScope,e)):o.skip?R+=t:(o.returnEnd||o.excludeEnd||(R+=t), 220 | g(),o.excludeEnd&&(R=t));do{ 221 | N.scope&&M.closeNode(),N.skip||N.subLanguage||(j+=N.relevance),N=N.parent 222 | }while(N!==s.parent);return s.starts&&h(s.starts,e),o.returnEnd?0:t.length} 223 | let w={};function y(i,o){const a=o&&o[0];if(R+=i,null==a)return g(),0 224 | ;if("begin"===w.type&&"end"===o.type&&w.index===o.index&&""===a){ 225 | if(R+=n.slice(o.index,o.index+1),!r){const t=Error(`0 width match regex (${e})`) 226 | ;throw t.languageName=e,t.badRule=w.rule,t}return 1} 227 | if(w=o,"begin"===o.type)return(e=>{ 228 | const n=e[0],i=e.rule,s=new t(i),o=[i.__beforeBegin,i["on:begin"]] 229 | ;for(const t of o)if(t&&(t(e,s),s.isMatchIgnored))return b(n) 230 | ;return i.skip?R+=n:(i.excludeBegin&&(R+=n), 231 | g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(o) 232 | ;if("illegal"===o.type&&!s){ 233 | const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"")+'"') 234 | ;throw e.mode=N,e}if("end"===o.type){const e=m(o);if(e!==ee)return e} 235 | if("illegal"===o.type&&""===a)return 1 236 | ;if(I>1e5&&I>3*o.index)throw Error("potential infinite loop, way more iterations than matches") 237 | ;return R+=a,a.length}const _=O(e) 238 | ;if(!_)throw W(a.replace("{}",e)),Error('Unknown language: "'+e+'"') 239 | ;const v=V(_);let k="",N=o||v;const S={},M=new p.__emitter(p);(()=>{const e=[] 240 | ;for(let t=N;t!==_;t=t.parent)t.scope&&e.unshift(t.scope) 241 | ;e.forEach((e=>M.openNode(e)))})();let R="",j=0,A=0,I=0,T=!1;try{ 242 | if(_.__emitTokens)_.__emitTokens(n,M);else{for(N.matcher.considerAll();;){ 243 | I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=A 244 | ;const e=N.matcher.exec(n);if(!e)break;const t=y(n.substring(A,e.index),e) 245 | ;A=e.index+t}y(n.substring(A))}return M.finalize(),k=M.toHTML(),{language:e, 246 | value:k,relevance:j,illegal:!1,_emitter:M,_top:N}}catch(t){ 247 | if(t.message&&t.message.includes("Illegal"))return{language:e,value:Y(n), 248 | illegal:!0,relevance:0,_illegalBy:{message:t.message,index:A, 249 | context:n.slice(A-100,A+100),mode:t.mode,resultSoFar:k},_emitter:M};if(r)return{ 250 | language:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N} 251 | ;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{ 252 | const t={value:Y(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)} 253 | ;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(k).map((t=>E(t,e,!1))) 254 | ;s.unshift(n);const o=s.sort(((e,t)=>{ 255 | if(e.relevance!==t.relevance)return t.relevance-e.relevance 256 | ;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1 257 | ;if(O(t.language).supersetOf===e.language)return-1}return 0})),[r,a]=o,c=r 258 | ;return c.secondBest=a,c}function w(e){let t=null;const n=(e=>{ 259 | let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"" 260 | ;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1]) 261 | ;return t||(X(a.replace("{}",n[1])), 262 | X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"} 263 | return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return 264 | ;if(N("before:highlightElement",{el:e,language:n 265 | }),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) 266 | ;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), 267 | console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), 268 | console.warn("The element with unescaped HTML:"), 269 | console.warn(e)),p.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML) 270 | ;t=e;const i=t.textContent,o=n?m(i,{language:n,ignoreIllegals:!0}):x(i) 271 | ;e.innerHTML=o.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n 272 | ;e.classList.add("hljs"),e.classList.add("language-"+i) 273 | })(e,n,o.language),e.result={language:o.language,re:o.relevance, 274 | relevance:o.relevance},o.secondBest&&(e.secondBest={ 275 | language:o.secondBest.language,relevance:o.secondBest.relevance 276 | }),N("after:highlightElement",{el:e,result:o,text:i})}let y=!1;function _(){ 277 | "loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(w):y=!0 278 | }function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]} 279 | function v(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ 280 | s[e.toLowerCase()]=t}))}function k(e){const t=O(e) 281 | ;return t&&!t.disableAutodetect}function N(e,t){const n=e;o.forEach((e=>{ 282 | e[n]&&e[n](t)}))} 283 | "undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{ 284 | y&&_()}),!1),Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:_, 285 | highlightElement:w, 286 | highlightBlock:e=>(G("10.7.0","highlightBlock will be removed entirely in v12.0"), 287 | G("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{p=Q(p,e)}, 288 | initHighlighting:()=>{ 289 | _(),G("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, 290 | initHighlightingOnLoad:()=>{ 291 | _(),G("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") 292 | },registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){ 293 | if(W("Language definition for '{}' could not be registered.".replace("{}",e)), 294 | !r)throw t;W(t),s=l} 295 | s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&v(s.aliases,{ 296 | languageName:e})},unregisterLanguage:e=>{delete i[e] 297 | ;for(const t of Object.keys(s))s[t]===e&&delete s[t]}, 298 | listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:v, 299 | autoDetection:k,inherit:Q,addPlugin:e=>{(e=>{ 300 | e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{ 301 | e["before:highlightBlock"](Object.assign({block:t.el},t)) 302 | }),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{ 303 | e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),o.push(e)}, 304 | removePlugin:e=>{const t=o.indexOf(e);-1!==t&&o.splice(t,1)}}),n.debugMode=()=>{ 305 | r=!1},n.safeMode=()=>{r=!0},n.versionString="11.9.0",n.regex={concat:h, 306 | lookahead:g,either:f,optional:d,anyNumberOfTimes:u} 307 | ;for(const t in j)"object"==typeof j[t]&&e(j[t]);return Object.assign(n,j),n 308 | },ne=te({});return ne.newInstance=()=>te({}),ne}() 309 | ;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `apache` grammar compiled for Highlight.js 11.9.0 */ 310 | (()=>{var e=(()=>{"use strict";return e=>{const n={className:"number", 311 | begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/};return{ 312 | name:"Apache config",aliases:["apacheconf"],case_insensitive:!0, 313 | contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/, 314 | contains:[n,{className:"number",begin:/:\d{1,5}/ 315 | },e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute", 316 | begin:/\w+/,relevance:0,keywords:{ 317 | _:["order","deny","allow","setenv","rewriterule","rewriteengine","rewritecond","documentroot","sethandler","errordocument","loadmodule","options","header","listen","serverroot","servername"] 318 | },starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"}, 319 | contains:[{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable", 320 | begin:/[\$%]\{/,end:/\}/,contains:["self",{className:"number",begin:/[$%]\d+/}] 321 | },n,{className:"number",begin:/\b\d+/},e.QUOTE_STRING_MODE]}}],illegal:/\S/}} 322 | })();hljs.registerLanguage("apache",e)})();/*! `bash` grammar compiled for Highlight.js 11.9.0 */ 323 | (()=>{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/, 324 | end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{ 325 | className:"variable",variants:[{ 326 | begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={ 327 | className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},i={ 328 | begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, 329 | end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/, 330 | contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(c);const o={begin:/\$?\(\(/, 331 | end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] 332 | },r=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 333 | }),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, 334 | contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ 335 | name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, 336 | keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"], 337 | literal:["true","false"], 338 | 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","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] 339 | },contains:[r,e.SHEBANG(),l,o,e.HASH_COMMENT_MODE,i,{match:/(\/[a-z._-]+)+/},c,{ 340 | match:/\\"/},{className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}})() 341 | ;hljs.registerLanguage("bash",e)})();/*! `c` grammar compiled for Highlight.js 11.9.0 */ 342 | (()=>{var e=(()=>{"use strict";return e=>{const n=e.regex,t=e.COMMENT("//","$",{ 343 | contains:[{begin:/\\\n/}] 344 | }),s="decltype\\(auto\\)",a="[a-zA-Z_]\\w*::",r="("+s+"|"+n.optional(a)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",i={ 345 | className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{ 346 | match:/\batomic_[a-z]{3,6}\b/}]},l={className:"string",variants:[{ 347 | begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ 348 | begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", 349 | end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ 350 | begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={ 351 | className:"number",variants:[{begin:"\\b(0b[01']+)"},{ 352 | begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" 353 | },{ 354 | begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" 355 | }],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ 356 | keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" 357 | },contains:[{begin:/\\\n/,relevance:0},e.inherit(l,{className:"string"}),{ 358 | className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ 359 | className:"title",begin:n.optional(a)+e.IDENT_RE,relevance:0 360 | },g=n.optional(a)+e.IDENT_RE+"\\s*\\(",u={ 361 | keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], 362 | type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"], 363 | literal:"true false NULL", 364 | built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair 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" 365 | },m=[c,i,t,e.C_BLOCK_COMMENT_MODE,o,l],_={variants:[{begin:/=/,end:/;/},{ 366 | begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], 367 | keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u, 368 | contains:m.concat(["self"]),relevance:0}]),relevance:0},p={ 369 | begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, 370 | keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:s,keywords:u,relevance:0},{ 371 | begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})], 372 | relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/, 373 | keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,l,o,i,{begin:/\(/, 374 | end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,l,o,i] 375 | }]},i,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u, 376 | disableAutodetect:!0,illegal:"=]/,contains:[{ 379 | beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c, 380 | strings:l,keywords:u}}}})();hljs.registerLanguage("c",e)})();/*! `cpp` grammar compiled for Highlight.js 11.9.0 */ 381 | (()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,a=e.COMMENT("//","$",{ 382 | contains:[{begin:/\\\n/}] 383 | }),n="decltype\\(auto\\)",r="[a-zA-Z_]\\w*::",i="(?!struct)("+n+"|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",s={ 384 | className:"type",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{ 385 | begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ 386 | begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", 387 | end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ 388 | begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={ 389 | className:"number",variants:[{begin:"\\b(0b[01']+)"},{ 390 | begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" 391 | },{ 392 | begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" 393 | }],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ 394 | keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" 395 | },contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"string"}),{ 396 | className:"string",begin:/<.*?>/},a,e.C_BLOCK_COMMENT_MODE]},d={ 397 | className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0 398 | },u=t.optional(r)+e.IDENT_RE+"\\s*\\(",p={ 399 | type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], 400 | keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], 401 | literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], 402 | _type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] 403 | },_={className:"function.dispatch",relevance:0,keywords:{ 404 | _hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] 405 | }, 406 | begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/)) 407 | },m=[_,l,s,a,e.C_BLOCK_COMMENT_MODE,o,c],g={variants:[{begin:/=/,end:/;/},{ 408 | begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], 409 | keywords:p,contains:m.concat([{begin:/\(/,end:/\)/,keywords:p, 410 | contains:m.concat(["self"]),relevance:0}]),relevance:0},f={className:"function", 411 | begin:"("+i+"[\\*&\\s]+)+"+u,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, 412 | keywords:p,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:n,keywords:p,relevance:0},{ 413 | begin:u,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{ 414 | begin:/:/,endsWithParent:!0,contains:[c,o]},{relevance:0,match:/,/},{ 415 | className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0, 416 | contains:[a,e.C_BLOCK_COMMENT_MODE,c,o,s,{begin:/\(/,end:/\)/,keywords:p, 417 | relevance:0,contains:["self",a,e.C_BLOCK_COMMENT_MODE,c,o,s]}] 418 | },s,a,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C++", 419 | aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:p,illegal:"",keywords:p,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:p},{ 424 | match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], 425 | className:{1:"keyword",3:"title.class"}}])}}})();hljs.registerLanguage("cpp",e) 426 | })();/*! `csharp` grammar compiled for Highlight.js 11.9.0 */ 427 | (()=>{var e=(()=>{"use strict";return e=>{const n={ 428 | keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]), 429 | built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], 430 | literal:["default","false","null","true"]},a=e.inherit(e.TITLE_MODE,{ 431 | begin:"[a-zA-Z](\\.?\\w)*"}),i={className:"number",variants:[{ 432 | begin:"\\b(0b[01']+)"},{ 433 | begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ 434 | begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" 435 | }],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] 436 | },t=e.inherit(s,{illegal:/\n/}),r={className:"subst",begin:/\{/,end:/\}/, 437 | keywords:n},l=e.inherit(r,{illegal:/\n/}),c={className:"string",begin:/\$"/, 438 | end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ 439 | },e.BACKSLASH_ESCAPE,l]},o={className:"string",begin:/\$@"/,end:'"',contains:[{ 440 | begin:/\{\{/},{begin:/\}\}/},{begin:'""'},r]},d=e.inherit(o,{illegal:/\n/, 441 | contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},l]}) 442 | ;r.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_BLOCK_COMMENT_MODE], 443 | l.contains=[d,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.inherit(e.C_BLOCK_COMMENT_MODE,{ 444 | illegal:/\n/})];const g={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] 445 | },E={begin:"<",end:">",contains:[{beginKeywords:"in out"},a] 446 | },_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={ 447 | begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], 448 | keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, 449 | contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ 450 | begin:"\x3c!--|--\x3e"},{begin:""}]}] 451 | }),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", 452 | end:"$",keywords:{ 453 | keyword:"if else elif endif define undef warning error line region endregion pragma checksum" 454 | }},g,i,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, 455 | illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" 456 | },a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", 457 | relevance:0,end:/[{;=]/,illegal:/[^\s:]/, 458 | contains:[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ 459 | beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, 460 | contains:[a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", 461 | begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ 462 | className:"string",begin:/"/,end:/"/}]},{ 463 | beginKeywords:"new return throw await else",relevance:0},{className:"function", 464 | begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, 465 | end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ 466 | beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", 467 | relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, 468 | contains:[e.TITLE_MODE,E],relevance:0},{match:/\(\)/},{className:"params", 469 | begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, 470 | contains:[g,i,e.C_BLOCK_COMMENT_MODE] 471 | },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}})() 472 | ;hljs.registerLanguage("csharp",e)})();/*! `css` grammar compiled for Highlight.js 11.9.0 */ 473 | (()=>{var e=(()=>{"use strict" 474 | ;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],i=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],t=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],o=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse() 475 | ;return n=>{const a=n.regex,l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"}, 476 | BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number", 477 | begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{ 478 | className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{ 479 | scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", 480 | contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ 481 | scope:"number", 482 | begin:e.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)?", 483 | relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} 484 | }))(n),s=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS", 485 | case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"}, 486 | classNameAliases:{keyframePosition:"selector-tag"},contains:[l.BLOCK_COMMENT,{ 487 | begin:/-(webkit|moz|ms|o)-(?=[a-z])/},l.CSS_NUMBER_MODE,{ 488 | className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{ 489 | className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 490 | },l.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ 491 | begin:":("+r.join("|")+")"},{begin:":(:)?("+t.join("|")+")"}]},l.CSS_VARIABLE,{ 492 | className:"attribute",begin:"\\b("+o.join("|")+")\\b"},{begin:/:/,end:/[;}{]/, 493 | contains:[l.BLOCK_COMMENT,l.HEXCOLOR,l.IMPORTANT,l.CSS_NUMBER_MODE,...s,{ 494 | begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" 495 | },contains:[...s,{className:"string",begin:/[^)]/,endsWithParent:!0, 496 | excludeEnd:!0}]},l.FUNCTION_DISPATCH]},{begin:a.lookahead(/@/),end:"[{;]", 497 | relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/ 498 | },{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ 499 | $pattern:/[a-z-]+/,keyword:"and or not only",attribute:i.join(" ")},contains:[{ 500 | begin:/[a-z-]+(?=:)/,className:"attribute"},...s,l.CSS_NUMBER_MODE]}]},{ 501 | className:"selector-tag",begin:"\\b("+e.join("|")+")\\b"}]}}})() 502 | ;hljs.registerLanguage("css",e)})();/*! `diff` grammar compiled for Highlight.js 11.9.0 */ 503 | (()=>{var e=(()=>{"use strict";return e=>{const a=e.regex;return{name:"Diff", 504 | aliases:["patch"],contains:[{className:"meta",relevance:10, 505 | match:a.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) 506 | },{className:"comment",variants:[{ 507 | begin:a.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), 508 | end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ 509 | className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, 510 | end:/$/}]}}})();hljs.registerLanguage("diff",e)})();/*! `dockerfile` grammar compiled for Highlight.js 11.9.0 */ 511 | (()=>{var e=(()=>{"use strict";return e=>({name:"Dockerfile",aliases:["docker"], 512 | case_insensitive:!0, 513 | keywords:["from","maintainer","expose","env","arg","user","onbuild","stopsignal"], 514 | contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{ 515 | beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell", 516 | starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"{var e=(()=>{"use strict";return e=>{const n={ 519 | keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], 520 | type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], 521 | literal:["true","false","iota","nil"], 522 | built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] 523 | };return{name:"Go",aliases:["golang"],keywords:n,illegal:"{var e=(()=>{"use strict";return e=>{const n=e.regex,a={className:"number", 532 | relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}] 533 | },s=e.COMMENT();s.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const i={ 534 | className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/ 535 | }]},t={className:"literal",begin:/\bon|off|true|false|yes|no\b/},r={ 536 | className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''", 537 | end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"' 538 | },{begin:"'",end:"'"}]},l={begin:/\[/,end:/\]/,contains:[s,t,i,r,a,"self"], 539 | relevance:0},c=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ 540 | name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, 541 | contains:[s,{className:"section",begin:/\[+/,end:/\]+/},{ 542 | begin:n.concat(c,"(\\s*\\.\\s*",c,")*",n.lookahead(/\s*=\s*[^#\s]/)), 543 | className:"attr",starts:{end:/$/,contains:[s,l,t,i,r,a]}}]}}})() 544 | ;hljs.registerLanguage("ini",e)})();/*! `java` grammar compiled for Highlight.js 11.9.0 */ 545 | (()=>{var e=(()=>{"use strict" 546 | ;var e="[0-9](_*[0-9])*",a=`\\.(${e})`,n="[0-9a-fA-F](_*[0-9a-fA-F])*",s={ 547 | className:"number",variants:[{ 548 | begin:`(\\b(${e})((${a})|\\.)?|(${a}))[eE][+-]?(${e})[fFdD]?\\b`},{ 549 | begin:`\\b(${e})((${a})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${a})[fFdD]?\\b` 550 | },{begin:`\\b(${e})[fFdD]\\b`},{ 551 | begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?(${e})[fFdD]?\\b`},{ 552 | begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{ 553 | begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], 554 | relevance:0};function t(e,a,n){return-1===n?"":e.replace(a,(s=>t(e,a,n-1)))} 555 | return e=>{ 556 | const a=e.regex,n="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",i=n+t("(?:<"+n+"~~~(?:\\s*,\\s*"+n+"~~~)*>)?",/~~~/g,2),r={ 557 | keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"], 558 | literal:["false","true","null"], 559 | type:["char","boolean","long","float","int","byte","short","double"], 560 | built_in:["super","this"]},l={className:"meta",begin:"@"+n,contains:[{ 561 | begin:/\(/,end:/\)/,contains:["self"]}]},c={className:"params",begin:/\(/, 562 | end:/\)/,keywords:r,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} 563 | ;return{name:"Java",aliases:["jsp"],keywords:r,illegal:/<\/|#/, 564 | contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, 565 | relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ 566 | begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 567 | },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/, 568 | className:"string",contains:[e.BACKSLASH_ESCAPE] 569 | },e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ 570 | match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,n],className:{ 571 | 1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{ 572 | begin:[a.concat(/(?!else)/,n),/\s+/,n,/\s+/,/=(?!=)/],className:{1:"type", 573 | 3:"variable",5:"operator"}},{begin:[/record/,/\s+/,n],className:{1:"keyword", 574 | 3:"title.class"},contains:[c,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ 575 | beginKeywords:"new throw return else",relevance:0},{ 576 | begin:["(?:"+i+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ 577 | 2:"title.function"},keywords:r,contains:[{className:"params",begin:/\(/, 578 | end:/\)/,keywords:r,relevance:0, 579 | contains:[l,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,e.C_BLOCK_COMMENT_MODE] 580 | },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},s,l]}}})() 581 | ;hljs.registerLanguage("java",e)})();/*! `javascript` grammar compiled for Highlight.js 11.9.0 */ 582 | (()=>{var e=(()=>{"use strict" 583 | ;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],i=[].concat(r,t,s) 584 | ;return o=>{const l=o.regex,b=e,d={begin:/<[A-Za-z0-9\\._:-]+/, 585 | end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ 586 | const a=e[0].length+e.index,t=e.input[a] 587 | ;if("<"===t||","===t)return void n.ignoreMatch();let s 588 | ;">"===t&&(((e,{after:n})=>{const a="",$={ 634 | match:[/const|var|let/,/\s+/,b,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(B)], 635 | keywords:"async",className:{1:"keyword",3:"title.function"},contains:[R]} 636 | ;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{ 637 | PARAMS_CONTAINS:w,CLASS_REFERENCE:k},illegal:/#(?![$_A-z])/, 638 | contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ 639 | label:"use_strict",className:"meta",relevance:10, 640 | begin:/^\s*['"]use (strict|asm)['"]/ 641 | },o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,h,N,_,f,v,{match:/\$\d+/},A,k,{ 642 | className:"attr",begin:b+l.lookahead(":"),relevance:0},$,{ 643 | begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", 644 | keywords:"return throw case",relevance:0,contains:[v,o.REGEXP_MODE,{ 645 | className:"function",begin:B,returnBegin:!0,end:"\\s*=>",contains:[{ 646 | className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{ 647 | className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, 648 | excludeEnd:!0,keywords:g,contains:w}]}]},{begin:/,/,relevance:0},{match:/\s+/, 649 | relevance:0},{variants:[{begin:"<>",end:""},{ 650 | match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin, 651 | "on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{ 652 | begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},I,{ 653 | beginKeywords:"while if switch catch for"},{ 654 | begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", 655 | returnBegin:!0,label:"func.def",contains:[R,o.inherit(o.TITLE_MODE,{begin:b, 656 | className:"title.function"})]},{match:/\.\.\./,relevance:0},C,{match:"\\$"+b, 657 | relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, 658 | contains:[R]},x,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, 659 | className:"variable.constant"},O,M,{match:/\$[(.]/}]}}})() 660 | ;hljs.registerLanguage("javascript",e)})();/*! `json` grammar compiled for Highlight.js 11.9.0 */ 661 | (()=>{var e=(()=>{"use strict";return e=>{const a=["true","false","null"],n={ 662 | scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",keywords:{ 663 | literal:a},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/, 664 | relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0 665 | },e.QUOTE_STRING_MODE,n,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE], 666 | illegal:"\\S"}}})();hljs.registerLanguage("json",e)})();/*! `kotlin` grammar compiled for Highlight.js 11.9.0 */ 667 | (()=>{var e=(()=>{"use strict" 668 | ;var e="[0-9](_*[0-9])*",n=`\\.(${e})`,a="[0-9a-fA-F](_*[0-9a-fA-F])*",i={ 669 | className:"number",variants:[{ 670 | begin:`(\\b(${e})((${n})|\\.)?|(${n}))[eE][+-]?(${e})[fFdD]?\\b`},{ 671 | begin:`\\b(${e})((${n})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${n})[fFdD]?\\b` 672 | },{begin:`\\b(${e})[fFdD]\\b`},{ 673 | begin:`\\b0[xX]((${a})\\.?|(${a})?\\.(${a}))[pP][+-]?(${e})[fFdD]?\\b`},{ 674 | begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${a})[lL]?\\b`},{ 675 | begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], 676 | relevance:0};return e=>{const n={ 677 | 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", 678 | built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", 679 | literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" 680 | },s={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},t={ 681 | className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", 682 | variants:[{begin:'"""',end:'"""(?=[^"])',contains:[t,s]},{begin:"'",end:"'", 683 | illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, 684 | contains:[e.BACKSLASH_ESCAPE,t,s]}]};s.contains.push(r);const l={ 685 | className:"meta", 686 | begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" 687 | },c={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, 688 | end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}] 689 | },o=i,b=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),E={ 690 | variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, 691 | contains:[]}]},d=E;return d.variants[1].contains=[E],E.variants[1].contains=[d], 692 | {name:"Kotlin",aliases:["kt","kts"],keywords:n, 693 | contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", 694 | begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,b,{className:"keyword", 695 | begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", 696 | begin:/@\w+/}]}},a,l,c,{className:"function",beginKeywords:"fun",end:"[(]|$", 697 | returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ 698 | begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, 699 | contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, 700 | keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, 701 | endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, 702 | endsWithParent:!0,contains:[E,e.C_LINE_COMMENT_MODE,b],relevance:0 703 | },e.C_LINE_COMMENT_MODE,b,l,c,r,e.C_NUMBER_MODE]},b]},{ 704 | begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{ 705 | 3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, 706 | illegal:"extends implements",contains:[{ 707 | beginKeywords:"public protected internal private constructor" 708 | },e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, 709 | excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/, 710 | excludeBegin:!0,returnEnd:!0},l,c]},r,{className:"meta",begin:"^#!/usr/bin/env", 711 | end:"$",illegal:"\n"},o]}}})();hljs.registerLanguage("kotlin",e)})();/*! `less` grammar compiled for Highlight.js 11.9.0 */ 712 | (()=>{var e=(()=>{"use strict" 713 | ;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],o=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),n=r.concat(i) 714 | ;return a=>{const l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"}, 715 | BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number", 716 | begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{ 717 | className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{ 718 | scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", 719 | contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ 720 | scope:"number", 721 | begin:e.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)?", 722 | relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} 723 | }))(a),s=n,d="[\\w-]+",c="("+d+"|@\\{"+d+"\\})",g=[],b=[],m=e=>({ 724 | className:"string",begin:"~?"+e+".*?"+e}),p=(e,t,r)=>({className:e,begin:t, 725 | relevance:r}),u={$pattern:/[a-z-]+/,keyword:"and or not only", 726 | attribute:t.join(" ")},h={begin:"\\(",end:"\\)",contains:b,keywords:u, 727 | relevance:0} 728 | ;b.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,m("'"),m('"'),l.CSS_NUMBER_MODE,{ 729 | begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", 730 | excludeEnd:!0} 731 | },l.HEXCOLOR,h,p("variable","@@?"+d,10),p("variable","@\\{"+d+"\\}"),p("built_in","~?`[^`]*?`"),{ 732 | className:"attribute",begin:d+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0 733 | },l.IMPORTANT,{beginKeywords:"and not"},l.FUNCTION_DISPATCH);const f=b.concat({ 734 | begin:/\{/,end:/\}/,contains:g}),k={beginKeywords:"when",endsWithParent:!0, 735 | contains:[{beginKeywords:"and not"}].concat(b)},v={begin:c+"\\s*:", 736 | returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/ 737 | },l.CSS_VARIABLE,{className:"attribute",begin:"\\b("+o.join("|")+")\\b", 738 | end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:b}}] 739 | },w={className:"keyword", 740 | begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", 741 | starts:{end:"[;{}]",keywords:u,returnEnd:!0,contains:b,relevance:0}},y={ 742 | className:"variable",variants:[{begin:"@"+d+"\\s*:",relevance:15},{begin:"@"+d 743 | }],starts:{end:"[;}]",returnEnd:!0,contains:f}},x={variants:[{ 744 | begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:c,end:/\{/}],returnBegin:!0, 745 | returnEnd:!0,illegal:"[<='$\"]",relevance:0, 746 | contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,k,p("keyword","all\\b"),p("variable","@\\{"+d+"\\}"),{ 747 | begin:"\\b("+e.join("|")+")\\b",className:"selector-tag" 748 | },l.CSS_NUMBER_MODE,p("selector-tag",c,0),p("selector-id","#"+c),p("selector-class","\\."+c,0),p("selector-tag","&",0),l.ATTRIBUTE_SELECTOR_MODE,{ 749 | className:"selector-pseudo",begin:":("+r.join("|")+")"},{ 750 | className:"selector-pseudo",begin:":(:)?("+i.join("|")+")"},{begin:/\(/, 751 | end:/\)/,relevance:0,contains:f},{begin:"!important"},l.FUNCTION_DISPATCH]},_={ 752 | begin:d+":(:)?"+`(${s.join("|")})`,returnBegin:!0,contains:[x]} 753 | ;return g.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,w,y,_,v,x,k,l.FUNCTION_DISPATCH), 754 | {name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:g}}})() 755 | ;hljs.registerLanguage("less",e)})();/*! `lua` grammar compiled for Highlight.js 11.9.0 */ 756 | (()=>{var e=(()=>{"use strict";return e=>{const t="\\[=*\\[",a="\\]=*\\]",n={ 757 | begin:t,end:a,contains:["self"] 758 | },o=[e.COMMENT("--(?!"+t+")","$"),e.COMMENT("--"+t,a,{contains:[n],relevance:10 759 | })];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE, 760 | literal:"true false nil", 761 | keyword:"and break do else elseif end for goto if in local not or repeat return then until while", 762 | 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 loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine 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" 763 | },contains:o.concat([{className:"function",beginKeywords:"function",end:"\\)", 764 | contains:[e.inherit(e.TITLE_MODE,{ 765 | begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", 766 | begin:"\\(",endsWithParent:!0,contains:o}].concat(o) 767 | },e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", 768 | begin:t,end:a,contains:[n],relevance:5}])}}})();hljs.registerLanguage("lua",e) 769 | })();/*! `makefile` grammar compiled for Highlight.js 11.9.0 */ 770 | (()=>{var e=(()=>{"use strict";return e=>{const i={className:"variable", 771 | variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", 772 | contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{var e=(()=>{"use strict";return e=>{const n=e.regex,a={ 784 | className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{\w+\}/},{ 785 | begin:n.concat(/[$@]/,e.UNDERSCORE_IDENT_RE)}]},s={endsWithParent:!0,keywords:{ 786 | $pattern:/[a-z_]{2,}|\/dev\/poll/, 787 | literal:["on","off","yes","no","true","false","none","blocked","debug","info","notice","warn","error","crit","select","break","last","permanent","redirect","kqueue","rtsig","epoll","poll","/dev/poll"] 788 | },relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string", 789 | contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/ 790 | }]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[a] 791 | },{className:"regexp",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:"\\s\\^", 792 | end:"\\s|\\{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|\\{|;",returnEnd:!0},{ 793 | begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number", 794 | begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{ 795 | className:"number",begin:"\\b\\d+[kKmMgGdshdwy]?\\b",relevance:0},a]};return{ 796 | name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{ 797 | beginKeywords:"upstream location",end:/;|\{/,contains:s.contains,keywords:{ 798 | section:"upstream location"}},{className:"section", 799 | begin:n.concat(e.UNDERSCORE_IDENT_RE+n.lookahead(/\s+\{/)),relevance:0},{ 800 | begin:n.lookahead(e.UNDERSCORE_IDENT_RE+"\\s"),end:";|\\{",contains:[{ 801 | className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:s}],relevance:0}], 802 | illegal:"[^\\s\\}\\{]"}}})();hljs.registerLanguage("nginx",e)})();/*! `objectivec` grammar compiled for Highlight.js 11.9.0 */ 803 | (()=>{var e=(()=>{"use strict";return e=>{const n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={ 804 | $pattern:n,keyword:["@interface","@class","@protocol","@implementation"]} 805 | ;return{name:"Objective-C", 806 | aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:{ 807 | "variable.language":["this","super"],$pattern:n, 808 | keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","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"], 809 | literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"], 810 | built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"], 811 | type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"] 812 | },illegal:"/,end:/$/,illegal:"\\n" 821 | },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class", 822 | begin:"("+_.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:_, 823 | contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE, 824 | relevance:0}]}}})();hljs.registerLanguage("objectivec",e)})();/*! `perl` grammar compiled for Highlight.js 11.9.0 */ 825 | (()=>{var e=(()=>{"use strict";return e=>{ 826 | const n=e.regex,t=/[dualxmsipngr]{0,12}/,r={$pattern:/[\w.]+/, 827 | keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" 828 | },s={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:r},i={begin:/->\{/, 829 | end:/\}/},a={variants:[{begin:/\$\d/},{ 830 | begin:n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") 831 | },{begin:/[$%@][^\s\w{]/,relevance:0}] 832 | },c=[e.BACKSLASH_ESCAPE,s,a],o=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],g=(e,r,s="\\1")=>{ 833 | const i="\\1"===s?s:n.concat(s,r) 834 | ;return n.concat(n.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,i,/(?:\\.|[^\\\/])*?/,s,t) 835 | },l=(e,r,s)=>n.concat(n.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,s,t),d=[a,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ 836 | endsWithParent:!0}),i,{className:"string",contains:c,variants:[{ 837 | begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", 838 | end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ 839 | begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", 840 | relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", 841 | contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", 842 | contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ 843 | begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number", 844 | begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", 845 | relevance:0},{ 846 | begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", 847 | keywords:"split return print reverse grep",relevance:0, 848 | contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ 849 | begin:g("s|tr|y",n.either(...o,{capture:!0}))},{begin:g("s|tr|y","\\(","\\)")},{ 850 | begin:g("s|tr|y","\\[","\\]")},{begin:g("s|tr|y","\\{","\\}")}],relevance:2},{ 851 | className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ 852 | begin:l("(?:m|qr)?",/\//,/\//)},{begin:l("m|qr",n.either(...o,{capture:!0 853 | }),/\1/)},{begin:l("m|qr",/\(/,/\)/)},{begin:l("m|qr",/\[/,/\]/)},{ 854 | begin:l("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub", 855 | end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{ 856 | begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$", 857 | subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}] 858 | }];return s.contains=d,i.contains=d,{name:"Perl",aliases:["pl","pm"],keywords:r, 859 | contains:d}}})();hljs.registerLanguage("perl",e)})();/*! `php` grammar compiled for Highlight.js 11.9.0 */ 860 | (()=>{var e=(()=>{"use strict";return e=>{ 861 | const t=e.regex,a=/(?![A-Za-z0-9])(?![$])/,r=t.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,a),n=t.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,a),o={ 862 | scope:"variable",match:"\\$+"+r},c={scope:"subst",variants:[{begin:/\$\w+/},{ 863 | begin:/\{\$/,end:/\}/}]},i=e.inherit(e.APOS_STRING_MODE,{illegal:null 864 | }),s="[ \t\n]",l={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{ 865 | illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(c)}),i,{ 866 | begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/, 867 | contains:e.QUOTE_STRING_MODE.contains.concat(c),"on:begin":(e,t)=>{ 868 | t.data._beginMatch=e[1]||e[2]},"on:end":(e,t)=>{ 869 | t.data._beginMatch!==e[1]&&t.ignoreMatch()}},e.END_SAME_AS_BEGIN({ 870 | begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},d={scope:"number",variants:[{ 871 | begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{ 872 | begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{ 873 | begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" 874 | }],relevance:0 875 | },_=["false","null","true"],p=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],b=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],E={ 876 | keyword:p,literal:(e=>{const t=[];return e.forEach((e=>{ 877 | t.push(e),e.toLowerCase()===e?t.push(e.toUpperCase()):t.push(e.toLowerCase()) 878 | })),t})(_),built_in:b},u=e=>e.map((e=>e.replace(/\|\d+$/,""))),g={variants:[{ 879 | match:[/new/,t.concat(s,"+"),t.concat("(?!",u(b).join("\\b|"),"\\b)"),n],scope:{ 880 | 1:"keyword",4:"title.class"}}]},h=t.concat(r,"\\b(?!\\()"),m={variants:[{ 881 | match:[t.concat(/::/,t.lookahead(/(?!class\b)/)),h],scope:{2:"variable.constant" 882 | }},{match:[/::/,/class/],scope:{2:"variable.language"}},{ 883 | match:[n,t.concat(/::/,t.lookahead(/(?!class\b)/)),h],scope:{1:"title.class", 884 | 3:"variable.constant"}},{match:[n,t.concat("::",t.lookahead(/(?!class\b)/))], 885 | scope:{1:"title.class"}},{match:[n,/::/,/class/],scope:{1:"title.class", 886 | 3:"variable.language"}}]},I={scope:"attr", 887 | match:t.concat(r,t.lookahead(":"),t.lookahead(/(?!::)/))},f={relevance:0, 888 | begin:/\(/,end:/\)/,keywords:E,contains:[I,o,m,e.C_BLOCK_COMMENT_MODE,l,d,g] 889 | },O={relevance:0, 890 | match:[/\b/,t.concat("(?!fn\\b|function\\b|",u(p).join("\\b|"),"|",u(b).join("\\b|"),"\\b)"),r,t.concat(s,"*"),t.lookahead(/(?=\()/)], 891 | scope:{3:"title.function.invoke"},contains:[f]};f.contains.push(O) 892 | ;const v=[I,m,e.C_BLOCK_COMMENT_MODE,l,d,g];return{case_insensitive:!1, 893 | keywords:E,contains:[{begin:t.concat(/#\[\s*/,n),beginScope:"meta",end:/]/, 894 | endScope:"meta",keywords:{literal:_,keyword:["new","array"]},contains:[{ 895 | begin:/\[/,end:/]/,keywords:{literal:_,keyword:["new","array"]}, 896 | contains:["self",...v]},...v,{scope:"meta",match:n}] 897 | },e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{ 898 | scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/, 899 | keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE, 900 | contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{ 901 | begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{ 902 | begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},o,O,m,{ 903 | match:[/const/,/\s/,r],scope:{1:"keyword",3:"variable.constant"}},g,{ 904 | scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/, 905 | excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use" 906 | },e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params", 907 | begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:E, 908 | contains:["self",o,m,e.C_BLOCK_COMMENT_MODE,l,d]}]},{scope:"class",variants:[{ 909 | beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", 910 | illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ 911 | beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ 912 | beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, 913 | contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{ 914 | beginKeywords:"use",relevance:0,end:";",contains:[{ 915 | match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},l,d]} 916 | }})();hljs.registerLanguage("php",e)})();/*! `php-template` grammar compiled for Highlight.js 11.9.0 */ 917 | (()=>{var n=(()=>{"use strict";return n=>({name:"PHP template", 918 | subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php", 919 | contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{ 920 | begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null, 921 | className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{ 922 | illegal:null,className:null,contains:null,skip:!0})]}]})})() 923 | ;hljs.registerLanguage("php-template",n)})();/*! `python` grammar compiled for Highlight.js 11.9.0 */ 924 | (()=>{var e=(()=>{"use strict";return e=>{ 925 | const n=e.regex,a=/[\p{XID_Start}_]\p{XID_Continue}*/u,i=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],s={ 926 | $pattern:/[A-Za-z]\w+|__\w+__/,keyword:i, 927 | built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], 928 | literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], 929 | type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] 930 | },t={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/, 931 | end:/\}/,keywords:s,illegal:/#/},l={begin:/\{\{/,relevance:0},b={ 932 | className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ 933 | begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, 934 | contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{ 935 | begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, 936 | contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{ 937 | begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, 938 | contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, 939 | end:/"""/,contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([uU]|[rR])'/,end:/'/, 940 | relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ 941 | begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, 942 | end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, 943 | contains:[e.BACKSLASH_ESCAPE,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, 944 | contains:[e.BACKSLASH_ESCAPE,l,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] 945 | },o="[0-9](_?[0-9])*",c=`(\\b(${o}))?\\.(${o})|\\b(${o})\\.`,d="\\b|"+i.join("|"),g={ 946 | className:"number",relevance:0,variants:[{ 947 | begin:`(\\b(${o})|(${c}))[eE][+-]?(${o})[jJ]?(?=${d})`},{begin:`(${c})[jJ]?`},{ 948 | begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{ 949 | begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})` 950 | },{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${o})[jJ](?=${d})` 951 | }]},p={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:s, 952 | contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={ 953 | className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, 954 | end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s, 955 | contains:["self",t,g,b,e.HASH_COMMENT_MODE]}]};return r.contains=[b,g,t],{ 956 | name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:s, 957 | illegal:/(<\/|\?)|=>/,contains:[t,g,{begin:/\bself\b/},{beginKeywords:"if", 958 | relevance:0},b,p,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,a],scope:{ 959 | 1:"keyword",3:"title.function"},contains:[m]},{variants:[{ 960 | match:[/\bclass/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/\bclass/,/\s+/,a]}], 961 | scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ 962 | className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[g,m,b]}]}}})() 963 | ;hljs.registerLanguage("python",e)})();/*! `python-repl` grammar compiled for Highlight.js 11.9.0 */ 964 | (()=>{var a=(()=>{"use strict";return a=>({aliases:["pycon"],contains:[{ 965 | className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"} 966 | },variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]})})() 967 | ;hljs.registerLanguage("python-repl",a)})();/*! `r` grammar compiled for Highlight.js 11.9.0 */ 968 | (()=>{var e=(()=>{"use strict";return e=>{ 969 | const a=e.regex,n=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,i=a.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),s=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,t=a.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/) 970 | ;return{name:"R",keywords:{$pattern:n, 971 | keyword:"function if in break next repeat else for while", 972 | literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", 973 | built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" 974 | },contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/, 975 | starts:{end:a.lookahead(a.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)), 976 | endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{ 977 | scope:"variable",variants:[{match:n},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0 978 | }]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}] 979 | }),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE], 980 | variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ 981 | }),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/ 982 | }),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/ 983 | }),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/ 984 | }),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/ 985 | }),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"', 986 | relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{ 987 | 1:"operator",2:"number"},match:[s,i]},{scope:{1:"operator",2:"number"}, 988 | match:[/%[^%]*%/,i]},{scope:{1:"punctuation",2:"number"},match:[t,i]},{scope:{ 989 | 2:"number"},match:[/[^a-zA-Z0-9._]|^/,i]}]},{scope:{3:"operator"}, 990 | match:[n,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:s},{ 991 | match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:t},{begin:"`",end:"`", 992 | contains:[{begin:/\\./}]}]}}})();hljs.registerLanguage("r",e)})();/*! `ruby` grammar compiled for Highlight.js 11.9.0 */ 993 | (()=>{var e=(()=>{"use strict";return e=>{ 994 | const n=e.regex,a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",s=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(s,/(::\w+)*/),t={ 995 | "variable.constant":["__FILE__","__LINE__","__ENCODING__"], 996 | "variable.language":["self","super"], 997 | keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"], 998 | built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"], 999 | literal:["true","false","nil"]},c={className:"doctag",begin:"@[A-Za-z]+"},r={ 1000 | begin:"#<",end:">"},b=[e.COMMENT("#","$",{contains:[c] 1001 | }),e.COMMENT("^=begin","^=end",{contains:[c],relevance:10 1002 | }),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],l={className:"subst",begin:/#\{/, 1003 | end:/\}/,keywords:t},d={className:"string",contains:[e.BACKSLASH_ESCAPE,l], 1004 | variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{ 1005 | begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{ 1006 | begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//, 1007 | end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{ 1008 | begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{ 1009 | begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ 1010 | begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ 1011 | begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ 1012 | begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), 1013 | contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, 1014 | contains:[e.BACKSLASH_ESCAPE,l]})]}]},o="[0-9](_?[0-9])*",g={className:"number", 1015 | relevance:0,variants:[{ 1016 | begin:`\\b([1-9](_?[0-9])*|0)(\\.(${o}))?([eE][+-]?(${o})|r)?i?\\b`},{ 1017 | begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" 1018 | },{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ 1019 | begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ 1020 | begin:"\\b0(_?[0-7])+r?i?\\b"}]},_={variants:[{match:/\(\)/},{ 1021 | className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0, 1022 | keywords:t}]},u=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{ 1023 | match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class", 1024 | 4:"title.class.inherited"},keywords:t},{match:[/(include|extend)\s+/,i],scope:{ 1025 | 2:"title.class"},keywords:t},{relevance:0,match:[i,/\.new[. (]/],scope:{ 1026 | 1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, 1027 | className:"variable.constant"},{relevance:0,match:s,scope:"title.class"},{ 1028 | match:[/def/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[_]},{ 1029 | begin:e.IDENT_RE+"::"},{className:"symbol", 1030 | begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", 1031 | begin:":(?!\\s)",contains:[d,{begin:a}],relevance:0},g,{className:"variable", 1032 | begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ 1033 | className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0, 1034 | relevance:0,keywords:t},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*", 1035 | keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,l], 1036 | illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{ 1037 | begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[", 1038 | end:"\\][a-z]*"}]}].concat(r,b),relevance:0}].concat(r,b) 1039 | ;l.contains=u,_.contains=u;const m=[{begin:/^\s*=>/,starts:{end:"$",contains:u} 1040 | },{className:"meta.prompt", 1041 | begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", 1042 | starts:{end:"$",keywords:t,contains:u}}];return b.unshift(r),{name:"Ruby", 1043 | aliases:["rb","gemspec","podspec","thor","irb"],keywords:t,illegal:/\/\*/, 1044 | contains:[e.SHEBANG({binary:"ruby"})].concat(m).concat(b).concat(u)}}})() 1045 | ;hljs.registerLanguage("ruby",e)})();/*! `rust` grammar compiled for Highlight.js 11.9.0 */ 1046 | (()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,n={ 1047 | className:"title.function.invoke",relevance:0, 1048 | begin:t.concat(/\b/,/(?!let|for|while|if|else|match\b)/,e.IDENT_RE,t.lookahead(/\s*\(/)) 1049 | },a="([ui](8|16|32|64|128|size)|f(32|64))?",i=["drop ","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!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","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!"],r=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"] 1050 | ;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:r, 1051 | 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"], 1052 | literal:["true","false","Some","None","Ok","Err"],built_in:i},illegal:""},n]}}})() 1072 | ;hljs.registerLanguage("rust",e)})();/*! `scss` grammar compiled for Highlight.js 11.9.0 */ 1073 | (()=>{var e=(()=>{"use strict" 1074 | ;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],r=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],t=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],o=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse() 1075 | ;return n=>{const a=(e=>({IMPORTANT:{scope:"meta",begin:"!important"}, 1076 | BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number", 1077 | begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{ 1078 | className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{ 1079 | scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", 1080 | contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ 1081 | scope:"number", 1082 | begin:e.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)?", 1083 | relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} 1084 | }))(n),l=t,s=i,d="@[a-z-]+",c={className:"variable", 1085 | begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS", 1086 | case_insensitive:!0,illegal:"[=/|']", 1087 | contains:[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE,a.CSS_NUMBER_MODE,{ 1088 | className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ 1089 | className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 1090 | },a.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", 1091 | begin:"\\b("+e.join("|")+")\\b",relevance:0},{className:"selector-pseudo", 1092 | begin:":("+s.join("|")+")"},{className:"selector-pseudo", 1093 | begin:":(:)?("+l.join("|")+")"},c,{begin:/\(/,end:/\)/, 1094 | contains:[a.CSS_NUMBER_MODE]},a.CSS_VARIABLE,{className:"attribute", 1095 | begin:"\\b("+o.join("|")+")\\b"},{ 1096 | begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" 1097 | },{begin:/:/,end:/[;}{]/,relevance:0, 1098 | contains:[a.BLOCK_COMMENT,c,a.HEXCOLOR,a.CSS_NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.IMPORTANT,a.FUNCTION_DISPATCH] 1099 | },{begin:"@(page|font-face)",keywords:{$pattern:d,keyword:"@page @font-face"}},{ 1100 | begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, 1101 | keyword:"and or not only",attribute:r.join(" ")},contains:[{begin:d, 1102 | className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" 1103 | },c,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.HEXCOLOR,a.CSS_NUMBER_MODE] 1104 | },a.FUNCTION_DISPATCH]}}})();hljs.registerLanguage("scss",e)})();/*! `shell` grammar compiled for Highlight.js 11.9.0 */ 1105 | (()=>{var s=(()=>{"use strict";return s=>({name:"Shell Session", 1106 | aliases:["console","shellsession"],contains:[{className:"meta.prompt", 1107 | begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/, 1108 | subLanguage:"bash"}}]})})();hljs.registerLanguage("shell",s)})();/*! `sql` grammar compiled for Highlight.js 11.9.0 */ 1109 | (()=>{var e=(()=>{"use strict";return e=>{ 1110 | const r=e.regex,t=e.COMMENT("--","$"),n=["true","false","unknown"],a=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],i=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=i,c=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!i.includes(e))),l={ 1111 | begin:r.concat(/\b/,r.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}} 1112 | ;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ 1113 | $pattern:/\b[\w\.]+/,keyword:((e,{exceptions:r,when:t}={})=>{const n=t 1114 | ;return r=r||[],e.map((e=>e.match(/\|\d+$/)||r.includes(e)?e:n(e)?e+"|0":e)) 1115 | })(c,{when:e=>e.length<3}),literal:n,type:a, 1116 | built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] 1117 | },contains:[{begin:r.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/, 1118 | keyword:c.concat(s),literal:n,type:a}},{className:"type", 1119 | begin:r.either("double precision","large object","with timezone","without timezone") 1120 | },l,{className:"variable",begin:/@[a-z0-9][a-z0-9_]*/},{className:"string", 1121 | variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/, 1122 | contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{ 1123 | className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/, 1124 | relevance:0}]}}})();hljs.registerLanguage("sql",e)})();/*! `swift` grammar compiled for Highlight.js 11.9.0 */ 1125 | (()=>{var e=(()=>{"use strict";function e(e){ 1126 | return e?"string"==typeof e?e:e.source:null}function n(e){return t("(?=",e,")")} 1127 | function t(...n){return n.map((n=>e(n))).join("")}function a(...n){const t=(e=>{ 1128 | const n=e[e.length-1] 1129 | ;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} 1130 | })(n);return"("+(t.capture?"":"?:")+n.map((n=>e(n))).join("|")+")"} 1131 | const i=e=>t(/\b/,e,/\w$/.test(e)?/\b/:/\B/),s=["Protocol","Type"].map(i),c=["init","self"].map(i),u=["Any","Self"],r=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],o=["false","nil","true"],l=["assignment","associativity","higherThan","left","lowerThan","none","right"],m=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],p=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],d=a(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),F=a(d,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),b=t(d,F,"*"),h=a(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),f=a(h,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),w=t(h,f,"*"),g=t(/[A-Z]/,f,"*"),y=["attached","autoclosure",t(/convention\(/,a("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",t(/objc\(/,w,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],E=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] 1132 | ;return e=>{const d={match:/\s+/,relevance:0},h=e.COMMENT("/\\*","\\*/",{ 1133 | contains:["self"]}),A=[e.C_LINE_COMMENT_MODE,h],v={match:[/\./,a(...s,...c)], 1134 | className:{2:"keyword"}},C={match:t(/\./,a(...r)),relevance:0 1135 | },N=r.filter((e=>"string"==typeof e)).concat(["_|0"]),k={variants:[{ 1136 | className:"keyword", 1137 | match:a(...r.filter((e=>"string"!=typeof e)).concat(u).map(i),...c)}]},B={ 1138 | $pattern:a(/\b\w+/,/#\w+/),keyword:N.concat(m),literal:o},S=[v,C,k],D=[{ 1139 | match:t(/\./,a(...p)),relevance:0},{className:"built_in", 1140 | match:t(/\b/,a(...p),/(?=\()/)}],_={match:/->/,relevance:0},M=[_,{ 1141 | className:"operator",relevance:0,variants:[{match:b},{match:`\\.(\\.|${F})+`}] 1142 | }],x="([0-9]_*)+",$="([0-9a-fA-F]_*)+",L={className:"number",relevance:0, 1143 | variants:[{match:`\\b(${x})(\\.(${x}))?([eE][+-]?(${x}))?\\b`},{ 1144 | match:`\\b0x(${$})(\\.(${$}))?([pP][+-]?(${x}))?\\b`},{match:/\b0o([0-7]_*)+\b/ 1145 | },{match:/\b0b([01]_*)+\b/}]},I=(e="")=>({className:"subst",variants:[{ 1146 | match:t(/\\/,e,/[0\\tnr"']/)},{match:t(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}] 1147 | }),O=(e="")=>({className:"subst",match:t(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/) 1148 | }),P=(e="")=>({className:"subst",label:"interpol",begin:t(/\\/,e,/\(/),end:/\)/ 1149 | }),T=(e="")=>({begin:t(e,/"""/),end:t(/"""/,e),contains:[I(e),O(e),P(e)] 1150 | }),K=(e="")=>({begin:t(e,/"/),end:t(/"/,e),contains:[I(e),P(e)]}),j={ 1151 | className:"string", 1152 | variants:[T(),T("#"),T("##"),T("###"),K(),K("#"),K("##"),K("###")] 1153 | },z=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0, 1154 | contains:[e.BACKSLASH_ESCAPE]}],q={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//, 1155 | contains:z},U=e=>{const n=t(e,/\//),a=t(/\//,e);return{begin:n,end:a, 1156 | contains:[...z,{scope:"comment",begin:`#(?!.*${a})`,end:/$/}]}},Z={ 1157 | scope:"regexp",variants:[U("###"),U("##"),U("#"),q]},V={match:t(/`/,w,/`/) 1158 | },W=[V,{className:"variable",match:/\$\d+/},{className:"variable", 1159 | match:`\\$${f}+`}],G=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{ 1160 | contains:[{begin:/\(/,end:/\)/,keywords:E,contains:[...M,L,j]}]}},{ 1161 | scope:"keyword",match:t(/@/,a(...y))},{scope:"meta",match:t(/@/,w)}],H={ 1162 | match:n(/\b[A-Z]/),relevance:0,contains:[{className:"type", 1163 | match:t(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,f,"+") 1164 | },{className:"type",match:g,relevance:0},{match:/[?!]+/,relevance:0},{ 1165 | match:/\.\.\./,relevance:0},{match:t(/\s+&\s+/,n(g)),relevance:0}]},R={ 1166 | begin://,keywords:B,contains:[...A,...S,...G,_,H]};H.contains.push(R) 1167 | ;const X={begin:/\(/,end:/\)/,relevance:0,keywords:B,contains:["self",{ 1168 | match:t(w,/\s*:/),keywords:"_|0",relevance:0 1169 | },...A,Z,...S,...D,...M,L,j,...W,...G,H]},J={begin://, 1170 | keywords:"repeat each",contains:[...A,H]},Q={begin:/\(/,end:/\)/,keywords:B, 1171 | contains:[{begin:a(n(t(w,/\s*:/)),n(t(w,/\s+/,w,/\s*:/))),end:/:/,relevance:0, 1172 | contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:w}] 1173 | },...A,...S,...M,L,j,...G,H,X],endsParent:!0,illegal:/["']/},Y={ 1174 | match:[/(func|macro)/,/\s+/,a(V.match,w,b)],className:{1:"keyword", 1175 | 3:"title.function"},contains:[J,Q,d],illegal:[/\[/,/%/]},ee={ 1176 | match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, 1177 | contains:[J,Q,d],illegal:/\[|%/},ne={match:[/operator/,/\s+/,b],className:{ 1178 | 1:"keyword",3:"title"}},te={begin:[/precedencegroup/,/\s+/,g],className:{ 1179 | 1:"keyword",3:"title"},contains:[H],keywords:[...l,...o],end:/}/} 1180 | ;for(const e of j.variants){const n=e.contains.find((e=>"interpol"===e.label)) 1181 | ;n.keywords=B;const t=[...S,...D,...M,L,j,...W];n.contains=[...t,{begin:/\(/, 1182 | end:/\)/,contains:["self",...t]}]}return{name:"Swift",keywords:B, 1183 | contains:[...A,Y,ee,{beginKeywords:"struct protocol class extension enum actor", 1184 | end:"\\{",excludeEnd:!0,keywords:B,contains:[e.inherit(e.TITLE_MODE,{ 1185 | className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...S] 1186 | },ne,te,{beginKeywords:"import",end:/$/,contains:[...A],relevance:0 1187 | },Z,...S,...D,...M,L,j,...W,...G,H,X]}}})();hljs.registerLanguage("swift",e) 1188 | })();/*! `typescript` grammar compiled for Highlight.js 11.9.0 */ 1189 | (()=>{var e=(()=>{"use strict" 1190 | ;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],i=[].concat(r,t,s) 1191 | ;function o(o){const l=o.regex,d=e,b={begin:/<[A-Za-z0-9\\._:-]+/, 1192 | end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ 1193 | const a=e[0].length+e.index,t=e.input[a] 1194 | ;if("<"===t||","===t)return void n.ignoreMatch();let s 1195 | ;">"===t&&(((e,{after:n})=>{const a="",$={ 1241 | match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(B)], 1242 | keywords:"async",className:{1:"keyword",3:"title.function"},contains:[R]} 1243 | ;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{ 1244 | PARAMS_CONTAINS:w,CLASS_REFERENCE:k},illegal:/#(?![$_A-z])/, 1245 | contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ 1246 | label:"use_strict",className:"meta",relevance:10, 1247 | begin:/^\s*['"]use (strict|asm)['"]/ 1248 | },o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,p,N,f,_,h,{match:/\$\d+/},y,k,{ 1249 | className:"attr",begin:d+l.lookahead(":"),relevance:0},$,{ 1250 | begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", 1251 | keywords:"return throw case",relevance:0,contains:[h,o.REGEXP_MODE,{ 1252 | className:"function",begin:B,returnBegin:!0,end:"\\s*=>",contains:[{ 1253 | className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{ 1254 | className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, 1255 | excludeEnd:!0,keywords:g,contains:w}]}]},{begin:/,/,relevance:0},{match:/\s+/, 1256 | relevance:0},{variants:[{begin:"<>",end:""},{ 1257 | match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:b.begin, 1258 | "on:begin":b.isTrulyOpeningTag,end:b.end}],subLanguage:"xml",contains:[{ 1259 | begin:b.begin,end:b.end,skip:!0,contains:["self"]}]}]},O,{ 1260 | beginKeywords:"while if switch catch for"},{ 1261 | begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", 1262 | returnBegin:!0,label:"func.def",contains:[R,o.inherit(o.TITLE_MODE,{begin:d, 1263 | className:"title.function"})]},{match:/\.\.\./,relevance:0},T,{match:"\\$"+d, 1264 | relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, 1265 | contains:[R]},C,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, 1266 | className:"variable.constant"},x,M,{match:/\$[(.]/}]}}return t=>{ 1267 | const s=o(t),r=e,l=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],d={ 1268 | beginKeywords:"namespace",end:/\{/,excludeEnd:!0, 1269 | contains:[s.exports.CLASS_REFERENCE]},b={beginKeywords:"interface",end:/\{/, 1270 | excludeEnd:!0,keywords:{keyword:"interface extends",built_in:l}, 1271 | contains:[s.exports.CLASS_REFERENCE]},g={$pattern:e, 1272 | keyword:n.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]), 1273 | literal:a,built_in:i.concat(l),"variable.language":c},u={className:"meta", 1274 | begin:"@"+r},m=(e,n,a)=>{const t=e.contains.findIndex((e=>e.label===n)) 1275 | ;if(-1===t)throw Error("can not find mode to replace");e.contains.splice(t,1,a)} 1276 | ;return Object.assign(s.keywords,g), 1277 | s.exports.PARAMS_CONTAINS.push(u),s.contains=s.contains.concat([u,d,b]), 1278 | m(s,"shebang",t.SHEBANG()),m(s,"use_strict",{className:"meta",relevance:10, 1279 | begin:/^\s*['"]use strict['"]/ 1280 | }),s.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(s,{ 1281 | name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),s}})() 1282 | ;hljs.registerLanguage("typescript",e)})();/*! `vbnet` grammar compiled for Highlight.js 11.9.0 */ 1283 | (()=>{var e=(()=>{"use strict";return e=>{ 1284 | const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,s=/\d{1,2}(:\d{1,2}){1,2}/,r={ 1285 | className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{ 1286 | begin:n.concat(/# */,s,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{ 1287 | begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,s),/ *#/)}] 1288 | },l=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}] 1289 | }),o=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]}) 1290 | ;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0, 1291 | classNameAliases:{label:"symbol"},keywords:{ 1292 | keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", 1293 | built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", 1294 | type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", 1295 | literal:"true false nothing"}, 1296 | illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ 1297 | className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, 1298 | end:/"/,illegal:/\n/,contains:[{begin:/""/}]},r,{className:"number",relevance:0, 1299 | variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ 1300 | },{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ 1301 | begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ 1302 | className:"label",begin:/^\w+:/},l,o,{className:"meta", 1303 | begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, 1304 | end:/$/,keywords:{ 1305 | keyword:"const disable else elseif enable end externalsource if region then"}, 1306 | contains:[o]}]}}})();hljs.registerLanguage("vbnet",e)})();/*! `xml` grammar compiled for Highlight.js 11.9.0 */ 1307 | (()=>{var e=(()=>{"use strict";return e=>{ 1308 | const a=e.regex,n=a.concat(/[\p{L}_]/u,a.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s={ 1309 | className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},t={begin:/\s/, 1310 | contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] 1311 | },i=e.inherit(t,{begin:/\(/,end:/\)/}),c=e.inherit(e.APOS_STRING_MODE,{ 1312 | className:"string"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),r={ 1313 | endsWithParent:!0,illegal:/`]+/}]}]}]};return{ 1317 | name:"HTML, XML", 1318 | aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], 1319 | case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[t,l,c,i,{begin:/\[/,end:/\]/,contains:[{ 1321 | className:"meta",begin://,contains:[t,i,l,c]}]}] 1322 | },e.COMMENT(//,{relevance:10}),{begin://, 1323 | relevance:10},s,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/, 1324 | relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag", 1325 | begin:/)/,end:/>/,keywords:{name:"style"},contains:[r],starts:{ 1326 | end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", 1327 | begin:/)/,end:/>/,keywords:{name:"script"},contains:[r],starts:{ 1328 | end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ 1329 | className:"tag",begin:/<>|<\/>/},{className:"tag", 1330 | begin:a.concat(//,/>/,/\s/)))), 1331 | end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:r}]},{ 1332 | className:"tag",begin:a.concat(/<\//,a.lookahead(a.concat(n,/>/))),contains:[{ 1333 | className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}} 1334 | })();hljs.registerLanguage("xml",e)})();/*! `yaml` grammar compiled for Highlight.js 11.9.0 */ 1335 | (()=>{var e=(()=>{"use strict";return e=>{ 1336 | const n="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={ 1337 | className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/ 1338 | },{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable", 1339 | variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(s,{ 1340 | variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={ 1341 | end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t={begin:/\{/, 1342 | end:/\}/,contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]", 1343 | contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{ 1344 | begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{ 1345 | begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$", 1346 | relevance:10},{className:"string", 1347 | begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ 1348 | begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, 1349 | relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type", 1350 | begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a 1351 | },{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", 1352 | begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", 1353 | relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ 1354 | className:"number", 1355 | begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" 1356 | },{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},t,g,s],r=[...b] 1357 | ;return r.pop(),r.push(i),l.contains=r,{name:"YAML",case_insensitive:!0, 1358 | aliases:["yml"],contains:b}}})();hljs.registerLanguage("yaml",e)})(); --------------------------------------------------------------------------------