diff --git a/_config.yml b/_config.yml index 03a6d9cb37..9571864858 100644 --- a/_config.yml +++ b/_config.yml @@ -5,10 +5,12 @@ kramdown: auto_ids: true input: GFM hard_wrap: false + syntax_highlighter_opts: + disable : true baseurl: -highlighter: rouge +highlighter: none liquid: error_mode: strict diff --git a/_docs/setup/kubernetes/sidecar-injection.md b/_docs/setup/kubernetes/sidecar-injection.md index ed5725865a..a9f08f0c64 100644 --- a/_docs/setup/kubernetes/sidecar-injection.md +++ b/_docs/setup/kubernetes/sidecar-injection.md @@ -115,7 +115,7 @@ Verify that the sidecar has been injected into the deployment. ```bash kubectl get deployment sleep -o wide ``` -```bash +```xxx NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR sleep 1 1 1 1 2h sleep,istio-proxy tutum/curl,unknown/proxy:unknown app=sleep ``` @@ -129,7 +129,7 @@ Sidecars can be automatically added to applicable Kubernetes pods using a kubectl api-versions | grep admissionregistration ``` -```bash +```xxx admissionregistration.k8s.io/v1beta1 ``` diff --git a/_layouts/base.html b/_layouts/base.html index 335b1bdfa3..b904d7b80a 100644 --- a/_layouts/base.html +++ b/_layouts/base.html @@ -100,5 +100,6 @@ layout: compress + diff --git a/_sass/base/_common.scss b/_sass/base/_common.scss index 0207ede53f..02afe687d8 100644 --- a/_sass/base/_common.scss +++ b/_sass/base/_common.scss @@ -137,17 +137,35 @@ thead+tbody tr:first-child td:last-child { border-radius: 0; } +code { + color: $textCodeColor; + font-size: 80%; + font-weight: $textCodeWeight; + word-break: normal; +} + pre { margin: 1em; max-height: 31em; - border: 1px solid $codeBlockBorderColor; - border-left: 5px solid $codeBlockBorderColor; + border: 1px solid $preBlockBorderColor; + border-left: 5px solid $preBlockBorderColor; border-radius: 4px; - box-shadow: 3px 3px 8px $codeBlockShadowColor; + box-shadow: 3px 3px 8px $preBlockShadowColor; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; + background: $preBlockBackgroundColor; code { display: block; padding: .5em; + color: $textColor; } @media print { @@ -322,13 +340,6 @@ blockquote { border-radius: 4px 4px 4px 4px; } -code { - color: $textCodeColor; - font-size: 80%; - font-weight: $textCodeWeight; - word-break: normal; -} - .spacer { height: .1rem; diff --git a/_sass/themes/_dark.scss b/_sass/themes/_dark.scss index 6c5c4625ac..09f546aa0a 100644 --- a/_sass/themes/_dark.scss +++ b/_sass/themes/_dark.scss @@ -27,8 +27,9 @@ $dividerBarColor: rgba(255, 255, 255, .1); $glossaryHeaderColor: lighten($gray, 35%); $blockQuoteBackgroundColor: $dark-gray; $deprecatedBackgroundColor: silver; -$codeBlockShadowColor: #777777; -$codeBlockBorderColor: #777777; +$preBlockShadowColor: #777777; +$preBlockBorderColor: #777777; +$preBlockBackgroundColor: #2d2d2d; $boxBorderColor: $textColor; $headerLightShadowColor: rgba(0, 0, 0, .14); diff --git a/_sass/themes/_dark_syntax.scss b/_sass/themes/_dark_syntax.scss index 44fb82edb3..1d4ff2fb42 100644 --- a/_sass/themes/_dark_syntax.scss +++ b/_sass/themes/_dark_syntax.scss @@ -1,60 +1,82 @@ -.highlight { background: $backgroundColor; color: $textColor; } -.highlight .c { color: #999988; font-style: italic } /* Comment */ -.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -.highlight .k { font-weight: bold } /* Keyword */ -.highlight .o { font-weight: bold } /* Operator */ -.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ -.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ -.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #aa0000 } /* Generic.Error */ -.highlight .gh { color: #999999 } /* Generic.Heading */ -.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ -.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #555555 } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ -.highlight .gt { color: #aa0000 } /* Generic.Traceback */ -.highlight .kc { font-weight: bold } /* Keyword.Constant */ -.highlight .kd { font-weight: bold } /* Keyword.Declaration */ -.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #009999 } /* Literal.Number */ -.highlight .s { color: #ff4455 } /* Literal.String */ -.highlight .na { color: #00e0e0 } /* Name.Attribute */ -.highlight .nb { color: #0086B3 } /* Name.Builtin */ -.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ -.highlight .no { color: #00e0e0 } /* Name.Constant */ -.highlight .ni { color: #e000e0 } /* Name.Entity */ -.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ -.highlight .nn { color: #555555 } /* Name.Namespace */ -.highlight .nt { color: #8080e0 } /* Name.Tag */ -.highlight .nv { color: #00e0e0 } /* Name.Variable */ -.highlight .ow { font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #009999 } /* Literal.Number.Float */ -.highlight .mh { color: #009999 } /* Literal.Number.Hex */ -.highlight .mi { color: #009999 } /* Literal.Number.Integer */ -.highlight .mo { color: #009999 } /* Literal.Number.Oct */ -.highlight .sb { color: #ff4455 } /* Literal.String.Backtick */ -.highlight .sc { color: #ff4455 } /* Literal.String.Char */ -.highlight .sd { color: #ff4455 } /* Literal.String.Doc */ -.highlight .s2 { color: #ff4455 } /* Literal.String.Double */ -.highlight .se { color: #ff4455 } /* Literal.String.Escape */ -.highlight .sh { color: #ff4455 } /* Literal.String.Heredoc */ -.highlight .si { color: #ff4455 } /* Literal.String.Interpol */ -.highlight .sx { color: #ff4455 } /* Literal.String.Other */ -.highlight .sr { color: #009926 } /* Literal.String.Regex */ -.highlight .s1 { color: #ff4455 } /* Literal.String.Single */ -.highlight .ss { color: #990073 } /* Literal.String.Symbol */ -.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #00e0e0 } /* Name.Variable.Class */ -.highlight .vg { color: #00e0e0 } /* Name.Variable.Global */ -.highlight .vi { color: #00e0e0 } /* Name.Variable.Instance */ -.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ +/* PrismJS 1.14.0 +http://prismjs.com/download.html#themes=prism-tomorrow&languages=clike+javascript+bash+docker+go+java+protobuf+python+yaml */ +/** + * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML + * Based on https://github.com/chriskempson/tomorrow-theme + * @author Rose Pritchard + */ + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #999; +} + +.token.punctuation { + color: #ccc; +} + +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted { + color: #e2777a; +} + +.token.function-name { + color: #6196cc; +} + +.token.boolean, +.token.number, +.token.function { + color: #f08d49; +} + +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: #f8c555; +} + +.token.selector, +.token.important, +.token.atrule, +.token.keyword, +.token.builtin { + color: #cc99cd; +} + +.token.string, +.token.char, +.token.attr-value, +.token.regex, +.token.variable { + color: #7ec699; +} + +.token.operator, +.token.entity, +.token.url { + color: #67cdcc; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.inserted { + color: green; +} + diff --git a/_sass/themes/_light.scss b/_sass/themes/_light.scss index 1c1c97de91..47fdbda05b 100644 --- a/_sass/themes/_light.scss +++ b/_sass/themes/_light.scss @@ -27,8 +27,9 @@ $dividerBarColor: rgba(0, 0, 0, .1); $glossaryHeaderColor: lighten($gray, 35%); $blockQuoteBackgroundColor: $light-gray; $deprecatedBackgroundColor: silver; -$codeBlockShadowColor: #a7a7a7; -$codeBlockBorderColor: #dddddd; +$preBlockShadowColor: #a7a7a7; +$preBlockBorderColor: #dddddd; +$preBlockBackgroundColor: $backgroundColor; $boxBorderColor: $secondBrandColor; $headerLightShadowColor: rgba(0, 0, 0, .14); diff --git a/_sass/themes/_light_syntax.scss b/_sass/themes/_light_syntax.scss index 2774b76492..124b779b68 100644 --- a/_sass/themes/_light_syntax.scss +++ b/_sass/themes/_light_syntax.scss @@ -1,60 +1,80 @@ -.highlight { background: #ffffff; } -.highlight .c { color: #999988; font-style: italic } /* Comment */ -.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -.highlight .k { font-weight: bold } /* Keyword */ -.highlight .o { font-weight: bold } /* Operator */ -.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ -.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ -.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #aa0000 } /* Generic.Error */ -.highlight .gh { color: #999999 } /* Generic.Heading */ -.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ -.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #555555 } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ -.highlight .gt { color: #aa0000 } /* Generic.Traceback */ -.highlight .kc { font-weight: bold } /* Keyword.Constant */ -.highlight .kd { font-weight: bold } /* Keyword.Declaration */ -.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #009999 } /* Literal.Number */ -.highlight .s { color: #d14 } /* Literal.String */ -.highlight .na { color: #008080 } /* Name.Attribute */ -.highlight .nb { color: #0086B3 } /* Name.Builtin */ -.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ -.highlight .no { color: #008080 } /* Name.Constant */ -.highlight .ni { color: #800080 } /* Name.Entity */ -.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ -.highlight .nn { color: #555555 } /* Name.Namespace */ -.highlight .nt { color: #000080 } /* Name.Tag */ -.highlight .nv { color: #008080 } /* Name.Variable */ -.highlight .ow { font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #009999 } /* Literal.Number.Float */ -.highlight .mh { color: #009999 } /* Literal.Number.Hex */ -.highlight .mi { color: #009999 } /* Literal.Number.Integer */ -.highlight .mo { color: #009999 } /* Literal.Number.Oct */ -.highlight .sb { color: #d14 } /* Literal.String.Backtick */ -.highlight .sc { color: #d14 } /* Literal.String.Char */ -.highlight .sd { color: #d14 } /* Literal.String.Doc */ -.highlight .s2 { color: #d14 } /* Literal.String.Double */ -.highlight .se { color: #d14 } /* Literal.String.Escape */ -.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ -.highlight .si { color: #d14 } /* Literal.String.Interpol */ -.highlight .sx { color: #d14 } /* Literal.String.Other */ -.highlight .sr { color: #009926 } /* Literal.String.Regex */ -.highlight .s1 { color: #d14 } /* Literal.String.Single */ -.highlight .ss { color: #990073 } /* Literal.String.Symbol */ -.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #008080 } /* Name.Variable.Class */ -.highlight .vg { color: #008080 } /* Name.Variable.Global */ -.highlight .vi { color: #008080 } /* Name.Variable.Instance */ -.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ +/* PrismJS 1.14.0 +http://prismjs.com/download.html#themes=prism&languages=clike+javascript+bash+docker+go+java+protobuf+python+yaml */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + diff --git a/js/misc.js b/js/misc.js index 4e2fb0e4ab..dca4f1b1fa 100644 --- a/js/misc.js +++ b/js/misc.js @@ -97,202 +97,227 @@ $(function ($) { }); }(jQuery)); -// Apply a bunch of systematic modification to the DOM of all pages. -// Ideally, this stuff could be handled offline as part of preparing the -// HTML, but alas our current toolchain won't allow that in a clean/simple -// way. -function patchDOM() { - // Add a Copy button to all PRE blocks - function attachCopyButtons() { - var pre = document.getElementsByTagName('PRE'); - for (var i = 0; i < pre.length; i++) { - var button = document.createElement("BUTTON"); - button.title = "Copy to clipboard"; - button.className = "copy copy-hide"; - button.innerText = "Copy"; - button.setAttribute("aria-label", "Copy to clipboard"); - - var parent = pre[i].parentElement; - if (parent.tagName == "DIV") { - // This is the case for HTML produced from markdown through Jekyll - parent.appendChild(button); - } else { - // This is the case for HTML produced by protoc-gen-docs from proto sources - // we hackily create a DIV on the fly to make this case look like what we get - // from Jekyll - var div = document.createElement("DIV") - div.className = "highlight" - parent.insertBefore(div, pre[i]) - div.appendChild(pre[i]) - div.appendChild(button) - } - } - - var copyCode = new Clipboard('button.copy', { - target: function (trigger) { - return trigger.previousElementSibling; - } - }); - - // On success: - // - Change the "Copy" text to "Done". - // - Swap it to "Copy" in 2s. - - copyCode.on('success', function (event) { - event.clearSelection(); - event.trigger.textContent = 'Done'; - window.setTimeout(function () { - event.trigger.textContent = 'Copy'; - }, 2000); - }); - - // On error (Safari): - // - Change to "Not supported" - // - Swap it to "Copy" in 2s. - - copyCode.on('error', function (event) { - event.trigger.textContent = 'Not supported'; - window.setTimeout(function () { - event.trigger.textContent = 'Copy'; - }, 5000); - }); - } - - function attachLink(node) { - var i = document.createElement("i"); - i.className = "fa fa-link"; - - var anchor = document.createElement("a"); - anchor.className = "header-link"; - anchor.href = "#" + node.id; - anchor.setAttribute("aria-hidden", "true"); - anchor.appendChild(i); - - node.appendChild(anchor); - } - - // Add a link icon next to each header so people can easily get bookmarks to headers - function attachLinksToHeaders() { - for (var level = 1; level <= 6; level++) { - var headers = document.getElementsByTagName("h" + level); - for (var i = 0; i < headers.length; i++) { - var header = headers[i] - if (header.id !== "") { - attachLink(header); - } - } - } - } - - // Add a link icon next to each defined term so people can easily get bookmarks to them in the glossary - function attachLinksToDefinedTerms() { - var terms = document.getElementsByTagName("dt"); - for (var i = 0; i < terms.length; i++) { - var term = terms[i] - if (term.id !== "") { - attachLink(term); - } - } - } - - // Make it so each link outside of the current domain opens up in a different window - function makeOutsideLinksOpenInTabs() { - var links = document.getElementsByTagName("a"); - for (var i = 0; i < links.length; i++) { - var link = links[i]; - if (link.hostname && link.hostname != location.hostname) { - link.setAttribute("target", "_blank") - } - } - } - - // Load the content of any externally-hosted PRE blocks - function loadExternalPreBlocks() { - - function fetchFile(elem, url) { - fetch(url).then(response => response.text()).then(data => { - elem.firstChild.innerText = data; - }); - } - - var pre = document.getElementsByTagName('PRE'); - for (var i = 0; i < pre.length; i++) { - if (pre[i].hasAttribute("data-src")) { - fetchFile(pre[i], pre[i].getAttribute("data-src")) - } - } - } - - function createEndnotes() { - var notes = document.getElementById("endnotes"); - if (notes == undefined) { - return; - } - - // look for anchors in the main section of the doc only (skip headers, footers, tocs, nav bars, etc) - var main = document.getElementsByTagName("main")[0]; - var links = main.getElementsByTagName("a"); - var count = 1; - for (var i = 0; i < links.length; i++) { - var link = links[i]; - if (link.pathname == location.pathname) { - // skip links on the current page - continue; - } - - if (link.pathname.endsWith("/") && link.hash != "") { - // skip links on the current page - continue; - } - - if (link.parentElement.tagName == "FIGURE") { - // skip links inside figures - continue; - } - - // add the superscript reference - link.insertAdjacentHTML("afterend", "" + count + ""); - - // and add a list entry for the link - var li = document.createElement("li"); - li.innerText = link.href; - notes.appendChild(li); - count++; - } - } - - attachCopyButtons(); - attachLinksToHeaders(); - attachLinksToDefinedTerms(); - makeOutsideLinksOpenInTabs(); - loadExternalPreBlocks(); - createEndnotes(); +// Scroll the document to the top +function scrollToTop() { + document.body.scrollTop = 0; // For Safari + document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera } -// initialized after the DOM has been loaded +// initialized after the DOM has been loaded by getDOMTopology var scrollToTopButton; var tocLinks; var tocHeadings; -// discover a few DOM elements up front so we don't need to do it a zillion times for the life of the page -function getDOMTopology() { - scrollToTopButton = document.getElementById("scroll-to-top"); +// post-processing we do once the DOM has loaded +function handleDOMLoaded() { - var toc = document.getElementById("toc"); - if (toc != undefined) { - tocLinks = toc.getElementsByTagName("A"); - tocHeadings = new Array(tocLinks.length); + // Apply a bunch of systematic modification to the DOM of all pages. + // Ideally, this stuff could be handled offline as part of preparing the + // HTML, but alas our current toolchain won't allow that in a clean/simple + // way. + function patchDOM() { + // Add a Copy button to all PRE blocks + function attachCopyButtons() { + var pre = document.getElementsByTagName('PRE'); + for (var i = 0; i < pre.length; i++) { + var button = document.createElement("BUTTON"); + button.title = "Copy to clipboard"; + button.className = "copy copy-hide"; + button.innerText = "Copy"; + button.setAttribute("aria-label", "Copy to clipboard"); - for (var i = 0; i < tocLinks.length; i++) { - tocHeadings[i] = document.getElementById(tocLinks[i].hash.substring(1)); + var parent = pre[i].parentElement; + if (parent.tagName == "DIV") { + // This is the case for HTML produced from markdown through Jekyll + parent.appendChild(button); + } else { + // This is the case for HTML produced by protoc-gen-docs from proto sources + // we hackily create a DIV on the fly to make this case look like what we get + // from Jekyll + var div = document.createElement("DIV") + div.className = "highlight" + parent.insertBefore(div, pre[i]) + div.appendChild(pre[i]) + div.appendChild(button) + } + + // apply syntax highlighting + Prism.highlightElement(pre[i].firstChild, false) + } + + var copyCode = new Clipboard('button.copy', { + target: function (trigger) { + return trigger.previousElementSibling; + } + }); + + // On success: + // - Change the "Copy" text to "Done". + // - Swap it to "Copy" in 2s. + + copyCode.on('success', function (event) { + event.clearSelection(); + event.trigger.textContent = 'Done'; + window.setTimeout(function () { + event.trigger.textContent = 'Copy'; + }, 2000); + }); + + // On error (Safari): + // - Change to "Not supported" + // - Swap it to "Copy" in 2s. + + copyCode.on('error', function (event) { + event.trigger.textContent = 'Not supported'; + window.setTimeout(function () { + event.trigger.textContent = 'Copy'; + }, 5000); + }); + } + + function applySyntaxColoring() { + var pre = document.getElementsByTagName('PRE'); + for (var i = 0; i < pre.length; i++) { + Prism.highlightElement(pre[i].firstChild, false) + } + } + + function attachLink(node) { + var i = document.createElement("i"); + i.className = "fa fa-link"; + + var anchor = document.createElement("a"); + anchor.className = "header-link"; + anchor.href = "#" + node.id; + anchor.setAttribute("aria-hidden", "true"); + anchor.appendChild(i); + + node.appendChild(anchor); + } + + // Add a link icon next to each header so people can easily get bookmarks to headers + function attachLinksToHeaders() { + for (var level = 1; level <= 6; level++) { + var headers = document.getElementsByTagName("h" + level); + for (var i = 0; i < headers.length; i++) { + var header = headers[i] + if (header.id !== "") { + attachLink(header); + } + } + } + } + + // Add a link icon next to each defined term so people can easily get bookmarks to them in the glossary + function attachLinksToDefinedTerms() { + var terms = document.getElementsByTagName("dt"); + for (var i = 0; i < terms.length; i++) { + var term = terms[i] + if (term.id !== "") { + attachLink(term); + } + } + } + + // Make it so each link outside of the current domain opens up in a different window + function makeOutsideLinksOpenInTabs() { + var links = document.getElementsByTagName("a"); + for (var i = 0; i < links.length; i++) { + var link = links[i]; + if (link.hostname && link.hostname != location.hostname) { + link.setAttribute("target", "_blank") + } + } + } + + // Load the content of any externally-hosted PRE blocks + function loadExternalPreBlocks() { + + function fetchFile(elem, url) { + fetch(url).then(response => response.text()).then(data => { + elem.firstChild.innerText = data; + }); + } + + var pre = document.getElementsByTagName('PRE'); + for (var i = 0; i < pre.length; i++) { + if (pre[i].hasAttribute("data-src")) { + fetchFile(pre[i], pre[i].getAttribute("data-src")) + } + } + } + + function createEndnotes() { + var notes = document.getElementById("endnotes"); + if (notes == undefined) { + return; + } + + // look for anchors in the main section of the doc only (skip headers, footers, tocs, nav bars, etc) + var main = document.getElementsByTagName("main")[0]; + var links = main.getElementsByTagName("a"); + var count = 1; + for (var i = 0; i < links.length; i++) { + var link = links[i]; + if (link.pathname == location.pathname) { + // skip links on the current page + continue; + } + + if (link.pathname.endsWith("/") && link.hash != "") { + // skip links on the current page + continue; + } + + if (link.parentElement.tagName == "FIGURE") { + // skip links inside figures + continue; + } + + // add the superscript reference + link.insertAdjacentHTML("afterend", "" + count + ""); + + // and add a list entry for the link + var li = document.createElement("li"); + li.innerText = link.href; + notes.appendChild(li); + count++; + } + } + + attachCopyButtons(); + applySyntaxColoring(); + attachLinksToHeaders(); + attachLinksToDefinedTerms(); + makeOutsideLinksOpenInTabs(); + loadExternalPreBlocks(); + createEndnotes(); + } + + // discover a few DOM elements up front so we don't need to do it a zillion times for the life of the page + function getDOMTopology() { + scrollToTopButton = document.getElementById("scroll-to-top"); + + var toc = document.getElementById("toc"); + if (toc != undefined) { + tocLinks = toc.getElementsByTagName("A"); + tocHeadings = new Array(tocLinks.length); + + for (var i = 0; i < tocLinks.length; i++) { + tocHeadings[i] = document.getElementById(tocLinks[i].hash.substring(1)); + } } } + patchDOM(); + getDOMTopology(); + // one forced call here to make sure everything looks right - handleScroll(); + handlePageScroll(); } -function handleScroll() { +// What we do when the user scrolls the page +function handlePageScroll() { // Based on the scroll position, make the "scroll to top" button visible or not function controlScrollToTopButton() { if (scrollToTopButton) { @@ -346,12 +371,5 @@ function handleScroll() { controlTOCActivation(); } -// Scroll the document to the top -function scrollToTop() { - document.body.scrollTop = 0; // For Safari - document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera -} - -document.addEventListener("DOMContentLoaded", patchDOM); -document.addEventListener("DOMContentLoaded", getDOMTopology); -window.addEventListener("scroll", handleScroll); +document.addEventListener("DOMContentLoaded", handleDOMLoaded); +window.addEventListener("scroll", handlePageScroll); diff --git a/js/misc.min.js b/js/misc.min.js index 2055810fbe..ade64a0b49 100644 --- a/js/misc.min.js +++ b/js/misc.min.js @@ -2,4 +2,4 @@ --- {% include home.html %} -'use strict';$(function(a){function b(){var d=a('#search_form'),e=a('#search_textbox'),f=a('#navbar-links');d.removeClass('active'),f.addClass('active'),e.val(''),e.removeClass('grow')}function c(){var d=a('#search_form'),e=a('#search_textbox'),f=a('#navbar-links');d.addClass('active'),f.removeClass('active'),e.addClass('grow'),e.focus()}a('body').on('keyup',function(d){27==d.which&&b()}),a('#search_show').on('click',function(d){d.preventDefault(),c()}),a('#search_close').on('click',function(d){d.preventDefault(),b()}),a('#search_form').submit(function(d){d.preventDefault();var e=a('#search_textbox'),f='{{home}}/search.html?q='+e.val();b(),window.location.assign(f)}),a(document).ready(function(){a('[data-toggle="offcanvas"]').on('click',function(){a('.row-offcanvas').toggleClass('active'),a(this).children('i.fa').toggleClass('fa-flip-horizontal')}),a(document).on('click','.tree-toggle',function(){a(this).children('i.fa').toggleClass('fa-caret-right'),a(this).children('i.fa').toggleClass('fa-caret-down'),a(this).parent().children('ul.tree').toggle(200)}),a(document).on('mouseenter','pre',function(){a(this).next().toggleClass('copy-show',!0),a(this).next().toggleClass('copy-hide',!1)}),a(document).on('mouseleave','pre',function(){a(this).next().toggleClass('copy-show',!1),a(this).next().toggleClass('copy-hide',!0)}),a(document).on('mouseenter','button.copy',function(){a(this).toggleClass('copy-show',!0),a(this).toggleClass('copy-hide',!1)}),a(document).on('mouseleave','button.copy',function(){a(this).toggleClass('copy-show',!1),a(this).toggleClass('copy-hide',!0)})})}(jQuery));function patchDOM(){function b(h){var j=document.createElement('i');j.className='fa fa-link';var k=document.createElement('a');k.className='header-link',k.href='#'+h.id,k.setAttribute('aria-hidden','true'),k.appendChild(j),h.appendChild(k)}(function(){for(var k,h=document.getElementsByTagName('PRE'),j=0;j=h;h++){j=document.getElementsByTagName('h'+h);for(var l,k=0;kn.text()).then(n=>{l.firstChild.innerText=n})}for(var j=document.getElementsByTagName('PRE'),k=0;k'+l+'');var o=document.createElement('li');o.innerText=n.href,h.appendChild(o),l++}}()}var scrollToTopButton,tocLinks,tocHeadings;function getDOMTopology(){scrollToTopButton=document.getElementById('scroll-to-top');var a=document.getElementById('toc');if(a!=void 0){tocLinks=a.getElementsByTagName('A'),tocHeadings=Array(tocLinks.length);for(var b=0;bh.top&&h.top>f&&(e=g,f=h.top)),tocLinks[g].classList.remove('current');0<=c?tocLinks[c].classList.add('current'):0<=e&&tocLinks[e].classList.add('current')}}()}function scrollToTop(){document.body.scrollTop=0,document.documentElement.scrollTop=0}document.addEventListener('DOMContentLoaded',patchDOM),document.addEventListener('DOMContentLoaded',getDOMTopology),window.addEventListener('scroll',handleScroll); +'use strict';$(function(a){function b(){var d=a('#search_form'),e=a('#search_textbox'),f=a('#navbar-links');d.removeClass('active'),f.addClass('active'),e.val(''),e.removeClass('grow')}function c(){var d=a('#search_form'),e=a('#search_textbox'),f=a('#navbar-links');d.addClass('active'),f.removeClass('active'),e.addClass('grow'),e.focus()}a('body').on('keyup',function(d){27==d.which&&b()}),a('#search_show').on('click',function(d){d.preventDefault(),c()}),a('#search_close').on('click',function(d){d.preventDefault(),b()}),a('#search_form').submit(function(d){d.preventDefault();var e=a('#search_textbox'),f='{{home}}/search.html?q='+e.val();b(),window.location.assign(f)}),a(document).ready(function(){a('[data-toggle="offcanvas"]').on('click',function(){a('.row-offcanvas').toggleClass('active'),a(this).children('i.fa').toggleClass('fa-flip-horizontal')}),a(document).on('click','.tree-toggle',function(){a(this).children('i.fa').toggleClass('fa-caret-right'),a(this).children('i.fa').toggleClass('fa-caret-down'),a(this).parent().children('ul.tree').toggle(200)}),a(document).on('mouseenter','pre',function(){a(this).next().toggleClass('copy-show',!0),a(this).next().toggleClass('copy-hide',!1)}),a(document).on('mouseleave','pre',function(){a(this).next().toggleClass('copy-show',!1),a(this).next().toggleClass('copy-hide',!0)}),a(document).on('mouseenter','button.copy',function(){a(this).toggleClass('copy-show',!0),a(this).toggleClass('copy-hide',!1)}),a(document).on('mouseleave','button.copy',function(){a(this).toggleClass('copy-show',!1),a(this).toggleClass('copy-hide',!0)})})}(jQuery));function scrollToTop(){document.body.scrollTop=0,document.documentElement.scrollTop=0}var scrollToTopButton,tocLinks,tocHeadings;function handleDOMLoaded(){(function(){function e(l){var m=document.createElement('i');m.className='fa fa-link';var n=document.createElement('a');n.className='header-link',n.href='#'+l.id,n.setAttribute('aria-hidden','true'),n.appendChild(m),l.appendChild(n)}(function(){for(var n,l=document.getElementsByTagName('PRE'),m=0;m=l;l++){m=document.getElementsByTagName('h'+l);for(var o,n=0;nq.text()).then(q=>{o.firstChild.innerText=q})}for(var m=document.getElementsByTagName('PRE'),n=0;n'+o+'');var r=document.createElement('li');r.innerText=q.href,l.appendChild(r),o++}}()})(),function(){scrollToTopButton=document.getElementById('scroll-to-top');var c=document.getElementById('toc');if(c!=void 0){tocLinks=c.getElementsByTagName('A'),tocHeadings=Array(tocLinks.length);for(var d=0;dh.top&&h.top>f&&(e=g,f=h.top)),tocLinks[g].classList.remove('current');0<=c?tocLinks[c].classList.add('current'):0<=e&&tocLinks[e].classList.add('current')}}()}document.addEventListener('DOMContentLoaded',handleDOMLoaded),window.addEventListener('scroll',handlePageScroll); diff --git a/js/prism.js b/js/prism.js new file mode 100644 index 0000000000..df9db46342 --- /dev/null +++ b/js/prism.js @@ -0,0 +1,870 @@ +/* PrismJS 1.14.0 +http://prismjs.com/download.html#themes=prism&languages=clike+javascript+bash+docker+go+java+protobuf+python+yaml */ +var _self = (typeof window !== 'undefined') + ? window // if in browser + : ( + (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) + ? self // if in worker + : {} // if in node js + ); + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * MIT license http://www.opensource.org/licenses/mit-license.php/ + * @author Lea Verou http://lea.verou.me + */ + +var Prism = (function(){ + +// Private helper vars +var lang = /\blang(?:uage)?-([\w-]+)\b/i; +var uniqueId = 0; + +var _ = _self.Prism = { + manual: _self.Prism && _self.Prism.manual, + disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler, + util: { + encode: function (tokens) { + if (tokens instanceof Token) { + return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias); + } else if (_.util.type(tokens) === 'Array') { + return tokens.map(_.util.encode); + } else { + return tokens.replace(/&/g, '&').replace(/ text.length) { + // Something went terribly wrong, ABORT, ABORT! + return; + } + + if (str instanceof Token) { + continue; + } + + if (greedy && i != strarr.length - 1) { + pattern.lastIndex = pos; + var match = pattern.exec(text); + if (!match) { + break; + } + + var from = match.index + (lookbehind ? match[1].length : 0), + to = match.index + match[0].length, + k = i, + p = pos; + + for (var len = strarr.length; k < len && (p < to || (!strarr[k].type && !strarr[k - 1].greedy)); ++k) { + p += strarr[k].length; + // Move the index i to the element in strarr that is closest to from + if (from >= p) { + ++i; + pos = p; + } + } + + // If strarr[i] is a Token, then the match starts inside another Token, which is invalid + if (strarr[i] instanceof Token) { + continue; + } + + // Number of tokens to delete and replace with the new match + delNum = k - i; + str = text.slice(pos, p); + match.index -= pos; + } else { + pattern.lastIndex = 0; + + var match = pattern.exec(str), + delNum = 1; + } + + if (!match) { + if (oneshot) { + break; + } + + continue; + } + + if(lookbehind) { + lookbehindLength = match[1] ? match[1].length : 0; + } + + var from = match.index + lookbehindLength, + match = match[0].slice(lookbehindLength), + to = from + match.length, + before = str.slice(0, from), + after = str.slice(to); + + var args = [i, delNum]; + + if (before) { + ++i; + pos += before.length; + args.push(before); + } + + var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy); + + args.push(wrapped); + + if (after) { + args.push(after); + } + + Array.prototype.splice.apply(strarr, args); + + if (delNum != 1) + _.matchGrammar(text, strarr, grammar, i, pos, true, token); + + if (oneshot) + break; + } + } + } + }, + + tokenize: function(text, grammar, language) { + var strarr = [text]; + + var rest = grammar.rest; + + if (rest) { + for (var token in rest) { + grammar[token] = rest[token]; + } + + delete grammar.rest; + } + + _.matchGrammar(text, strarr, grammar, 0, 0, false); + + return strarr; + }, + + hooks: { + all: {}, + + add: function (name, callback) { + var hooks = _.hooks.all; + + hooks[name] = hooks[name] || []; + + hooks[name].push(callback); + }, + + run: function (name, env) { + var callbacks = _.hooks.all[name]; + + if (!callbacks || !callbacks.length) { + return; + } + + for (var i=0, callback; callback = callbacks[i++];) { + callback(env); + } + } + } +}; + +var Token = _.Token = function(type, content, alias, matchedStr, greedy) { + this.type = type; + this.content = content; + this.alias = alias; + // Copy of the full string this token was created from + this.length = (matchedStr || "").length|0; + this.greedy = !!greedy; +}; + +Token.stringify = function(o, language, parent) { + if (typeof o == 'string') { + return o; + } + + if (_.util.type(o) === 'Array') { + return o.map(function(element) { + return Token.stringify(element, language, o); + }).join(''); + } + + var env = { + type: o.type, + content: Token.stringify(o.content, language, parent), + tag: 'span', + classes: ['token', o.type], + attributes: {}, + language: language, + parent: parent + }; + + if (o.alias) { + var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias]; + Array.prototype.push.apply(env.classes, aliases); + } + + _.hooks.run('wrap', env); + + var attributes = Object.keys(env.attributes).map(function(name) { + return name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"'; + }).join(' '); + + return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + ''; + +}; + +if (!_self.document) { + if (!_self.addEventListener) { + // in Node.js + return _self.Prism; + } + + if (!_.disableWorkerMessageHandler) { + // In worker + _self.addEventListener('message', function (evt) { + var message = JSON.parse(evt.data), + lang = message.language, + code = message.code, + immediateClose = message.immediateClose; + + _self.postMessage(_.highlight(code, _.languages[lang], lang)); + if (immediateClose) { + _self.close(); + } + }, false); + } + + return _self.Prism; +} + +//Get current script and highlight +var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop(); + +if (script) { + _.filename = script.src; + + if (!_.manual && !script.hasAttribute('data-manual')) { + if(document.readyState !== "loading") { + if (window.requestAnimationFrame) { + window.requestAnimationFrame(_.highlightAll); + } else { + window.setTimeout(_.highlightAll, 16); + } + } + else { + document.addEventListener('DOMContentLoaded', _.highlightAll); + } + } +} + +return _self.Prism; + +})(); + +if (typeof module !== 'undefined' && module.exports) { + module.exports = Prism; +} + +// hack for components to work correctly in node.js +if (typeof global !== 'undefined') { + global.Prism = Prism; +} +; +Prism.languages.clike = { + 'comment': [ + { + pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, + lookbehind: true + }, + { + pattern: /(^|[^\\:])\/\/.*/, + lookbehind: true, + greedy: true + } + ], + 'string': { + pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + greedy: true + }, + 'class-name': { + pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i, + lookbehind: true, + inside: { + punctuation: /[.\\]/ + } + }, + 'keyword': /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, + 'boolean': /\b(?:true|false)\b/, + 'function': /[a-z0-9_]+(?=\()/i, + 'number': /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i, + 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, + 'punctuation': /[{}[\];(),.:]/ +}; + +Prism.languages.javascript = Prism.languages.extend('clike', { + 'keyword': /\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/, + 'number': /\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/, + // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) + 'function': /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i, + 'operator': /-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/ +}); + +Prism.languages.insertBefore('javascript', 'keyword', { + 'regex': { + pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/, + lookbehind: true, + greedy: true + }, + // This must be declared before keyword because we use "function" inside the look-forward + 'function-variable': { + pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i, + alias: 'function' + }, + 'constant': /\b[A-Z][A-Z\d_]*\b/ +}); + +Prism.languages.insertBefore('javascript', 'string', { + 'template-string': { + pattern: /`(?:\\[\s\S]|[^\\`])*`/, + greedy: true, + inside: { + 'interpolation': { + pattern: /\$\{[^}]+\}/, + inside: { + 'interpolation-punctuation': { + pattern: /^\$\{|\}$/, + alias: 'punctuation' + }, + rest: Prism.languages.javascript + } + }, + 'string': /[\s\S]+/ + } + } +}); + +if (Prism.languages.markup) { + Prism.languages.insertBefore('markup', 'tag', { + 'script': { + pattern: /()[\s\S]*?(?=<\/script>)/i, + lookbehind: true, + inside: Prism.languages.javascript, + alias: 'language-javascript', + greedy: true + } + }); +} + +Prism.languages.js = Prism.languages.javascript; + +(function(Prism) { + var insideString = { + variable: [ + // Arithmetic Environment + { + pattern: /\$?\(\([\s\S]+?\)\)/, + inside: { + // If there is a $ sign at the beginning highlight $(( and )) as variable + variable: [{ + pattern: /(^\$\(\([\s\S]+)\)\)/, + lookbehind: true + }, + /^\$\(\(/ + ], + number: /\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/, + // Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic + operator: /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/, + // If there is no $ sign at the beginning highlight (( and )) as punctuation + punctuation: /\(\(?|\)\)?|,|;/ + } + }, + // Command Substitution + { + pattern: /\$\([^)]+\)|`[^`]+`/, + greedy: true, + inside: { + variable: /^\$\(|^`|\)$|`$/ + } + }, + /\$(?:[\w#?*!@]+|\{[^}]+\})/i + ] + }; + + Prism.languages.bash = { + 'shebang': { + pattern: /^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/, + alias: 'important' + }, + 'comment': { + pattern: /(^|[^"{\\])#.*/, + lookbehind: true + }, + 'string': [ + //Support for Here-Documents https://en.wikipedia.org/wiki/Here_document + { + pattern: /((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/, + lookbehind: true, + greedy: true, + inside: insideString + }, + { + pattern: /(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/, + greedy: true, + inside: insideString + } + ], + 'variable': insideString.variable, + // Originally based on http://ss64.com/bash/ + 'function': { + pattern: /(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/, + lookbehind: true + }, + 'keyword': { + pattern: /(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/, + lookbehind: true + }, + 'boolean': { + pattern: /(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/, + lookbehind: true + }, + 'operator': /&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/, + 'punctuation': /\$?\(\(?|\)\)?|\.\.|[{}[\];]/ + }; + + var inside = insideString.variable[1].inside; + inside.string = Prism.languages.bash.string; + inside['function'] = Prism.languages.bash['function']; + inside.keyword = Prism.languages.bash.keyword; + inside.boolean = Prism.languages.bash.boolean; + inside.operator = Prism.languages.bash.operator; + inside.punctuation = Prism.languages.bash.punctuation; + + Prism.languages.shell = Prism.languages.bash; +})(Prism); + +Prism.languages.docker = { + 'keyword': { + pattern: /(^\s*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)/mi, + lookbehind: true + }, + 'string': /("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/, + 'comment': /#.*/, + 'punctuation': /---|\.\.\.|[:[\]{}\-,|>?]/ +}; + +Prism.languages.dockerfile = Prism.languages.docker; + +Prism.languages.go = Prism.languages.extend('clike', { + 'keyword': /\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/, + 'builtin': /\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/, + 'boolean': /\b(?:_|iota|nil|true|false)\b/, + 'operator': /[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./, + 'number': /(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i, + 'string': { + pattern: /(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/, + greedy: true + } +}); +delete Prism.languages.go['class-name']; + +Prism.languages.java = Prism.languages.extend('clike', { + 'keyword': /\b(?:abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/, + 'number': /\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp-]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?[df]?/i, + 'operator': { + pattern: /(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m, + lookbehind: true + } +}); + +Prism.languages.insertBefore('java','function', { + 'annotation': { + alias: 'punctuation', + pattern: /(^|[^.])@\w+/, + lookbehind: true + } +}); + +Prism.languages.insertBefore('java', 'class-name', { + 'generics': { + pattern: /<\s*\w+(?:\.\w+)?(?:\s*,\s*\w+(?:\.\w+)?)*>/i, + alias: 'function', + inside: { + keyword: Prism.languages.java.keyword, + punctuation: /[<>(),.:]/ + } + } +}); + +Prism.languages.protobuf = Prism.languages.extend('clike', { + keyword: /\b(?:package|import|message|enum)\b/, + builtin: /\b(?:required|repeated|optional|reserved)\b/, + primitive: { + pattern: /\b(?:double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|bool|string|bytes)\b/, + alias: 'symbol' + } +}); + +Prism.languages.python = { + 'comment': { + pattern: /(^|[^\\])#.*/, + lookbehind: true + }, + 'triple-quoted-string': { + pattern: /("""|''')[\s\S]+?\1/, + greedy: true, + alias: 'string' + }, + 'string': { + pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/, + greedy: true + }, + 'function': { + pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g, + lookbehind: true + }, + 'class-name': { + pattern: /(\bclass\s+)\w+/i, + lookbehind: true + }, + 'keyword': /\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|pass|print|raise|return|try|while|with|yield)\b/, + 'builtin':/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/, + 'boolean': /\b(?:True|False|None)\b/, + 'number': /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i, + 'operator': /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/, + 'punctuation': /[{}[\];(),.:]/ +}; + +Prism.languages.yaml = { + 'scalar': { + pattern: /([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/, + lookbehind: true, + alias: 'string' + }, + 'comment': /#.*/, + 'key': { + pattern: /(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/, + lookbehind: true, + alias: 'atrule' + }, + 'directive': { + pattern: /(^[ \t]*)%.+/m, + lookbehind: true, + alias: 'important' + }, + 'datetime': { + pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m, + lookbehind: true, + alias: 'number' + }, + 'boolean': { + pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im, + lookbehind: true, + alias: 'important' + }, + 'null': { + pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im, + lookbehind: true, + alias: 'important' + }, + 'string': { + pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}))/m, + lookbehind: true, + greedy: true + }, + 'number': { + pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im, + lookbehind: true + }, + 'tag': /![^\s]+/, + 'important': /[&*][\w]+/, + 'punctuation': /---|[:[\]{}\-,|>?]|\.\.\./ +}; + diff --git a/js/prism.min.js b/js/prism.min.js new file mode 100644 index 0000000000..c016232fd3 --- /dev/null +++ b/js/prism.min.js @@ -0,0 +1 @@ +var _self='undefined'==typeof window?'undefined'!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{}:window,Prism=function(){var a=/\blang(?:uage)?-([\w-]+)\b/i,b=0,c=_self.Prism={manual:_self.Prism&&_self.Prism.manual,disableWorkerMessageHandler:_self.Prism&&_self.Prism.disableWorkerMessageHandler,util:{encode:function(f){return f instanceof d?new d(f.type,c.util.encode(f.content),f.alias):'Array'===c.util.type(f)?f.map(c.util.encode):f.replace(/&/g,'&').replace(/f.length)return;if(!(F instanceof r)){if(z&&D!=g.length-1){w.lastIndex=E;var G=w.exec(f);if(!G)break;for(var H=G.index+(y?G[1].length:0),I=G.index+G[0].length,J=D,K=E,L=g.length;J=K&&(++D,E=K);if(g[D]instanceof r)continue;M=J-D,F=f.slice(E,K),G.index-=E}else{w.lastIndex=0;var G=w.exec(F),M=1}if(!G){if(n)break;continue}y&&(A=G[1]?G[1].length:0);var H=G.index+A,G=G[0].slice(A),I=H+G.length,N=F.slice(0,H),O=F.slice(I),P=[D,M];N&&(++D,E+=N.length,P.push(N));var Q=new r(s,x?c.tokenize(G,x):G,B,G,z);if(P.push(Q),O&&P.push(O),Array.prototype.splice.apply(g,P),1!=M&&c.matchGrammar(f,g,h,D,E,!0,s),n)break}}}}},tokenize:function(f,g){var l=[f],m=g.rest;if(m){for(var n in m)g[n]=m[n];delete g.rest}return c.matchGrammar(f,l,g,0,0,!1),l},hooks:{all:{},add:function(f,g){var h=c.hooks.all;h[f]=h[f]||[],h[f].push(g)},run:function(f,g){var h=c.hooks.all[f];if(h&&h.length)for(var m,l=0;m=h[l++];)m(g)}}},d=c.Token=function(f,g,h,l,m){this.type=f,this.content=g,this.alias=h,this.length=0|(l||'').length,this.greedy=!!m};if(d.stringify=function(f,g,h){if('string'==typeof f)return f;if('Array'===c.util.type(f))return f.map(function(q){return d.stringify(q,g,f)}).join('');var l={type:f.type,content:d.stringify(f.content,g,h),tag:'span',classes:['token',f.type],attributes:{},language:g,parent:h};if(f.alias){var m='Array'===c.util.type(f.alias)?f.alias:[f.alias];Array.prototype.push.apply(l.classes,m)}c.hooks.run('wrap',l);var n=Object.keys(l.attributes).map(function(q){return q+'="'+(l.attributes[q]||'').replace(/"/g,'"')+'"'}).join(' ');return'<'+l.tag+' class="'+l.classes.join(' ')+'"'+(n?' '+n:'')+'>'+l.content+''},!_self.document)return _self.addEventListener?(c.disableWorkerMessageHandler||_self.addEventListener('message',function(f){var g=JSON.parse(f.data),h=g.language,l=g.code,m=g.immediateClose;_self.postMessage(c.highlight(l,c.languages[h],h)),m&&_self.close()},!1),_self.Prism):_self.Prism;var e=document.currentScript||[].slice.call(document.getElementsByTagName('script')).pop();return e&&(c.filename=e.src,!c.manual&&!e.hasAttribute('data-manual')&&('loading'===document.readyState?document.addEventListener('DOMContentLoaded',c.highlightAll):window.requestAnimationFrame?window.requestAnimationFrame(c.highlightAll):window.setTimeout(c.highlightAll,16))),_self.Prism}();'undefined'!=typeof module&&module.exports&&(module.exports=Prism),'undefined'!=typeof global&&(global.Prism=Prism);Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},'class-name':{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,'function':/[a-z0-9_]+(?=\()/i,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend('clike',{keyword:/\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,'function':/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.insertBefore('javascript','keyword',{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},'function-variable':{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,alias:'function'},constant:/\b[A-Z][A-Z\d_]*\b/}),Prism.languages.insertBefore('javascript','string',{'template-string':{pattern:/`(?:\\[\s\S]|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{'interpolation-punctuation':{pattern:/^\$\{|\}$/,alias:'punctuation'},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore('markup','tag',{script:{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:'language-javascript',greedy:!0}}),Prism.languages.js=Prism.languages.javascript,function(a){var b={variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[\w#?*!@]+|\{[^}]+\})/i]};a.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:'important'},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/,lookbehind:!0,greedy:!0,inside:b},{pattern:/(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,greedy:!0,inside:b}],variable:b.variable,'function':{pattern:/(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/,lookbehind:!0},boolean:{pattern:/(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var c=b.variable[1].inside;c.string=a.languages.bash.string,c['function']=a.languages.bash['function'],c.keyword=a.languages.bash.keyword,c.boolean=a.languages.bash.boolean,c.operator=a.languages.bash.operator,c.punctuation=a.languages.bash.punctuation,a.languages.shell=a.languages.bash}(Prism),Prism.languages.docker={keyword:{pattern:/(^\s*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)/mi,lookbehind:!0},string:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,comment:/#.*/,punctuation:/---|\.\.\.|[:[\]{}\-,|>?]/},Prism.languages.dockerfile=Prism.languages.docker,Prism.languages.go=Prism.languages.extend('clike',{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete Prism.languages.go['class-name'],Prism.languages.java=Prism.languages.extend('clike',{keyword:/\b(?:abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp-]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?[df]?/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),Prism.languages.insertBefore('java','function',{annotation:{alias:'punctuation',pattern:/(^|[^.])@\w+/,lookbehind:!0}}),Prism.languages.insertBefore('java','class-name',{generics:{pattern:/<\s*\w+(?:\.\w+)?(?:\s*,\s*\w+(?:\.\w+)?)*>/i,alias:'function',inside:{keyword:Prism.languages.java.keyword,punctuation:/[<>(),.:]/}}}),Prism.languages.protobuf=Prism.languages.extend('clike',{keyword:/\b(?:package|import|message|enum)\b/,builtin:/\b(?:required|repeated|optional|reserved)\b/,primitive:{pattern:/\b(?:double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|bool|string|bytes)\b/,alias:'symbol'}}),Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},'triple-quoted-string':{pattern:/("""|''')[\s\S]+?\1/,greedy:!0,alias:'string'},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},'function':{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},'class-name':{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/},Prism.languages.yaml={scalar:{pattern:/([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,lookbehind:!0,alias:'string'},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:'atrule'},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:'important'},datetime:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,alias:'number'},boolean:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:'important'},'null':{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:'important'},string:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,greedy:!0},number:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./};