Merge pull request #3047 from lofwyr14/main-quick-date

demo: example for custom date field with quick typing
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/DateController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/DateController.java
index bbe7265..45f0fee 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/DateController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/DateController.java
@@ -58,6 +58,8 @@
 
   private final LocalDate today = LocalDate.now();
 
+  private LocalDate quick;
+
   private LocalDate party;
   private final LocalDate partyMin = today.plusDays(3);
   private final LocalDate partyMax = today.plusDays(10);
@@ -148,6 +150,14 @@
     return today;
   }
 
+  public LocalDate getQuick() {
+    return quick;
+  }
+
+  public void setQuick(LocalDate quick) {
+    this.quick = quick;
+  }
+
   public LocalDate getParty() {
     return party;
   }
diff --git a/tobago-example/tobago-example-demo/src/main/ts/demo-all.ts b/tobago-example/tobago-example-demo/src/main/ts/demo-all.ts
index b456af3..13b138a 100644
--- a/tobago-example/tobago-example-demo/src/main/ts/demo-all.ts
+++ b/tobago-example/tobago-example-demo/src/main/ts/demo-all.ts
@@ -17,6 +17,7 @@
 
 import "./demo-alert";
 import "./demo-copy-to-clipboard";
+import "./demo-date";
 import "./demo-highlight";
 import "./demo-inspect";
 import "./demo-login";
diff --git a/tobago-example/tobago-example-demo/src/main/ts/demo-date.ts b/tobago-example/tobago-example-demo/src/main/ts/demo-date.ts
new file mode 100644
index 0000000..316b2aa
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/ts/demo-date.ts
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+  simple example of a quick typing extra input date field.
+*/
+document.addEventListener("DOMContentLoaded", function (event: Event): void {
+  document.querySelectorAll("tobago-date input[data-quick-pattern]").forEach(input => {
+    console.debug("quick-pattern found for id=", input.id);
+    const quickPattern = (input as HTMLInputElement).dataset.quickPattern as string;
+    let regexp;
+    switch (quickPattern) {
+      case "ddmm":
+        regexp = "[0-3][0-9][0-1][0-9]";
+        break;
+      case "mmdd":
+        regexp = "[0-1][0-9][0-3][0-9]";
+        break;
+      default:
+        console.error("Unsupported patten", quickPattern);
+        return;
+    }
+    const quick = document.createElement("input") as HTMLInputElement;
+    quick.id = input.id + "::quick";
+    quick.type = "text";
+    quick.className = "form-control";
+    quick.style.maxWidth = "5em";
+    quick.placeholder = quickPattern;
+    quick.pattern = regexp;
+    quick.setAttribute("targetId", input.id);
+    input.insertAdjacentElement("beforebegin", quick);
+
+    quick.addEventListener("blur", (event => {
+      const quick = event.currentTarget as HTMLInputElement;
+      let value = quick.value;
+      let day, month, year;
+
+      if (value.length == 4) {
+        day = Number.parseInt(value.substring(0, 2));
+        month = Number.parseInt(value.substring(2, 4));
+        year = new Date().getFullYear();
+      }
+      if (value.length == 6) {
+      }
+
+      let string = `${year}-${month < 10 ? "0" + month : month}-${day < 10 ? "0" + day : day}`;
+      console.info("date ->", string);
+      const input = document.getElementById(quick.getAttribute("targetId")) as HTMLInputElement;
+      input.value = string;
+
+    }));
+
+  });
+});
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/010-input/40-date/Date.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/010-input/40-date/Date.xhtml
index 649861e..6b1c551 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/010-input/40-date/Date.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/010-input/40-date/Date.xhtml
@@ -42,13 +42,42 @@
     <tc:date id="d3" label="Disabled" disabled="true" value="#{dateController.now}"/>
     <tc:date id="d4" value="#{dateController.now}"/>
   </tc:section>
+
   <tc:section label="Focus">
     <p>The following date should be selected after reloading the page. This can be done with the attribute
       <code>focus</code>.</p>
-        <demo-highlight language="markup">&lt;tc:date label="Date (focus)" focus="true"/&gt;&gt;</demo-highlight>
+    <demo-highlight language="markup">&lt;tc:date label="Date (focus)" focus="true"/&gt;</demo-highlight>
     <tc:date id="d5" label="Date (focus)" focus="true"/>
   </tc:section>
 
+  <tc:section label="Custom: Quick Typing">
+    <p>
+      For advanced business application users,
+      browser-based date-picker might be too slow to use, because they are used to typing fast.
+    </p>
+    <p>
+      In this demo is an script file <code>demo-date.ts</code> to
+      show a second input field for shortcuts.
+      Just type e.g. 0212 for December, 2nd in the current year.
+      The next input field will filled automatically and the date-picker can be used.
+      This is activated by
+    </p>
+    <demo-highlight language="markup">&lt;tc:dataAttribute name="quick-pattern" value="ddmm"/&gt;</demo-highlight>
+    <p>
+      This script is just an showcase.
+      A real application may use specially adjusted shortcuts. E.g. using also a 2-digit year or
+      creating the special quick input field by a keyboard shortcut, or button.
+    </p>
+    <tc:date id="quick" label="Quick" value="#{dateController.quick}">
+      <tc:dataAttribute name="quick-pattern" value="ddmm"/>
+    </tc:date>
+    If the users typing the &lt;TAB&gt; key to jump to the next field, it might be
+    helpful to set <code>tabIndex="-1"</code> to skip the normal date field.
+    <tc:date id="quickST" label="Skip Tab" value="#{dateController.quick}" tabIndex="-1">
+      <tc:dataAttribute name="quick-pattern" value="ddmm"/>
+    </tc:date>
+  </tc:section>
+
   <tc:section label="Types">
     <p><tc:badge value="New!" markup="info"/>
       It is NOT recommended to use <code>&lt;f:convertDateTime&gt;</code>,
@@ -155,6 +184,7 @@
       <f:convertDateTime dateStyle="full" timeStyle="full" type="both"/>
     </tc:out>
   </tc:section>
+
   <tc:section label="Min and Max">
     <p>
       To define the earliest or latest acceptable date, the attributes <code>min</code>
@@ -170,6 +200,15 @@
       <tc:date id="minmax" label="Party" value="#{dateController.party}" tip="Pick a date in the next 3 to 10 days"
       min="#{dateController.partyMin}" max="#{dateController.partyMax}"/>
   </tc:section>
+
+  <tc:section label="Now Button">
+    <p>
+      To define the earliest or latest acceptable date, the attributes <code>min</code>
+      and <code>max</code> can be used.
+    </p>
+      <tc:date id="now" label="Now Button" todayButton="true"/>
+  </tc:section>
+
   <tc:section label="Submit">
     <tc:form id="formSubmit">
       <p>Press the button to submit the date to the server. The output field show the current value.
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/js/demo-all.js b/tobago-example/tobago-example-demo/src/main/webapp/js/demo-all.js
index b36826c..e24d327 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/js/demo-all.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/js/demo-all.js
@@ -16,6 +16,7 @@
  */
 import "./demo-alert";
 import "./demo-copy-to-clipboard";
+import "./demo-date";
 import "./demo-highlight";
 import "./demo-inspect";
 import "./demo-login";
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/js/demo-all.js.map b/tobago-example/tobago-example-demo/src/main/webapp/js/demo-all.js.map
index ea19dcc..47afcb8 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/js/demo-all.js.map
+++ b/tobago-example/tobago-example-demo/src/main/webapp/js/demo-all.js.map
@@ -1 +1 @@
-{"version":3,"file":"demo-all.js","sourceRoot":"","sources":["../../ts/demo-all.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,cAAc,CAAC;AACtB,OAAO,0BAA0B,CAAC;AAClC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,aAAa,CAAC"}
\ No newline at end of file
+{"version":3,"file":"demo-all.js","sourceRoot":"","sources":["../../ts/demo-all.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,cAAc,CAAC;AACtB,OAAO,0BAA0B,CAAC;AAClC,OAAO,aAAa,CAAC;AACrB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,aAAa,CAAC"}
\ No newline at end of file
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/js/demo.js b/tobago-example/tobago-example-demo/src/main/webapp/js/demo.js
index bc8034f..592214f 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/js/demo.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/js/demo.js
@@ -94,6 +94,68 @@
         }
     });
 
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *      http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+    /*
+      simple example of a quick typing extra input date field.
+    */
+    document.addEventListener("DOMContentLoaded", function (event) {
+        document.querySelectorAll("tobago-date input[data-quick-pattern]").forEach(input => {
+            console.debug("quick-pattern found for id=", input.id);
+            const quickPattern = input.dataset.quickPattern;
+            let regexp;
+            switch (quickPattern) {
+                case "ddmm":
+                    regexp = "[0-3][0-9][0-1][0-9]";
+                    break;
+                case "mmdd":
+                    regexp = "[0-1][0-9][0-3][0-9]";
+                    break;
+                default:
+                    console.error("Unsupported patten", quickPattern);
+                    return;
+            }
+            const quick = document.createElement("input");
+            quick.id = input.id + "::quick";
+            quick.type = "text";
+            quick.className = "form-control";
+            quick.style.maxWidth = "5em";
+            quick.placeholder = quickPattern;
+            quick.pattern = regexp;
+            quick.setAttribute("targetId", input.id);
+            input.insertAdjacentElement("beforebegin", quick);
+            quick.addEventListener("blur", (event => {
+                const quick = event.currentTarget;
+                let value = quick.value;
+                let day, month, year;
+                if (value.length == 4) {
+                    day = Number.parseInt(value.substring(0, 2));
+                    month = Number.parseInt(value.substring(2, 4));
+                    year = new Date().getFullYear();
+                }
+                if (value.length == 6) ;
+                let string = `${year}-${month < 10 ? "0" + month : month}-${day < 10 ? "0" + day : day}`;
+                console.info("date ->", string);
+                const input = document.getElementById(quick.getAttribute("targetId"));
+                input.value = string;
+            }));
+        });
+    });
+
     /* **********************************************
          Begin prism-core.js
     ********************************************** */
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/js/demo.js.map b/tobago-example/tobago-example-demo/src/main/webapp/js/demo.js.map
index c619ad7..a077539 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/js/demo.js.map
+++ b/tobago-example/tobago-example-demo/src/main/webapp/js/demo.js.map
@@ -1 +1 @@
-{"version":3,"file":"demo.js","sources":["demo-alert.js","demo-copy-to-clipboard.js","../../../../node_modules/prismjs/prism.js","demo-highlight.js","demo-inspect.js","demo-login.js","demo-search.js","demo-test.js"],"sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass DemoAlert extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        this.addEventListener(\"click\", this.alert.bind(this));\n    }\n    alert() {\n        window.alert(this.value);\n    }\n    get value() {\n        return this.getAttribute(\"value\");\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-alert\") == null) {\n        window.customElements.define(\"demo-alert\", DemoAlert);\n    }\n});\n//# sourceMappingURL=demo-alert.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass DemoCopyToClipboard extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        this.addEventListener(\"click\", (event) => {\n            const sourceElement = document.getElementById(this.source);\n            if (window.getSelection) {\n                const selection = window.getSelection();\n                const range = document.createRange();\n                range.selectNodeContents(sourceElement);\n                selection.removeAllRanges();\n                selection.addRange(range);\n            }\n            else {\n                console.warn(\"Text select not possible: Unsupported browser.\");\n            }\n            try {\n                const result = document.execCommand(\"copy\");\n                console.debug(\"result: \" + result);\n            }\n            catch (error) {\n                console.error(\"Copying text not possible\");\n            }\n        });\n    }\n    get source() {\n        return this.getAttribute(\"source\");\n    }\n    set source(name) {\n        this.setAttribute(\"source\", name);\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-copy-to-clipboard\") == null) {\n        window.customElements.define(\"demo-copy-to-clipboard\", DemoCopyToClipboard);\n    }\n});\n//# sourceMappingURL=demo-copy-to-clipboard.js.map","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif ('currentScript' in document && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: /@[\\w-](?:[^;{\\s]|\\s+(?![\\s{]))*(?:;|(?=\\s*\\{))/,\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?: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|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// this import seems to initialize and do the highlighting?!?\nimport * as Prism from \"prismjs\";\nclass DemoHighlight extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        if (this.language) {\n            this.innerHTML = `<pre><code class=\"language-${this.language}\">${this.innerHTML.trim()}</demo-highlight>`;\n        }\n        else {\n            this.innerHTML = `<pre><code>${this.innerHTML.trim()}</demo-highlight>`;\n        }\n        // XXX this doesn't work, because rollup? replaces this with \"unknown\".\n        // XXX But, highlighting works automatically ?!? (but not, when removing this)\n        try {\n            Prism.highlightElement(this.querySelector(\"code\"));\n        }\n        catch (e) {\n            console.debug(\"Prism.highlight\");\n            // ignore\n        }\n    }\n    get language() {\n        return this.getAttribute(\"language\");\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-highlight\") == null) {\n        window.customElements.define(\"demo-highlight\", DemoHighlight);\n    }\n});\n//# sourceMappingURL=demo-highlight.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// todo: this code is not tested\nclass DemoInspect {\n    static initInspect(element) {\n        for (const code of element.querySelectorAll(\"code\")) {\n            for (const br of code.querySelectorAll(\"br\")) {\n                br.parentNode.insertBefore(document.createTextNode(\"\\n\"), br);\n                br.parentNode.removeChild(br);\n            }\n        }\n        for (const e of element.querySelectorAll(\"tobago-in\")) {\n            // do highlighting with hovering only in the content-area\n            if (e.closest(\"#page\\\\:content\")) {\n                e.addEventListener(\"hover\", function (event) {\n                    // clear old selections:\n                    for (const selected of document.querySelectorAll(\".demo-selected\")) {\n                        selected.classList.remove(\"demo-selected\");\n                    }\n                    const element = event.currentTarget;\n                    element.classList.add(\"demo-selected\");\n                    const clientId = element.closest(\"[id]\").id;\n                    const id = clientId.substr(clientId.lastIndexOf(\":\") + 1);\n                    const source = document.getElementById(\"demo-view-source\");\n                    for (const span of source.querySelectorAll(\"span.token.attr-value\")) {\n                        if (span.textContent === `id=\"${id}\"`) {\n                            span.parentElement.classList.add(\"demo-selected\");\n                        }\n                    }\n                });\n            }\n        }\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    let element = document.documentElement; // XXX fixme\n    // XXX init areas after JSF AJAX update not implemented yet!\n    DemoInspect.initInspect(element); //TODO fix inspection\n});\n//# sourceMappingURL=demo-inspect.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Utility links:\n * Copies the values from the data-login attribute to the username/password fields.\n */\nclass DemoLogin extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        this.addEventListener(\"click\", this.fillFields.bind(this));\n    }\n    fillFields(event) {\n        const rootNode = this.getRootNode();\n        const username = rootNode.getElementById(this.usernameId);\n        username.value = this.username;\n        const password = rootNode.getElementById(this.passwordId);\n        password.value = this.password;\n        event.preventDefault();\n    }\n    get username() {\n        return this.getAttribute(\"username\");\n    }\n    get usernameId() {\n        return this.getAttribute(\"username-id\");\n    }\n    get password() {\n        return this.getAttribute(\"password\");\n    }\n    get passwordId() {\n        return this.getAttribute(\"password-id\");\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-login\") == null) {\n        window.customElements.define(\"demo-login\", DemoLogin);\n    }\n});\n//# sourceMappingURL=demo-login.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass DemoSearch extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        const input = this.input;\n        const a = this.a;\n        if (input && a) {\n            a.href = DemoSearch.GOOGLE;\n            input.addEventListener(\"change\", this.change.bind(this));\n            input.addEventListener(\"keypress\", this.keypress.bind(this));\n        }\n    }\n    change(event) {\n        this.a.href = DemoSearch.GOOGLE + encodeURI(this.input.value);\n    }\n    keypress(event) {\n        if (event.which === 13) {\n            this.change(event);\n        }\n    }\n    get input() {\n        return this.querySelector(\"input\");\n    }\n    get a() {\n        return this.querySelector(\"a\");\n    }\n}\nDemoSearch.GOOGLE = \"https://www.google.com/search?q=site%3Atobago-vm.apache.org+demo-4-release+\";\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-search\") == null) {\n        window.customElements.define(\"demo-search\", DemoSearch);\n    }\n});\n//# sourceMappingURL=demo-search.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// todo: this code is not tested\nclass DemoTest {\n    static initTestLinks(element) {\n        const runLink = document.getElementById(\"page:header:runtest\");\n        if (runLink && parent.document.getElementById(\"qunit\")) {\n            runLink.classList.add(\"d-none\");\n        }\n    }\n    static initTestFrame(element) {\n        const testFrame = document.getElementById(\"page:testframe\");\n        if (testFrame) {\n            alert(\"Might currently not working...\");\n            testFrame.addEventListener(\"onload\", function () {\n                // XXX is element an iframe?\n                const iframe = element;\n                iframe.style.height = \"\" + iframe.contentWindow.document.querySelector(\"body\").scrollHeight + \"px\";\n            });\n        }\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    let element = document.documentElement; // XXX fixme\n    // XXX init areas after JSF AJAX update not implemented yet!\n    DemoTest.initTestLinks(element);\n    DemoTest.initTestFrame(element);\n});\n//# sourceMappingURL=demo-test.js.map"],"names":["Prism.highlightElement"],"mappings":"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AG;AACH;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,EAAE,SAAS,EAAE;IACb;IACA;IACA;IACA,GAAG,KAAK,EAAE,gBAAgB;IAC1B,GAAG,SAAS,EAAE,gBAAgB;IAC9B,GAAG,IAAI,EAAE,gBAAgB;IACzB,GAAG,GAAG,EAAE,gBAAgB;AACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,GAAG,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE;IAChC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C;IACA,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,OAAO,IAAI,CAAC;IAChB,IAAI;AACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,GAAG,YAAY,EAAE,UAAU,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IACzD,IAAI,IAAI,GAAG,IAAI,wBAAwB,CAAC,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B;IACA,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"}
\ No newline at end of file
+{"version":3,"file":"demo.js","sources":["demo-alert.js","demo-copy-to-clipboard.js","demo-date.js","../../../../node_modules/prismjs/prism.js","demo-highlight.js","demo-inspect.js","demo-login.js","demo-search.js","demo-test.js"],"sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass DemoAlert extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        this.addEventListener(\"click\", this.alert.bind(this));\n    }\n    alert() {\n        window.alert(this.value);\n    }\n    get value() {\n        return this.getAttribute(\"value\");\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-alert\") == null) {\n        window.customElements.define(\"demo-alert\", DemoAlert);\n    }\n});\n//# sourceMappingURL=demo-alert.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass DemoCopyToClipboard extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        this.addEventListener(\"click\", (event) => {\n            const sourceElement = document.getElementById(this.source);\n            if (window.getSelection) {\n                const selection = window.getSelection();\n                const range = document.createRange();\n                range.selectNodeContents(sourceElement);\n                selection.removeAllRanges();\n                selection.addRange(range);\n            }\n            else {\n                console.warn(\"Text select not possible: Unsupported browser.\");\n            }\n            try {\n                const result = document.execCommand(\"copy\");\n                console.debug(\"result: \" + result);\n            }\n            catch (error) {\n                console.error(\"Copying text not possible\");\n            }\n        });\n    }\n    get source() {\n        return this.getAttribute(\"source\");\n    }\n    set source(name) {\n        this.setAttribute(\"source\", name);\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-copy-to-clipboard\") == null) {\n        window.customElements.define(\"demo-copy-to-clipboard\", DemoCopyToClipboard);\n    }\n});\n//# sourceMappingURL=demo-copy-to-clipboard.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n  simple example of a quick typing extra input date field.\n*/\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    document.querySelectorAll(\"tobago-date input[data-quick-pattern]\").forEach(input => {\n        console.debug(\"quick-pattern found for id=\", input.id);\n        const quickPattern = input.dataset.quickPattern;\n        let regexp;\n        switch (quickPattern) {\n            case \"ddmm\":\n                regexp = \"[0-3][0-9][0-1][0-9]\";\n                break;\n            case \"mmdd\":\n                regexp = \"[0-1][0-9][0-3][0-9]\";\n                break;\n            default:\n                console.error(\"Unsupported patten\", quickPattern);\n                return;\n        }\n        const quick = document.createElement(\"input\");\n        quick.id = input.id + \"::quick\";\n        quick.type = \"text\";\n        quick.className = \"form-control\";\n        quick.style.maxWidth = \"5em\";\n        quick.placeholder = quickPattern;\n        quick.pattern = regexp;\n        quick.setAttribute(\"targetId\", input.id);\n        input.insertAdjacentElement(\"beforebegin\", quick);\n        quick.addEventListener(\"blur\", (event => {\n            const quick = event.currentTarget;\n            let value = quick.value;\n            let day, month, year;\n            if (value.length == 4) {\n                day = Number.parseInt(value.substring(0, 2));\n                month = Number.parseInt(value.substring(2, 4));\n                year = new Date().getFullYear();\n            }\n            if (value.length == 6) {\n            }\n            let string = `${year}-${month < 10 ? \"0\" + month : month}-${day < 10 ? \"0\" + day : day}`;\n            console.info(\"date ->\", string);\n            const input = document.getElementById(quick.getAttribute(\"targetId\"));\n            input.value = string;\n        }));\n    });\n});\n//# sourceMappingURL=demo-date.js.map","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif ('currentScript' in document && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: /@[\\w-](?:[^;{\\s]|\\s+(?![\\s{]))*(?:;|(?=\\s*\\{))/,\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?: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|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// this import seems to initialize and do the highlighting?!?\nimport * as Prism from \"prismjs\";\nclass DemoHighlight extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        if (this.language) {\n            this.innerHTML = `<pre><code class=\"language-${this.language}\">${this.innerHTML.trim()}</demo-highlight>`;\n        }\n        else {\n            this.innerHTML = `<pre><code>${this.innerHTML.trim()}</demo-highlight>`;\n        }\n        // XXX this doesn't work, because rollup? replaces this with \"unknown\".\n        // XXX But, highlighting works automatically ?!? (but not, when removing this)\n        try {\n            Prism.highlightElement(this.querySelector(\"code\"));\n        }\n        catch (e) {\n            console.debug(\"Prism.highlight\");\n            // ignore\n        }\n    }\n    get language() {\n        return this.getAttribute(\"language\");\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-highlight\") == null) {\n        window.customElements.define(\"demo-highlight\", DemoHighlight);\n    }\n});\n//# sourceMappingURL=demo-highlight.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// todo: this code is not tested\nclass DemoInspect {\n    static initInspect(element) {\n        for (const code of element.querySelectorAll(\"code\")) {\n            for (const br of code.querySelectorAll(\"br\")) {\n                br.parentNode.insertBefore(document.createTextNode(\"\\n\"), br);\n                br.parentNode.removeChild(br);\n            }\n        }\n        for (const e of element.querySelectorAll(\"tobago-in\")) {\n            // do highlighting with hovering only in the content-area\n            if (e.closest(\"#page\\\\:content\")) {\n                e.addEventListener(\"hover\", function (event) {\n                    // clear old selections:\n                    for (const selected of document.querySelectorAll(\".demo-selected\")) {\n                        selected.classList.remove(\"demo-selected\");\n                    }\n                    const element = event.currentTarget;\n                    element.classList.add(\"demo-selected\");\n                    const clientId = element.closest(\"[id]\").id;\n                    const id = clientId.substr(clientId.lastIndexOf(\":\") + 1);\n                    const source = document.getElementById(\"demo-view-source\");\n                    for (const span of source.querySelectorAll(\"span.token.attr-value\")) {\n                        if (span.textContent === `id=\"${id}\"`) {\n                            span.parentElement.classList.add(\"demo-selected\");\n                        }\n                    }\n                });\n            }\n        }\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    let element = document.documentElement; // XXX fixme\n    // XXX init areas after JSF AJAX update not implemented yet!\n    DemoInspect.initInspect(element); //TODO fix inspection\n});\n//# sourceMappingURL=demo-inspect.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Utility links:\n * Copies the values from the data-login attribute to the username/password fields.\n */\nclass DemoLogin extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        this.addEventListener(\"click\", this.fillFields.bind(this));\n    }\n    fillFields(event) {\n        const rootNode = this.getRootNode();\n        const username = rootNode.getElementById(this.usernameId);\n        username.value = this.username;\n        const password = rootNode.getElementById(this.passwordId);\n        password.value = this.password;\n        event.preventDefault();\n    }\n    get username() {\n        return this.getAttribute(\"username\");\n    }\n    get usernameId() {\n        return this.getAttribute(\"username-id\");\n    }\n    get password() {\n        return this.getAttribute(\"password\");\n    }\n    get passwordId() {\n        return this.getAttribute(\"password-id\");\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-login\") == null) {\n        window.customElements.define(\"demo-login\", DemoLogin);\n    }\n});\n//# sourceMappingURL=demo-login.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass DemoSearch extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        const input = this.input;\n        const a = this.a;\n        if (input && a) {\n            a.href = DemoSearch.GOOGLE;\n            input.addEventListener(\"change\", this.change.bind(this));\n            input.addEventListener(\"keypress\", this.keypress.bind(this));\n        }\n    }\n    change(event) {\n        this.a.href = DemoSearch.GOOGLE + encodeURI(this.input.value);\n    }\n    keypress(event) {\n        if (event.which === 13) {\n            this.change(event);\n        }\n    }\n    get input() {\n        return this.querySelector(\"input\");\n    }\n    get a() {\n        return this.querySelector(\"a\");\n    }\n}\nDemoSearch.GOOGLE = \"https://www.google.com/search?q=site%3Atobago-vm.apache.org+demo-4-release+\";\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    if (window.customElements.get(\"demo-search\") == null) {\n        window.customElements.define(\"demo-search\", DemoSearch);\n    }\n});\n//# sourceMappingURL=demo-search.js.map","/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// todo: this code is not tested\nclass DemoTest {\n    static initTestLinks(element) {\n        const runLink = document.getElementById(\"page:header:runtest\");\n        if (runLink && parent.document.getElementById(\"qunit\")) {\n            runLink.classList.add(\"d-none\");\n        }\n    }\n    static initTestFrame(element) {\n        const testFrame = document.getElementById(\"page:testframe\");\n        if (testFrame) {\n            alert(\"Might currently not working...\");\n            testFrame.addEventListener(\"onload\", function () {\n                // XXX is element an iframe?\n                const iframe = element;\n                iframe.style.height = \"\" + iframe.contentWindow.document.querySelector(\"body\").scrollHeight + \"px\";\n            });\n        }\n    }\n}\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    let element = document.documentElement; // XXX fixme\n    // XXX init areas after JSF AJAX update not implemented yet!\n    DemoTest.initTestLinks(element);\n    DemoTest.initTestFrame(element);\n});\n//# sourceMappingURL=demo-test.js.map"],"names":["Prism.highlightElement"],"mappings":"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"}
\ No newline at end of file