@jhuix/showdowns 0.6.11 → 0.6.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"showdowns.core.min.js","sources":["../src/parser/converter.js","../src/parser/githubCodeBlocks.js","../src/parser/tables.js","../src/parser/showdown.js","../src/extensions/log.js","../src/extensions/date-format.js","../src/extensions/cdn.js","../src/extensions/utils.js","../src/extensions/showdown-abc.js","../src/extensions/showdown-toc.js","../src/extensions/showdown-css.js","../src/extensions/showdown-viz.js","../src/extensions/showdown-vega.js","../src/extensions/showdown-align.js","../src/extensions/asciimath2tex.js","../src/extensions/showdown-katex.js","../src/extensions/showdown-echarts.js","../src/extensions/showdown-mermaid.js","../src/utils/zlib-codec.js","../src/utils/plantuml-codec.js","../src/extensions/showdown-plantuml.js","../src/extensions/showdown-railroad.js","../src/extensions/showdown-sequence.js","../src/extensions/showdown-wavedrom.js","../src/extensions/showdown-footnotes.js","../src/extensions/showdown-container.js","../src/extensions/showdown-flowchart.js","../src/showdowns.js"],"sourcesContent":["/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\n\nshowdown.ConverterExtObj = function(flavor, asyncExtensions) {\n 'use strict';\n\n let outputAsyncModifiers = [],\n /**\n * The flavor set in this converter\n */\n currConvFlavor = flavor;\n\n _constructor();\n\n /**\n * Converter constructor\n * @private\n */\n function _constructor() {\n if (asyncExtensions) {\n showdown.helper.forEach(asyncExtensions, _parseAsyncExtension);\n }\n }\n\n /**\n * Parse async extension\n * @param {*} ext\n * @param {string} [name='']\n * @private\n */\n function _parseAsyncExtension(ext, name) {\n name = name || null;\n // If it's a string, the extension was previously loaded\n if (showdown.helper.isString(ext)) {\n name = showdown.helper.stdExtName(ext);\n ext = showdown.asyncExtension(name);\n if (showdown.helper.isUndefined(ext)) {\n throw Error(\n 'Extension \"' + name + '\" could not be loaded. It was either not found or is not a valid aync extension.'\n );\n }\n }\n\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n if (showdown.validateExtension(ext)) {\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n case 'output':\n outputAsyncModifiers.push(ext[i]);\n break;\n }\n }\n }\n }\n\n this.addAsyncExtension = function(extension, name) {\n name = name || null;\n _parseAsyncExtension(extension, name);\n };\n\n this.removeAsyncExtension = function(extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n for (var a = 0; a < extension.length; ++a) {\n const ext = extension[a];\n for (var j = 0; j < outputAsyncModifiers.length; ++j) {\n if (outputAsyncModifiers[j] === ext) {\n outputAsyncModifiers.splice(j, 1);\n }\n }\n }\n };\n\n this.getAsyncExtensions = function() {\n return outputAsyncModifiers;\n };\n\n /**\n * Get the currently flavor name of this converter\n * @returns {string}\n */\n this.getCurrFlavor = function() {\n return currConvFlavor;\n };\n\n /**\n * Set the currently flavor name of this converter\n * @param {string} flavor name\n */\n this.setCurrFlavor = function(name) {\n currConvFlavor = name;\n };\n};\n\nshowdown.Converter.prototype.initConvertExtObj = function(flavor, asyncExtensions) {\n this.extObj = new showdown.ConverterExtObj(flavor, asyncExtensions);\n\n this.resetOptions = function(converterOptions) {\n converterOptions = converterOptions || {};\n\n const globalOptions = showdown.getOptions();\n let options = this.getOptions();\n for (var gOpt in globalOptions) {\n if (globalOptions.hasOwnProperty(gOpt)) {\n options[gOpt] = globalOptions[gOpt];\n }\n }\n\n // Merge options\n if (typeof converterOptions === 'object') {\n for (var opt in converterOptions) {\n if (converterOptions.hasOwnProperty(opt)) {\n options[opt] = converterOptions[opt];\n }\n }\n }\n };\n\n /**\n * Set the flavor THIS converter should use\n * @param {string} name\n */\n this.setFlavor = function(name) {\n let preset = showdown.getFlavorOptions(name);\n if (showdown.helper.isUndefined(preset)) return;\n this.extObj.setCurrFlavor(name);\n let defaultOptions = showdown.getDefaultOptions(true);\n for (var option in defaultOptions) {\n if (defaultOptions.hasOwnProperty(option)) {\n this.getOptions()[option] = defaultOptions[option];\n }\n }\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n this.getOptions()[option] = preset[option];\n }\n }\n };\n\n /**\n * Get the currently set flavor of this converter\n * @returns {string}\n */\n this.getFlavor = function() {\n return this.extObj.getCurrFlavor();\n };\n\n this.addAsyncExtension = function(extension, name) {\n this.extObj.addAsyncExtension(extension, name);\n };\n\n this.removeAsyncExtension = function(extension) {\n this.extObj.removeAsyncExtension(extension);\n };\n\n // Because removeExtension function of converter has bug in showdown.js,\n // it needs to be overrode.\n this.removeExtension = function(extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n const exts = this.getAllExtensions();\n let langExtensions = exts.language;\n let outputModifiers = exts.output;\n for (var a = 0; a < extension.length; ++a) {\n const ext = extension[a];\n for (var i = 0; i < langExtensions.length; ++i) {\n if (langExtensions[i] === ext) {\n langExtensions.splice(i, 1);\n }\n }\n for (var j = 0; j < outputModifiers.length; ++j) {\n if (outputModifiers[j] === ext) {\n outputModifiers.splice(j, 1);\n }\n }\n }\n };\n\n /**\n * Async converts a markdown string into HTML\n * @param {string} text\n * @returns {*}\n */\n this.asyncMakeHtml = function(text, callback) {\n const content = this.makeHtml(text);\n const outputs = this.extObj.getAsyncExtensions();\n if (!outputs.length) {\n return Promise.resolve({html: content});\n }\n\n var globals = {\n outputs: outputs,\n converter: this\n };\n const parser = new DOMParser();\n const doc = parser.parseFromString(content, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n const options = this.getOptions();\n let scripts = [];\n let cssLinks = [];\n let result = Promise.resolve({ wrapper, options, globals, scripts, cssLinks });\n //forEach写法\n outputs.forEach(function(ext) {\n result = result.then(obj => {\n const filter = ext.filter(obj);\n return filter ? filter : obj;\n });\n });\n return result.then(obj => {\n if (typeof callback === 'function' && callback) {\n const promise = callback(obj);\n if (promise instanceof Promise) {\n return promise.then(obj => {\n return { html: obj.wrapper.innerHTML, extras: obj.extras, scripts: obj.scripts, cssLinks: obj.cssLinks };\n });\n }\n }\n return { html: obj.wrapper.innerHTML, extras: obj.extras, scripts: obj.scripts, cssLinks: obj.cssLinks };\n });\n };\n\n return this;\n};\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Override githubCodeBlocks parser;\n * Support language attribute, see the following format:\n * ```lang {\"theme\": \"github\", \"align\": \"center\"}\n * code block\n * ```\n * OR\n * ```lang [\"theme\": \"vox\", \"align\": \"right\"]\n * code block\n * ```\n */\n'use strict';\n\nimport showdown from 'showdown';\n\nshowdown.subParser('githubCodeBlocks', function(text, options, globals) {\n 'use strict';\n\n // early exit if option is not enabled\n if (!options.ghCodeBlocks) {\n return text;\n }\n\n text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n\n text += '¨0';\n\n text = text.replace(\n /(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*?)(?:[ \\t]*?)((?:\\{[\\S\\t ]*\\}|\\[[\\S\\t ]*\\])?)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g,\n function(wholeMatch, delim, language, langattr, codeblock) {\n var end = options.omitExtraWLInCodeBlocks ? '' : '\\n';\n\n // First parse the github code block\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n codeblock =\n '<pre><code' +\n (language ? ' class=\"' + language + ' language-' + language + '\"' : '') +\n (langattr ? ` data-lang='${langattr}'` : '') +\n '>' +\n codeblock +\n end +\n '</code></pre>';\n\n codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n // Since GHCodeblocks can be false positives, we need to\n // store the primitive text and the parsed text in a global var,\n // and then return a token\n return (\n '\\n\\n¨G' +\n (globals.ghCodeBlocks.push({\n text: wholeMatch,\n codeblock: codeblock\n }) -\n 1) +\n 'G\\n\\n'\n );\n }\n );\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\n\n// Override tables parser;\nshowdown.subParser('tables', function (text, options, globals) {\n 'use strict';\n\n if (!options.tables) {\n return text;\n }\n\n var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm,\n headerlessTableRgx = /^ {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n headerlessSingeColTblRgx = /^ {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n function parseStyles(sLine) {\n if (/^:[ \\t]*--*$/.test(sLine)) {\n return ' style=\"text-align:left;\"';\n } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n return ' style=\"text-align:right;\"';\n } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n return ' style=\"text-align:center;\"';\n } else {\n return '';\n }\n }\n\n function parseHeaders(header, style) {\n var id = '';\n header = header.trim();\n // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n if (options.tablesHeaderId || options.tableHeaderId) {\n id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n }\n header = showdown.subParser('spanGamut')(header, options, globals);\n\n return '<th' + id + style + '>' + header + '</th>\\n';\n }\n\n function mergeCells(cells, row, col, cell) {\n if (cell) {\n if (!options.tablesRowspan || cell !== '^^' || !row) {\n return;\n }\n\n // up merge except for first row cells\n for (var i = row - 1; i >= 0; --i) {\n if (!cells[i][col]) {\n for (var ii = col - 1; ii >= 0; -ii) {\n if (cells[i + 1][ii] && cells[i + 1][ii] !== '^^') {\n return;\n }\n\n if (cells[i][ii]) {\n if (!cells[i + 1][ii]) {\n return;\n }\n\n cells[i][ii] = cells[i][ii]\n .replace(/rowspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' rowspan=\"' + (row - i + 1) + '\"' + right;\n });\n return cell;\n }\n }\n } else if (cells[i][col] !== '^^') {\n cells[i][col] = cells[i][col]\n .replace(/rowspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' rowspan=\"' + (row - i + 1) + '\"' + right;\n });\n return cell;\n } else if (i === 0) {\n cells[i][col] = '<td rowspan=\"' + (row - i + 1) + '\"></td>\\n';\n return cell;\n }\n }\n\n return;\n }\n\n // left merge except for first column cells\n if (!col) {\n return;\n }\n\n for (var ii = col - 1; ii >= 0; --ii) {\n if (cells[row][ii]) {\n if (cells[row][ii] === '^^') {\n for (var i = row - 1; i >= 0; --i) {\n if (cells[i][ii + 1]) {\n return;\n }\n\n if (cells[i][ii] !== '^^') {\n cells[i][ii] = cells[i][ii]\n .replace(/colspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' colspan=\"' + (col - ii + 1) + '\"' + right;\n });\n return cell;\n }\n }\n } else {\n cells[row][ii] = cells[row][ii]\n .replace(/colspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' colspan=\"' + (col - ii + 1) + '\"' + right;\n });\n return cell;\n }\n } else if (ii === 0) {\n cells[row][ii] = '<td colspan=\"' + (col - ii + 1) + '\"></td>\\n';\n return cell;\n }\n }\n\n return;\n }\n\n function parseCells(cells, row, col, cell, style) {\n if (options.tablesMerge) {\n var direct = mergeCells(cells, row, col, cell);\n if (!showdown.helper.isUndefined(direct)) {\n return direct;\n }\n }\n\n cell = cell.trim();\n var subText = showdown.subParser('spanGamut')(cell, options, globals);\n return '<td' + style + '>' + subText + '</td>\\n';\n }\n\n function buildTable(headers, styles, cells) {\n var tb = '<table>\\n',\n tblLgn = styles.length;\n\n if (headers.length) {\n tb += '<thead>\\n<tr>\\n';\n for (var i = 0; i < headers.length; ++i) {\n tb += headers[i];\n }\n tb += '</tr>\\n</thead>\\n';\n }\n tb += '<tbody>\\n'\n\n for (i = 0; i < cells.length; ++i) {\n tb += '<tr>\\n';\n for (var ii = 0; ii < tblLgn; ++ii) {\n if (!options.tablesMerge || cells[i][ii] !== '^^') {\n tb += cells[i][ii];\n }\n }\n tb += '</tr>\\n';\n }\n tb += '</tbody>\\n</table>\\n';\n return tb;\n }\n\n function parseTableContent(rawTable, headerless) {\n var i,\n tableLines = rawTable.split('\\n');\n\n for (i = 0; i < tableLines.length; ++i) {\n // strip wrong first and last column if wrapped tables are used\n if (/^ {0,3}\\|/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n }\n if (/\\|[ \\t]*$/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n }\n // parse code spans first, but we only support one line code spans\n tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n }\n\n var rawStyles = [],\n rawCells = [],\n headers = [],\n styles = [],\n cells = [];\n\n if (headerless) {\n rawStyles = tableLines[0].split('|').map(function (s) {\n return s.trim();\n });\n tableLines.shift();\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n } else {\n var rawHeaders = tableLines[0].split('|').map(function (s) {\n return s.trim();\n });\n rawStyles = tableLines[1].split('|').map(function (s) {\n return s.trim();\n });\n\n tableLines.shift();\n tableLines.shift();\n\n if (rawHeaders.length < rawStyles.length) {\n return rawTable;\n }\n\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n\n for (i = 0; i < rawHeaders.length; ++i) {\n if (showdown.helper.isUndefined(styles[i])) {\n styles[i] = '';\n }\n headers.push(parseHeaders(rawHeaders[i], styles[i]));\n }\n }\n\n for (i = 0; i < tableLines.length; ++i) {\n if (tableLines[i].trim() === '') {\n continue;\n }\n rawCells.push(\n tableLines[i].split('|').map(function (s) {\n var cell = s.trim();\n if (cell === '' && s.length > 0) return s;\n return cell;\n })\n );\n }\n\n for (i = 0; i < rawCells.length; ++i) {\n var row = [];\n cells.push(row);\n for (var ii = 0; ii < styles.length; ++ii) {\n if (showdown.helper.isUndefined(rawCells[i][ii])) {\n rawCells[i][ii] = '';\n }\n row.push(parseCells(cells, i, ii, rawCells[i][ii], styles[ii]));\n }\n }\n\n return buildTable(headers, styles, cells);\n }\n\n function parseTable(rawTable) {\n return parseTableContent(rawTable, false);\n }\n\n function parseHeaderlessTable(rawTable) {\n return parseTableContent(rawTable, true);\n }\n\n text = globals.converter._dispatch('tables.before', text, options, globals);\n\n // find escaped pipe characters\n text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback);\n\n // parse multi column tables\n text = text.replace(tableRgx, parseTable);\n\n // parse one column tables\n text = text.replace(singeColTblRgx, parseTable);\n\n if (options.tablesHeaderless) {\n // parse multi column headerless tables\n text = text.replace(headerlessTableRgx, parseHeaderlessTable);\n\n // parse one column headerless tables\n text = text.replace(headerlessSingeColTblRgx, parseHeaderlessTable);\n }\n\n text = globals.converter._dispatch('tables.after', text, options, globals);\n\n return text;\n});\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\nimport './converter.js';\nimport './githubCodeBlocks.js';\nimport './tables.js';\n\nlet currFlavor = 'vanilla',\n flavors = {\n github: {\n ghCompatibleHeaderId: false,\n underline: true,\n rawHeaderId: true,\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n },\n ghost: {\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n },\n allOn: {\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n }\n },\n _asyncExtensions = {};\n\n/**\n * Gets or registers an async extension\n * @static\n * @param {string} name\n * @param {object|function=} ext\n * @returns {*}\n */\nshowdown.asyncExtension = function(name, ext) {\n 'use strict';\n\n if (!showdown.helper.isString(name)) {\n throw Error(\"Extension 'name' must be a string\");\n }\n\n name = showdown.helper.stdExtName(name);\n\n // Getter\n if (showdown.helper.isUndefined(ext)) {\n if (!_asyncExtensions.hasOwnProperty(name)) {\n throw Error('Async Extension named ' + name + ' is not registered!');\n }\n return _asyncExtensions[name];\n\n // Setter\n } else {\n // Expand extension if it's wrapped in a function\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n // Ensure extension is an array\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n if (showdown.validateExtension(ext)) {\n _asyncExtensions[name] = ext;\n }\n }\n};\n\n/**\n * Remove an async extension\n * @param {string} name\n */\nshowdown.removeAsyncExtension = function(name) {\n 'use strict';\n name = showdown.helper.stdExtName(name);\n delete _asyncExtensions[name];\n};\n\n/**\n * Removes all async extensions\n */\nshowdown.resetAsyncExtensions = function() {\n 'use strict';\n _asyncExtensions = {};\n};\n\n/**\n * Remove an extension\n * @param {string} name\n */\nshowdown.removeExtension = function(name) {\n 'use strict';\n name = showdown.helper.stdExtName(name);\n delete showdown.getAllExtensions[name];\n};\n\nconst orgSetFlavor = showdown.setFlavor;\nconst orgGetFlavorOptions = showdown.getFlavorOptions;\n\n/**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\nshowdown.setFlavor = function(name) {\n 'use strict';\n\n try {\n orgSetFlavor(name);\n currFlavor = name;\n if (!flavors.hasOwnProperty(name)) return;\n } catch {\n if (!flavors.hasOwnProperty(name)) return;\n showdown.resetOptions();\n currFlavor = name;\n }\n var preset = flavors[name];\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n showdown.getOptions()[option] = preset[option];\n }\n }\n};\n\n/**\n * Get the currently set flavor\n * @returns {string}\n */\nshowdown.getFlavor = function() {\n 'use strict';\n return currFlavor;\n};\n\nshowdown.setFlavorOptions = function(name, options) {\n if (options) {\n flavors[name] = Object.assign(flavors[name] || {}, options);\n }\n};\n\n/**\n * Get the options of a specified flavor. Returns undefined if the flavor was not found\n * @param {string} name Name of the flavor\n * @returns {{}|undefined}\n */\nshowdown.getFlavorOptions = function(name) {\n 'use strict';\n const flavor = orgGetFlavorOptions(name);\n if (!showdown.helper.isUndefined(flavor)) {\n if (!flavors.hasOwnProperty(name)) {\n return flavor;\n }\n return Object.assign(flavor, flavors[name]);\n }\n\n if (flavors.hasOwnProperty(name)) {\n return flavors[name];\n }\n};\n\nexport default showdown;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: dynamic loading js libs for local or cdnjs or jsdelivr\n */\n'use strict';\n\nimport './date-format.js';\n\nfunction format(s) {\n return `${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} ${s}`;\n}\n\nexport default format;\n","/*\r\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\r\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\r\n * Description: Date format extension\r\n */\r\n'use strict';\r\n// 对Date的扩展,将 Date 转化为指定格式的String\r\n// 月(M)、日(d)、小时(h/H)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,\r\n// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)\r\n// 例子:\r\n// (new Date()).Format(\"yyyy-MM-dd hh:mm:ss.S\") ==> 1970-01-01 08:09:04.423\r\n// (new Date()).Format(\"yyyy-M-d h:m:s.S\") ==> 1970-1-1 8:9:4.18\r\nDate.prototype.Format = function(fmt) {\r\n var o = {\r\n 'M+': this.getMonth() + 1, //月份\r\n 'd+': this.getDate(), //日\r\n 'h+': this.getHours(), //小时\r\n 'H+': this.getHours(), //小时\r\n 'm+': this.getMinutes(), //分\r\n 's+': this.getSeconds(), //秒\r\n 'q+': Math.floor((this.getMonth() + 3) / 3), //季度\r\n S: this.getMilliseconds() //毫秒\r\n };\r\n if (!fmt) fmt = 'yyyy-MM-dd hh:mm:ss.S';\r\n const matches = /(y+)/.exec(fmt);\r\n if (matches) fmt = fmt.replace(matches[1], (this.getFullYear() + '').substring(4 - matches[1].length));\r\n for (const k in o) {\r\n const m = new RegExp('(' + k + ')').exec(fmt)\r\n if (m) {\r\n let n = o[k];\r\n if (m[1].length == 1) n = ('000' + o[k]).substring(('' + o[k]).length);\r\n else if (m[1].length == 2) n = ('00' + o[k]).substring(('' + o[k]).length);\r\n fmt = fmt.replace(m[1], n);\r\n }\r\n }\r\n return fmt;\r\n};\r\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: dynamic loading js libs for local or cdnjs or jsdelivr\n */\n'use strict';\n\nlet cdnName = 'jsdelivr';\nlet scheme = document.location.protocol === 'file:' ? 'https://' : document.location.protocol + '//';\nlet defScheme = '';\nlet distScheme = '';\nlet uriPath = '';\n\nconst cdnSrc = {\n local: {\n ABCJS: '../node_modules/abcjs/dist/abcjs-basic.js',\n ABCJSCSS: '../node_modules/abcjs/abcjs-audio.css',\n echarts: '../node_modules/echarts/dist/echarts.js',\n Viz: '../node_modules/@viz-js/viz/lib/viz-standalone.js',\n Raphael: '../node_modules/raphael/raphael.min.js',\n flowchart: '../dist/diagrams/flowchart/flowchart.min.js',\n mermaid: '../node_modules/mermaid/dist/mermaid.js',\n katex: '../node_modules/katex/dist/katex.min.js',\n katexCSS: '../node_modules/katex/dist/katex.min.css',\n renderMathInElement: '../node_modules/katex/dist/contrib/auto-render.js',\n railroad: '../node_modules/railroad-diagrams/railroad-diagrams.js',\n railroadCSS: '../node_modules/railroad-diagrams/railroad-diagrams.css',\n Snap: '../node_modules/snapsvg/dist/snap.svg-min.js',\n WebFont: '../node_modules/webfontloader/webfontloader.js',\n underscore: '../node_modules/underscore/underscore-min.js',\n sequence: '../node_modules/@rokt33r/js-sequence-diagrams/dist/sequence-diagram-min.js',\n sequenceCSS: '../node_modules/@rokt33r/js-sequence-diagrams/dist/sequence-diagram-min.css',\n WaveDrom: '../node_modules/wavedrom/wavedrom.min.js',\n WaveDromSkin: {\n default: '../node_modules/wavedrom/skins/default.js',\n lowkey: '../node_modules/wavedrom/skins/lowkey.js',\n narrow: '../node_modules/wavedrom/skins/narrow.js',\n },\n vega: '../node_modules/vega/build/vega.min.js',\n vegaLite: '../node_modules/vega-lite/build/vega-lite.min.js',\n vegaEmbed: '../node_modules/vega-embed/build/vega-embed.min.js',\n },\n cdnjs: {\n ABCJS: scheme + 'cdnjs.cloudflare.com/ajax/libs/abcjs/6.5.1/abcjs-basic-min.js',\n ABCJSCSS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/abcjs-audio.css',\n echarts: scheme + 'cdnjs.cloudflare.com/ajax/libs/echarts/5.6.0/echarts.min.js',\n Viz: scheme + 'cdn.jsdelivr.net/npm/@viz-js/viz@3/lib/viz-standalone.js',\n Raphael: scheme + 'cdnjs.cloudflare.com/ajax/libs/raphael/2.3.0/raphael.min.js',\n flowchart: scheme + 'cdnjs.cloudflare.com/ajax/libs/flowchart/1.18.0/flowchart.min.js',\n mermaid: scheme + 'cdnjs.cloudflare.com/ajax/libs/mermaid/11.6.0/mermaid.min.js',\n katex: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.22/katex.min.js',\n katexCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.22/katex.min.css',\n renderMathInElement: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.22/contrib/auto-render.js',\n railroad: scheme + 'cdnjs.cloudflare.com/ajax/libs/railroad-diagrams/1.0.0/railroad-diagrams.js',\n railroadCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/railroad-diagrams/1.0.0/railroad-diagrams.css',\n Snap: scheme + 'cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js',\n WebFont: scheme + 'cdnjs.cloudflare.com/ajax/libs/webfont/1.6.28/webfontloader.js',\n underscore: scheme + 'cdnjs.cloudflare.com/ajax/libs/underscore.js/1.13.7/underscore-min.js',\n sequence: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.js',\n sequenceCSS: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.css',\n WaveDrom: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/wavedrom.min.js',\n WaveDromSkin: {\n default: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/default.js',\n lowkey: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/lowkey.js',\n narrow: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/narrow.js',\n },\n vega: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega/6.1.2/vega.min.js',\n vegaLite: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega-lite/6.1.0/vega-lite.min.js',\n vegaEmbed: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega-embed/7.0.2/vega-embed.min.js',\n },\n jsdelivr: {\n ABCJS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/dist/abcjs-basic-min.js',\n ABCJSCSS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/abcjs-audio.css',\n echarts: scheme + 'cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js',\n Viz: scheme + 'cdn.jsdelivr.net/npm/@viz-js/viz@3/lib/viz-standalone.js',\n Raphael: scheme + 'cdn.jsdelivr.net/npm/raphael@2/raphael.min.js',\n flowchart: scheme + 'cdnjs.cloudflare.com/ajax/libs/flowchart/1.18.0/flowchart.min.js',\n mermaid: scheme + 'cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js',\n katex: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/katex.min.js',\n katexCSS: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/katex.min.css',\n renderMathInElement: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/contrib/auto-render.js',\n railroad: scheme + 'cdn.jsdelivr.net/npm/railroad-diagrams@1/railroad-diagrams.js',\n railroadCSS: scheme + 'cdn.jsdelivr.net/npm/railroad-diagrams@1/railroad-diagrams.css',\n Snap: scheme + 'cdn.jsdelivr.net/npm/snapsvg@0/dist/snap.svg-min.js',\n WebFont: scheme + 'cdn.jsdelivr.net/npm/webfontloader@1/webfontloader.js',\n underscore: scheme + 'cdn.jsdelivr.net/npm/underscore@1/underscore-min.js',\n sequence: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.js',\n sequenceCSS: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.css',\n WaveDrom: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/wavedrom.min.js',\n WaveDromSkin: {\n default: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/default.js',\n lowkey: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/lowkey.js',\n narrow: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/narrow.js',\n },\n vega: scheme + 'cdn.jsdelivr.net/npm/vega@6/build/vega.min.js',\n vegaLite: scheme + 'cdn.jsdelivr.net/npm/vega-lite@6/build/vega-lite.min.js',\n vegaEmbed: scheme + 'cdn.jsdelivr.net/npm/vega-embed@7/build/vega-embed.min.js',\n },\n};\n\nfunction setCDN(name, scheme_default, scheme_dist, uri_path) {\n if (name in cdnSrc) {\n cdnName = name;\n }\n\n if (typeof scheme_default === 'string' && scheme_default) {\n defScheme = scheme_default;\n }\n\n if (typeof scheme_dist === 'string' && scheme_dist) {\n distScheme = scheme_dist;\n }\n\n if (typeof uri_path === 'string' && uri_path) {\n if (uriPath.at(uriPath.length - 1) !== '/') {\n uri_path += '/';\n }\n uriPath = uri_path;\n }\n}\n\nfunction getCDN() {\n return cdnName;\n}\n\nfunction getName(name) {\n if (typeof name === 'object') {\n const key = Object.keys(name)[0];\n const val = name[key];\n if (typeof val === 'string') {\n return key + '-' + val;\n }\n }\n\n return name;\n}\n\nfunction getUrl(url) {\n try {\n const uri = new URL(url);\n if (uri.protocol === 'dist:') {\n url = url.substring(uri.protocol.length + 2);\n if (url.substring(0, 8) === '../dist/') {\n url = distScheme + url;\n } else {\n url = defScheme + url;\n }\n return url;\n }\n\n if (uri.protocol === 'file:') {\n if (uriPath) {\n const preUri = new URL(uriPath);\n url = preUri.origin + '/' + url.substring(8);\n return url;\n }\n }\n } catch {\n if (uriPath) {\n const prefix = './';\n if (url.substring(0, prefix.length) === prefix) {\n url = url.substring(prefix.length);\n }\n url = uriPath + url;\n }\n }\n return url;\n}\n\nfunction getSrc(native, name, src, def) {\n if (typeof src === 'undefined' || !src) {\n src = getCDN();\n }\n if (cdnSrc.hasOwnProperty(src)) {\n const cdn = cdnSrc[src];\n let url = '';\n if (typeof name === 'object') {\n const key = Object.keys(name)[0];\n const val = name[key];\n if (cdn[key] && typeof val === 'string' && val && cdn[key][val]) {\n url = cdn[key][val];\n }\n } else if (cdn[name]) {\n url = cdn[name];\n }\n\n if (url) {\n if (native || url.substring(0, scheme.length) === scheme) {\n def = url;\n } else if (url.substring(0, 8) === '../dist/') {\n def = distScheme + url;\n } else {\n def = defScheme + url;\n }\n }\n }\n return def;\n}\n\nfunction loadScript(name, src) {\n return new Promise((resovle, reject) => {\n if (!name || typeof document === 'undefined') {\n reject('Args is invaild!');\n }\n\n if (typeof src === 'undefined') {\n src = '';\n }\n\n src = getSrc(false, name, src);\n if (!src) {\n reject(name + ' script source invaild!');\n }\n\n const id = 'script-' + getName(name).toLowerCase();\n let script = document.getElementById(id);\n if (script) {\n return resovle(name);\n }\n\n const head = document.head || document.getElementsByTagName('head')[0];\n script = document.createElement('script');\n script.src = src;\n script.id = id;\n script.onload = () => {\n resovle(name);\n };\n head.appendChild(script);\n });\n}\n\nfunction unloadScript(name) {\n name = getName(name);\n const e = document.getElementById('script-' + name.toLowerCase());\n if (e) {\n const head = document.head || document.getElementsByTagName('head')[0];\n head.removeChild(e);\n }\n}\n\nfunction loadStyleSheet(name, css) {\n if (!name || typeof document === 'undefined') {\n return '';\n }\n\n if (typeof css === 'undefined') {\n css = '';\n }\n\n css = getSrc(false, name, css);\n if (!css) {\n return '';\n }\n\n const id = 'css-' + getName(name).toLowerCase();\n let script = document.getElementById(id);\n if (!script) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = css;\n link.id = id;\n head.appendChild(link);\n }\n return cdnName === 'local' ? '' : css;\n}\n\nfunction unloadStyleSheet(name) {\n name = getName(name);\n const e = document.getElementById('css-' + name.toLowerCase());\n if (e) {\n const head = document.head || document.getElementsByTagName('head')[0];\n head.removeChild(e);\n }\n}\n\nconst cdnjs = {\n setCDN,\n getCDN,\n getUrl,\n getSrc,\n loadScript,\n unloadScript,\n loadStyleSheet,\n unloadStyleSheet,\n};\n\nexport default cdnjs;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nfunction loadStyle(name, css) {\n if (!name || !css || typeof document === 'undefined') {\n return false;\n }\n\n const id = 'css-' + name.toLowerCase();\n const script = document.getElementById(id);\n if (!script) {\n const head = document.head || document.getElementsByTagName('head')[0];\n const style = document.createElement('style');\n style.id = id;\n style.type = 'text/css';\n style.innerText = css;\n head.appendChild(style);\n }\n return true;\n}\n\nfunction loadStylesheet(cssLink, id) {\n if (!cssLink || typeof document === 'undefined') {\n return false;\n }\n\n let stylesheet = null;\n if (id) {\n stylesheet = document.getElementById(id);\n }\n if (!stylesheet) {\n const head = document.head || document.getElementsByTagName('head')[0];\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = cssLink;\n if (id) link.id = id;\n head.appendChild(link);\n }\n return true;\n}\n\nfunction removeAllStylesheet(prefix) {\n if (!prefix) return;\n const head = document.head || document.getElementsByTagName('head')[0];\n const links = head.querySelectorAll('link');\n links.forEach((link) => {\n if (link.id && link.id.substring(0, prefix.length) === prefix) {\n head.removeChild(link);\n }\n });\n}\n\nfunction loadScript(id, code, element) {\n return new Promise((res, rej) => {\n if (!id || !code || typeof document === 'undefined') {\n return rej('Args is invaild!');\n }\n\n let script = document.getElementById(id);\n if (script) {\n return res(true);\n }\n\n if (!element) {\n element = document.body;\n } else if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n script = document.createElement('script');\n script.id = id;\n script.type = 'text/javascript';\n script.text = code;\n element.appendChild(script);\n res(true);\n });\n}\n\nfunction interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nfunction renderCacheElement(doc, id, name, callback) {\n if (typeof window !== 'undefined' && window.document) {\n doc = window.document;\n }\n const el = doc.createElement('div');\n el.id = id;\n el.className = name;\n el.style.display = 'none';\n doc.body.appendChild(el);\n if (typeof callback === 'function' && callback) {\n const result = callback(el);\n if (result instanceof Promise) {\n result.then((el) => {\n doc.body.removeChild(el);\n el.style.display = '';\n });\n return el.outerHTML;\n }\n }\n doc.body.removeChild(el);\n el.style.display = '';\n return el.outerHTML;\n}\n\nfunction renderElement(doc, id, name) {\n if (typeof window !== 'undefined' && window.document) {\n doc = window.document;\n }\n const el = doc.createElement('div');\n el.id = id;\n el.className = name;\n doc.body.appendChild(el);\n return el;\n}\n\nfunction createElementMeta(name, element, callback) {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return false;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n if (langobj.width) {\n if (typeof langobj.width !== 'string') {\n langobj.width = langobj.width + 'px';\n }\n }\n if (langobj.height) {\n if (typeof langobj.height !== 'string') {\n langobj.height = langobj.height + 'px';\n }\n }\n }\n\n let code = element.textContent.trim();\n if (callback && typeof callback === 'function') {\n code = callback(code);\n }\n const className =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const id = name.toLowerCase() + '-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n element.id = id;\n return {\n id: id,\n container: id + '-container',\n className: className,\n data: code,\n element: element,\n lang: langobj,\n };\n}\n\nfunction addCssLink(obj, link, id) {\n if (!obj.cssLinks) {\n obj.cssLinks = [];\n } else {\n if (!Array.isArray(obj.cssLinks)) {\n obj.cssLinks = [obj.cssLinks];\n }\n }\n\n obj.cssLinks.push({\n id: id,\n link: link,\n });\n return obj;\n}\n\nfunction addScript(obj, script) {\n if (!obj.scripts) {\n obj.scripts = [];\n } else {\n if (!Array.isArray(obj.scripts)) {\n obj.scripts = [obj.scripts];\n }\n }\n obj.scripts.push(script);\n return obj;\n}\n\nfunction addExtra(obj, extra) {\n if (!obj.extras) {\n obj.extras = [];\n } else {\n if (!Array.isArray(obj.extras)) {\n obj.extras = [obj.extras];\n }\n }\n obj.extras.push(extra);\n return obj;\n}\n\nfunction hashString(str) {\n const seed = 31;\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (Math.imul(seed, hash) + char) | 0; // 使用32位整数运算\n }\n return hash >>> 0; // 确保无符号整数\n}\n\nconst utils = {\n interopDefault,\n loadStyle,\n loadStylesheet,\n loadScript,\n removeAllStylesheet,\n renderCacheElement,\n renderElement,\n createElementMeta,\n addCssLink,\n addScript,\n addExtra,\n hashString,\n};\n\nexport default utils;\n","/*\n * Copyright (c) 2024-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown abc extension for markdown\n */\n'use strict';\n\nconst extName = 'abc';\nconst cssCdnName = 'ABCJSCSS';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown abcjs extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof ABCJS === 'undefined') {\n var ABCJS = window.ABCJS || undefined;\n}\n\nfunction hasAbc() {\n return !!ABCJS;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasAbc();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n utils.loadStyle(\n 'abc-audio',\n '.highlight{fill: #0a9ecc;} .abcjs-cursor{stroke: red;}' +\n ' .abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed{border: none;}' +\n ' .abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed svg path{fill: #6eaa49;}'\n );\n cdnjs.loadScript('ABCJS').then((name) => {\n ABCJS = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasAbc()) return;\n cdnjs.unloadScript('ABCJS');\n cdnjs.unloadStyleSheet(cssCdnName);\n ABCJS = null;\n window.ABCJS = null;\n dync = false;\n}\n\nfunction abcCreateEnv() {\n if (typeof ABCJS === 'undefined') {\n var ABCJS = window.ABCJS || undefined;\n }\n\n function cursorControl(id) {\n const self = this;\n self.onReady = function () {};\n self.onStart = function () {\n const tag = '#' + id + ' svg';\n const svg = document.querySelector(tag);\n const cursor = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n cursor.setAttribute('class', 'abcjs-cursor');\n cursor.setAttributeNS(null, 'x1', 0);\n cursor.setAttributeNS(null, 'y1', 0);\n cursor.setAttributeNS(null, 'x2', 0);\n cursor.setAttributeNS(null, 'y2', 0);\n svg.appendChild(cursor);\n };\n self.beatSubdivisions = 2;\n self.onBeat = function (beatNumber, totalBeats, totalTime) {};\n self.onEvent = function (ev) {\n if (ev.measureStart && ev.left === null) return; // this was the second part of a tie across a measure line. Just ignore it.\n\n const className = '#' + id + ' svg .highlight';\n const lastSelection = document.querySelectorAll(className);\n for (let k = 0; k < lastSelection.length; k++) lastSelection[k].classList.remove('highlight');\n\n for (let i = 0; i < ev.elements.length; i++) {\n const note = ev.elements[i];\n for (let j = 0; j < note.length; j++) {\n note[j].classList.add('highlight');\n }\n }\n\n const tag = '#' + id + ' svg .abcjs-cursor';\n const cursor = document.querySelector(tag);\n if (cursor) {\n cursor.setAttribute('x1', ev.left - 2);\n cursor.setAttribute('x2', ev.left - 2);\n cursor.setAttribute('y1', ev.top);\n cursor.setAttribute('y2', ev.top + ev.height);\n }\n };\n self.onFinished = function () {\n const className = '#' + id + ' svg .highlight';\n const els = document.querySelectorAll(className);\n for (let i = 0; i < els.length; i++) {\n els[i].classList.remove('highlight');\n }\n const tag = '#' + id + ' svg .abcjs-cursor';\n const cursor = document.querySelector(tag);\n if (cursor) {\n cursor.setAttribute('x1', 0);\n cursor.setAttribute('x2', 0);\n cursor.setAttribute('y1', 0);\n cursor.setAttribute('y2', 0);\n }\n };\n }\n\n window.abcEnv = {\n abcOptions: {\n add_classes: true,\n responsive: 'resize',\n },\n setTune(render, userAction, synthControl) {\n const id = render.id;\n const abc = render.data;\n if (!synthControl) {\n ABCJS.renderAbc(id, abc, this.abcOptions);\n return;\n }\n\n synthControl.disable(true);\n const visualObj = ABCJS.renderAbc(id, abc, this.abcOptions)[0];\n const midiBuffer = new ABCJS.synth.CreateSynth();\n midiBuffer\n .init({\n visualObj: visualObj,\n })\n .then(function (response) {\n synthControl\n .setTune(visualObj, userAction)\n .then(function (response) {\n console.log('Audio successfully loaded.');\n })\n .catch(function (error) {\n console.warn('Audio problem:', error);\n });\n })\n .catch(function (error) {\n console.warn('Audio problem:', error);\n });\n },\n load(audio, render) {\n let synthControl;\n if (audio) {\n const id = '#' + audio;\n if (ABCJS.synth.supportsAudio()) {\n synthControl = new ABCJS.synth.SynthController();\n synthControl.load(id, new cursorControl(render.id), {\n displayLoop: true,\n displayRestart: true,\n displayPlay: true,\n displayProgress: true,\n displayWarp: true,\n });\n } else {\n document.querySelector(id).innerHTML =\n \"<div class='audio-error'>Audio is not supported in this browser.</div>\";\n }\n }\n this.setTune(render, false, synthControl);\n },\n };\n}\n\nfunction loadABC(audio, render) {\n const result = function () {\n window.abcEnv.load(audio, render);\n };\n\n result.toString = function () {\n return `function(){\n const audio = '${audio}';\n const render = ${JSON.stringify(render)};\n window.abcEnv.load(audio, render);\n }`;\n };\n\n return result;\n}\n\nfunction onRenderAbc(resolve, scripts, meta) {\n if (hasAbc()) {\n const id = meta.id;\n const name = meta.className;\n const container = meta.container;\n let style = '';\n if (meta.lang) {\n if (meta.lang.width) {\n style += `width:${meta.lang.width};`;\n }\n if (meta.lang.height) {\n style += `height:${meta.lang.height};`;\n }\n }\n let html = '';\n if (style) {\n html += `<div id=\"${container}\" class=\"${name}\" style=\"${style}\">`;\n html += `<div id=\"${id}\" style=\"width:100%;height:100%;display:inline-block\"></div>`;\n } else {\n html += `<div id=\"${container}\" class=\"${name}\">`;\n html += `<div id=\"${id}\"></div>`;\n }\n if (!meta.lang || !meta.lang.audio) {\n const data = meta.data;\n const doc = meta.element.ownerDocument;\n html += '</div>';\n meta.element.parentNode.outerHTML = html;\n const element = doc.getElementById(id);\n ABCJS.renderAbc(element, data, {\n add_classes: true,\n responsive: 'resize',\n });\n return resolve(true);\n }\n\n const cssLink = meta.cssLink;\n const data = meta.data;\n const audio = id + '-audio';\n if (style) {\n html += cssLink\n ? `<div id=\"${audio}\" style=\"width:100%;height:100%;display:inline-block\" class=\"css-abc\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${audio}\" style=\"width:100%;height:100%;display:inline-block\"></div>`;\n } else {\n html += cssLink ? `<div id=\"${audio}\" class=\"css-abc\" data-css=\"${cssLink}\"></div>` : `<div id=\"${audio}\"></div>`;\n }\n html += '</div>';\n meta.element.parentNode.outerHTML = html;\n\n const script = {\n id: container,\n code: loadABC(audio, {\n id: id,\n class: name,\n data: data,\n }),\n host: `#${container}`,\n };\n scripts.push(script);\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderAbc(resolve, scripts, meta);\n }, 10);\n}\n\n/**\n * render abc graphs\n */\nfunction renderAbc(element, scripts) {\n return new Promise((resolve) => {\n let meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n meta.cssLink = cdnjs.getSrc(true, cssCdnName);\n onRenderAbc(resolve, scripts, meta);\n });\n}\n\n// <div class=\"abc\"></div>\nfunction renderAbcElements(elements, scripts) {\n const script = {\n outer: [\n {\n name: 'ABCJS',\n src: cdnjs.getSrc(false, 'ABCJS', 'jsdelivr'),\n },\n ],\n id: 'abcjs-ext',\n code: abcCreateEnv,\n inner: [],\n };\n scripts.push(script);\n dyncLoadScript();\n return new Promise((resolve) => {\n const promiseArray = [];\n elements.forEach((element) => {\n promiseArray.push(renderAbc(element, script.inner));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownAbc() {\n return [\n {\n type: 'output',\n filter: function (obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the abc in code blocks\n const elements = wrapper.querySelectorAll(`code.${extName}.language-${extName}`);\n if (!elements.length) {\n return false;\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(true, cssCdnName),\n };\n utils.addCssLink(obj, this.config.cssLink, 'css-abc');\n console.log(format(`Begin render ${extName} elements.`));\n return renderAbcElements(elements, obj.scripts).then(() => {\n console.log(format(`End render ${extName} elements.`));\n return obj;\n });\n },\n },\n ];\n}\n\nexport default showdownAbc;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown toc extension for markdown\n */\n'use strict';\n\nimport format from './log';\nimport utils from './utils';\n\nfunction createHeadingElement(wrapper, element, toc, headingLevel, nexthead) {\n try {\n if (nexthead) {\n if (headingLevel > 1) {\n const parent = toc.parentNode;\n if (parent && parent.tagName === 'UL') {\n parent.classList.add('toc-multi');\n }\n }\n const title = toc.querySelector('div');\n if (title) {\n title.classList.remove('toc-title');\n title.classList.add('toc-multi-title');\n const icon = title.querySelector('i');\n if (icon) {\n icon.classList.remove('toc-chapter');\n icon.classList.add('toc-multi-chapter');\n icon.innerHTML = '<svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-expand\"></use></svg>';\n }\n }\n toc = toc.appendChild(wrapper.ownerDocument.createElement('ul'));\n if (headingLevel > 1) {\n toc.classList.add(`toc-level-${headingLevel}`);\n } else {\n toc.classList.add('toc-main');\n }\n }\n toc = toc.appendChild(wrapper.ownerDocument.createElement('li'));\n if (element) {\n const child = toc.appendChild(wrapper.ownerDocument.createElement('div'));\n child.classList.add(`toc-title-${headingLevel}`, `toc-title`);\n const icon = child.appendChild(wrapper.ownerDocument.createElement('i'));\n icon.classList.add('iconfont', 'toc-chapter');\n icon.innerHTML = '<svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-chapter-l\"></use></svg>';\n const link = child.appendChild(wrapper.ownerDocument.createElement('a'));\n link.appendChild(wrapper.ownerDocument.createTextNode(element.textContent));\n link.href = '#' + element.id;\n }\n } catch {\n console.warn(format('append child error:'), wrapper);\n }\n return toc;\n}\n\nfunction appendTocElement(wrapper, element, currTocNode, headingLevel) {\n // If the current heading level is not greater than the heading level of current toc node,\n // return the toc node whose heading level is less than the current heading level in the toc node list.\n // At the same time, clearing the invalid toc node.\n if (headingLevel <= currTocNode.headingLevel) {\n let tempTocNode = null;\n while (currTocNode) {\n if (headingLevel > currTocNode.headingLevel) break;\n tempTocNode = currTocNode;\n currTocNode = tempTocNode.parentNode;\n // Remove toc node from node list and clean it.\n tempTocNode.parentNode = null;\n tempTocNode.toc = null;\n tempTocNode.headingLevel = null;\n tempTocNode.preLevel = null;\n }\n if (currTocNode) appendTocElement(wrapper, element, currTocNode, headingLevel);\n return currTocNode;\n }\n\n // If the current heading level is greater than the heading level of\n // the latest heading of the current toc node,\n // you need to create a new level heading with out list.\n // Otherwise add a heading of the same heading level.\n if (headingLevel > currTocNode.preLevel) {\n currTocNode.preLevel++;\n while (headingLevel > currTocNode.preLevel) {\n currTocNode.toc = createHeadingElement(wrapper, null, currTocNode.toc, headingLevel, true);\n currTocNode.preLevel++;\n }\n currTocNode.toc = createHeadingElement(wrapper, element, currTocNode.toc, headingLevel, true);\n } else {\n while (headingLevel < currTocNode.preLevel) {\n if (currTocNode.toc) currTocNode.toc = currTocNode.toc.parentNode;\n if (currTocNode.toc) currTocNode.toc = currTocNode.toc.parentNode;\n currTocNode.preLevel--;\n }\n if (currTocNode.toc) currTocNode.toc = currTocNode.toc.parentNode;\n currTocNode.toc = createHeadingElement(wrapper, element, currTocNode.toc, headingLevel, false);\n }\n\n if (currTocNode.parentNode) appendTocElement(wrapper, element, currTocNode.parentNode, headingLevel);\n return currTocNode;\n}\n\nfunction renderTocElements(wrapper, config) {\n let element = null;\n let headingLevel = 0;\n let currTocNode = null;\n let result = false;\n let firstHeadOne = false;\n let totalToc = null;\n\n config.extraDocs = [];\n config.extraDocs.push(\n '<div id=\"toc-svgs\" class=\"hidden\"><svg aria-hidden=\"true\" style=\"position: absolute; width: 0px; height: 0px; overflow: hidden;\"><symbol id=\"icon-chapter-s\" viewBox=\"0 0 1024 1024\"><path d=\"M725.108359 579.864261c11.519371-117.753568-94.714826-195.829303-165.110981-247.666471l-10.879406-7.679581-21.118846-15.359161c-40.317798-28.798427-81.915525-58.876784-95.994756-95.994756-15.999126-41.597728-13.439266-74.235945 7.67958-97.274686 26.878532-29.438392 90.235071-35.838042 120.313428-11.519371 26.238567 20.478881 26.878532 53.117098 24.958637 70.396154-2.55986 24.318672 14.719196 46.717448 39.037867 49.917274 24.318672 2.55986 46.717448-14.719196 49.917274-39.037868 7.039615-60.796679-14.079231-115.833673-58.236819-151.03175C547.838042-19.143018 432.644335-8.903578 373.127586 55.732892c-44.157588 47.997378-53.117098 115.193708-24.958637 189.429652 8.319546 23.038742 21.758811 42.877658 37.117973 60.156714-36.478007 34.558112-73.59598 78.075735-79.355665 138.872414C294.411886 561.94524 400.646083 640.020975 471.042237 691.858143l10.879406 7.679581 21.118846 15.359161c40.317798 28.798427 81.915525 58.876784 95.994757 95.994756 15.999126 41.597728 13.439266 74.235945-7.679581 97.274686-26.878532 29.438392-90.235071 35.838042-120.313428 11.519371-26.238567-20.478881-26.878532-53.117098-24.958636-70.396154 2.55986-24.318672-14.719196-46.717448-39.037868-49.917274s-46.717448 14.719196-49.917273 39.037868c-7.039615 60.796679 14.079231 115.833673 58.236819 151.03175 29.438392 23.038742 67.196329 34.558112 106.234197 34.558112 50.557238 0 102.394407-19.198951 135.672589-55.676959 44.157588-47.997378 53.117098-115.193708 24.958636-189.429652-8.319546-23.038742-21.758811-42.877658-37.117972-60.156714 36.478007-34.558112 74.235945-78.075735 79.99563-138.872414z m-201.588988 39.677833c-60.156714-44.157588-135.672589-99.834547-129.272939-166.390911 3.199825-33.278182 28.158462-60.156714 57.596854-87.675211 7.679581 5.759685 15.999126 11.519371 23.678707 17.279056 7.039615 5.11972 13.439266 9.599476 19.838916 14.719196l10.879406 8.319546c60.156714 44.157588 135.672589 99.834547 129.272938 166.39091-3.199825 33.278182-28.158462 60.156714-57.596854 87.675211-8.319546-5.759685-15.999126-11.519371-23.678706-17.279056-7.039615-5.11972-13.439266-9.599476-19.838917-14.719196l-10.879405-8.319545z\"></path></symbol><symbol id=\"icon-chapter-l\" viewBox=\"0 0 1024 1024\"><path d=\"M791.272727 11.636364a81.454545 81.454545 0 0 1 81.175273 74.752L872.727273 93.090909v884.363636a34.909091 34.909091 0 0 1-51.060364 30.999273l-4.142545-2.606545-142.615273-101.888-142.615273 101.934545a34.909091 34.909091 0 0 1-30.813091 4.840727l-5.026909-2.048-4.747636-2.792727L349.090909 903.912727l-142.615273 101.934546a34.955636 34.955636 0 0 1-53.946181-18.944l-0.93091-4.654546L151.272727 977.454545V93.090909A81.454545 81.454545 0 0 1 226.024727 11.915636L232.727273 11.636364h558.545454z m-139.636363 605.090909H372.363636l-4.747636 0.325818A34.909091 34.909091 0 0 0 372.363636 686.545455h279.272728l4.747636-0.325819A34.909091 34.909091 0 0 0 651.636364 616.727273z m0-186.181818H372.363636l-4.747636 0.325818A34.909091 34.909091 0 0 0 372.363636 500.363636h279.272728l4.747636-0.325818A34.909091 34.909091 0 0 0 651.636364 430.545455z m0-186.181819H372.363636l-4.747636 0.325819A34.909091 34.909091 0 0 0 372.363636 314.181818h279.272728l4.747636-0.325818A34.909091 34.909091 0 0 0 651.636364 244.363636z\"></path></symbol><symbol id=\"icon-toc\" viewBox=\"0 0 1024 1024\"><path d=\"M62.500473 512.163729l61.447491-40.958854 387.221112 202.039529L898.394281 471.204875l61.443397 40.958854-448.668603 244.728794L62.500473 512.163729zM62.500473 308.228013l448.668603-244.732887 448.668603 244.732887-448.668603 244.724701L62.500473 308.228013zM511.169075 877.18012l387.225205-202.035436 61.443397 40.958854L511.169075 960.836425 62.500473 716.104561l61.447491-40.958854L511.169075 877.18012z\"></path></symbol><symbol id=\"icon-collapse\" viewBox=\"0 0 1024 1024\"><path d=\"M85.781832 219.399571h73.720856c20.35996 0 36.879928-16.359968 36.879928-36.559928s-16.519968-36.559929-36.879928-36.559929h-73.719856c-20.35996 0-36.860928 16.359968-36.860928 36.559929 0 20.199961 16.499968 36.559929 36.859928 36.559928zM50.462901 475.419071c0 20.199961 16.500968 36.579929 36.859928 36.579929h72.179859c20.35996 0 36.879928-16.379968 36.879928-36.579929s-16.519968-36.579929-36.879928-36.579928h-72.179859c-20.35996 0-36.859928 16.379968-36.859928 36.579928z m145.919715 292.577429c0-20.199961-16.519968-36.595929-36.879928-36.595929h-73.719856c-20.35996 0-36.860928 16.395968-36.860928 36.595929 0 20.180961 16.499968 36.562929 36.859928 36.562929h73.720856c20.35996 0 36.879928-16.381968 36.879928-36.562929z\"></path><path d=\"M933.660176 38.839924l-73.718856-2.279995c0-20.198961-16.519968-36.559929-36.879928-36.559929h-661.998707c-20.35996 0-36.879928 16.359968-36.879928 36.559929v70.879861h36.879928s73.359857 6.840987 73.359857 73.140857c0 0 0.779998 73.279857-75.239853 73.279857l-34.999932 2.119996 0.759999 144.019719 34.399933-0.02s75.879852-0.02 75.879852 77.699848c0 0-7.057986 70.879862-76.179852 70.879862l-34.699932 0.019-0.619999 143.980718h36.740929s73.559856 2.279996 73.559856 75.437853c0 0-0.14 75.402853-76.179851 75.402853l-33.199935-2.279996-0.46 73.159857s42.239918 109.718786 106.759792 109.718786h705.018623s34.557933-6.877987 34.557932-34.298933V75.421853s-6.899987-36.580929-36.859928-36.580929zM306.9634 255.9795h479.238064v292.579429h-479.239064V255.9795zM897.939246 916.55821s1.159998 34.279933-37.999926 34.279933H233.243544s-38.019926-12.559975-38.019925-37.719926l627.838773-0.36c20.35996 0 36.879928-16.379968 36.879928-36.579928V69.719864l37.998926 12.559975v834.278371z\"></path><path d=\"M694.042644 329.119357H399.14022c-10.19998 0-18.439964 8.199984-18.439964 18.319964 0 10.07998 8.239984 18.259964 18.439964 18.259965h294.901424c10.17898 0 18.418964-8.179984 18.418964-18.259965 0-10.11898-8.239984-18.319964-18.419964-18.319964z m0 109.719786H399.14022c-10.19998 0-18.439964 8.199984-18.439964 18.279964 0 10.11998 8.239984 18.299964 18.439964 18.299964h294.901424c10.17898 0 18.418964-8.179984 18.418964-18.299964 0-10.07998-8.239984-18.279964-18.419964-18.279964z\"></path></symbol><symbol id=\"icon-chapter\" viewBox=\"0 0 1024 1024\"><path d=\"M832 128v768H256V128h576m64-64H192v896h704V64z\" ></path><path d=\"M161.3 296.2v-0.2H320v-40H161.3c-35.5 0-64.3 28.7-64.3 64s28.8 64 64.3 64h90v-40h-90v-0.2c-13.3 0-24.1-10.7-24.1-23.8 0-13.1 10.8-23.8 24.1-23.8z m0 192v-0.2H320v-40H161.3c-35.5 0-64.3 28.7-64.3 64s28.8 64 64.3 64h90v-40h-90v-0.2c-13.3 0-24.1-10.7-24.1-23.8 0-13.1 10.8-23.8 24.1-23.8z m0 192v-0.2H320v-40H161.3c-35.5 0-64.3 28.7-64.3 64s28.8 64 64.3 64h90v-40h-90v-0.2c-13.3 0-24.1-10.7-24.1-23.8 0-13.1 10.8-23.8 24.1-23.8z\" ></path><path d=\"M288 277a32 32 0 1 0 64 0 32 32 0 1 0-64 0zM288 469a32 32 0 1 0 64 0 32 32 0 1 0-64 0zM288 662a32 32 0 1 0 64 0 32 32 0 1 0-64 0zM384 256h385v40H384z m0 128h385v40H384z m0 128h385v40H384z m0 128h256v40H384z\" ></path></symbol><symbol id=\"icon-expand\" viewBox=\"0 0 1024 1024\"><path d=\"M731.093333 128c82.346667 0 158.08 20.906667 218.88 56.32 6.4 3.626667 10.026667 10.88 10.026667 18.346667v667.306666c0 12.16-9.386667 20.906667-19.84 20.906667-2.986667 0-5.76-0.64-8.746667-2.133333-57.386667-29.226667-126.08-46.08-200.32-46.08s-141.866667 17.066667-199.04 45.653333c-2.986667 1.493333-5.973333 2.986667-8.96 4.693333-0.426667 0.213333-0.853333 0.64-1.493333 0.853334-5.973333 3.2-13.226667 3.2-19.2 0-3.413333-1.92-6.826667-3.626667-10.453333-5.546667-56.96-28.586667-125.44-45.653333-199.04-45.653333s-143.146667 16.853333-200.32 46.08c-2.773333 1.493333-5.76 2.133333-8.746667 2.133333-10.453333 0-19.84-8.746667-19.84-20.906667V202.453333c0-7.68 3.84-14.72 10.026667-18.346666C134.826667 148.693333 210.56 128 292.906667 128S451.2 149.333333 512 184.746667C572.8 149.333333 648.746667 128 731.093333 128zM701.866667 187.733333c-71.466667 0-137.386667 17.92-189.866667 47.786667-52.693333-29.866667-118.613333-47.786667-189.866667-47.786667s-136.96 17.493333-189.653333 47.36c-5.546667 3.2-8.746667 9.173333-8.746667 15.573334v563.626666c0 10.24 8.106667 17.493333 17.066667 17.493334 2.56 0 5.12-0.64 7.466667-1.92 49.706667-24.533333 109.44-38.826667 173.653333-38.826667s123.093333 14.293333 172.373333 38.4c3.2 1.493333 6.186667 2.986667 9.173334 4.693333 5.12 2.773333 11.52 2.773333 16.64 0 0.64-0.213333 0.853333-0.426667 1.493333-0.853333l7.68-3.84c49.493333-24.106667 108.8-38.4 172.373333-38.4s123.946667 14.293333 173.653334 38.826667c2.56 1.28 5.12 1.92 7.466666 1.92 8.96 0 17.066667-7.466667 17.066667-17.493334V250.666667c0-6.4-3.2-12.373333-8.746667-15.573334-52.693333-29.866667-118.186667-47.573333-189.653333-47.573333z\" ></path><path d=\"M949.333333 771.84c-123.306667-71.68-260.266667-80.64-407.466666-26.666667V221.866667c0-16.426667-13.44-29.866667-29.866667-29.866667s-29.866667 13.44-29.866667 29.866667v529.066666c-120.533333-55.466667-253.226667-53.973333-395.093333 5.12-10.88 4.48-16 17.066667-11.52 27.946667 4.48 10.88 17.066667 16 27.946667 11.52 139.306667-58.026667 263.253333-57.173333 378.666666 2.773333v46.506667c0 16.426667 13.44 29.866667 29.866667 29.866667s29.866667-13.44 29.866667-29.866667v-53.973333c142.08-56.32 268.586667-50.56 386.133333 17.706666 3.413333 1.92 7.04 2.986667 10.666667 2.986667 7.253333 0 14.506667-3.84 18.56-10.666667a21.290667 21.290667 0 0 0-7.68-29.226666z\"></path></symbol></svg></div>'\n );\n\n const elements = wrapper.querySelectorAll('p,h1,h2,h3,h4,h5,h6');\n for (let i = 0; i < elements.length; i++) {\n element = elements[i];\n if (!firstHeadOne && element.tagName.toLowerCase() == 'h1') {\n firstHeadOne = true;\n }\n // Match the element text is [toc].\n // And replace this element with out list that classname is 'showdown-toc'.\n if (element.textContent.trim().toLowerCase() == '[toc]') {\n // New table of contents container.\n let showdownToc = wrapper.ownerDocument.createElement('div');\n showdownToc.classList.add('showdown-toc');\n if (!firstHeadOne) {\n totalToc = showdownToc;\n config.extraDocs.push('<div id=\"divider\" class=\"divider\"></div>');\n const swtichToc = wrapper.ownerDocument.createElement('div');\n swtichToc.id = 'toc-switch-button';\n swtichToc.classList.add('toc-switch', 'hidden');\n swtichToc.innerHTML = '<svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-chapter-l\"></use></svg>';\n element.parentNode.insertBefore(swtichToc, element);\n\n showdownToc.id = 'total-showdown-toc';\n showdownToc.classList.add('total-toc');\n showdownToc.innerHTML =\n '<div class=\"toc-pin\"><span class=\"toc-pin-text\">目录</span><div class=\"toc-fold-wrap\"><div id=\"toc-fold-icon\" class=\"toc-fold toc-icon\" data-name=\"toc-expand\"><svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-toc\"></use></svg></div><div id=\"toc-close-icon\" class=\"toc-close toc-icon\"><svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-chapter-s\"></use></svg></div></div></div>';\n }\n let tocView = wrapper.ownerDocument.createElement('div');\n tocView.className = 'toc-view';\n // let toc = wrapper.ownerDocument.createElement('ul');\n // tocView.appendChild(toc);\n showdownToc.appendChild(tocView);\n let tocNode = {\n parentNode: null,\n toc: tocView,\n headingLevel: headingLevel,\n preLevel: headingLevel,\n standalone: false,\n };\n if (currTocNode) {\n // If the heading level of the TOC node is higher than\n // that of the previous TOC node,\n // the TOC node is a child of the previous TOC node.\n // Otherwise, look up the TOC node in the node list\n // whose heading level is not greater than the TOC node.\n if (headingLevel > currTocNode.headingLevel) {\n tocNode.parentNode = currTocNode;\n } else {\n // The code will never be executed, just to prevent logic loss.\n // Because invalid nodes have been cleared in appendTocElement method.\n let prev = currTocNode;\n while (headingLevel < prev.headingLevel) {\n prev = prev.parentNode;\n }\n if (prev) {\n if (headingLevel === prev.headingLevel) {\n tocNode.parentNode = prev.parentNode;\n } else {\n tocNode.parentNode = prev;\n }\n }\n }\n }\n currTocNode = tocNode;\n result = true;\n currTocNode.standalone = !firstHeadOne;\n if (!firstHeadOne) {\n element.parentNode.removeChild(element);\n } else {\n element.parentNode.replaceChild(showdownToc, element);\n }\n continue;\n }\n\n // That's going to be what we use as contents entries\n // for this table of contents.\n if (element['tagName']) {\n switch (element['tagName']) {\n case 'H1':\n case 'H2':\n case 'H3':\n case 'H4':\n case 'H5':\n case 'H6':\n headingLevel = parseInt(element['tagName'].substr(1));\n if (currTocNode) {\n // if (!currTocNode.preLevel) {\n // currTocNode.preLevel = headingLevel;\n // }\n\n currTocNode = appendTocElement(wrapper, element, currTocNode, headingLevel);\n }\n break;\n }\n }\n }\n\n if (totalToc) {\n config.extraDocs.push(totalToc.outerHTML);\n }\n\n // Final, clear all toc node in node list.\n while (currTocNode) {\n let tempTocNode = currTocNode;\n currTocNode = tempTocNode.parentNode;\n // Clean toc node.\n tempTocNode.parentNode = null;\n tempTocNode.toc = null;\n tempTocNode.headingLevel = null;\n tempTocNode.preLevel = null;\n }\n return result;\n}\n\nfunction loadTocEvent() {\n const totalToc = document.querySelector('#total-showdown-toc');\n if (!totalToc) return;\n\n // 分隔条事件\n const divider = document.getElementById('divider');\n if (divider) {\n // 初始宽度\n let startX = 0;\n let startWidth = 0;\n function onDrag(e) {\n if (startX > 0) {\n // 计算移动的距离\n const moveX = e.clientX - startX;\n if (moveX != 0) {\n // 计算新的宽度\n const newWidth = startWidth - moveX;\n // 确保分割条宽度在合理范围内\n if (newWidth >= 5 && newWidth <= document.documentElement.clientWidth - 5) {\n // 调整右侧分割栏的flex值以保持比例\n totalToc.style.width = `${newWidth}px`;\n }\n }\n }\n }\n\n function stopDragging() {\n // 移除鼠标移动事件监听器\n document.removeEventListener('mousemove', onDrag);\n // 移除鼠标释放事件监听器\n document.removeEventListener('mouseup', stopDragging);\n // 恢复文本选中\n document.body.style.userSelect = '';\n startX = 0;\n }\n\n function startDragging(e) {\n // 鼠标按下时的位置\n startX = e.clientX;\n // 分割条的初始宽度\n startWidth = totalToc.clientWidth;\n // 防止文本选中\n document.body.style.userSelect = 'none';\n // 添加鼠标移动事件监听器\n document.addEventListener('mousemove', onDrag);\n // 添加鼠标释放事件监听器\n document.addEventListener('mouseup', stopDragging);\n }\n\n divider.addEventListener('mousedown', startDragging);\n }\n\n // if (totalShowdownToc.parentNode)\n // totalShowdownToc.parentNode.classList.add('main-toc-row');\n\n const tocFoldIcon = document.querySelector('#toc-fold-icon');\n if (tocFoldIcon) {\n tocFoldIcon.onclick = (e) => {\n const chapters = document.querySelectorAll('.total-toc ul');\n const icons = document.querySelectorAll('.total-toc ul:not(.toc-main) .toc-multi-chapter use');\n if (tocFoldIcon.dataset.name === 'toc-expand') {\n chapters.forEach((element) => {\n if (!element.classList.contains('toc-main') && !element.classList.contains('toc-level-2')) {\n element.classList.add('hidden');\n }\n });\n icons.forEach((icon) => {\n icon.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#icon-collapse');\n });\n tocFoldIcon.dataset.name = 'toc-fold';\n return;\n }\n\n chapters.forEach((element) => {\n element.classList.remove('hidden');\n });\n icons.forEach((icon) => {\n icon.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#icon-expand');\n });\n tocFoldIcon.dataset.name = 'toc-expand';\n };\n }\n\n const tocCloseIcon = document.querySelector('#toc-close-icon');\n if (tocCloseIcon) {\n tocCloseIcon.onclick = (e) => {\n const totalToc = document.querySelector('#total-showdown-toc');\n if (totalToc) totalToc.classList.add('hidden');\n const switchToc = document.querySelector('#toc-switch-button');\n if (switchToc) switchToc.classList.remove('hidden');\n };\n }\n\n const tocSwitch = document.querySelector('#toc-switch-button');\n if (tocSwitch) {\n tocSwitch.onclick = (e) => {\n e.currentTarget.classList.add('hidden');\n const totalToc = document.querySelector('#total-showdown-toc');\n if (totalToc) totalToc.classList.remove('hidden');\n };\n }\n\n const chapterIcons = document.querySelectorAll('.total-toc .toc-multi-chapter');\n chapterIcons.forEach((icon) => {\n icon.onclick = (e) => {\n let parent = e.currentTarget.parentNode;\n if (!parent) return;\n parent = parent.parentNode;\n if (!parent) return;\n\n const chapters = parent.querySelectorAll('ul');\n const icons = parent.querySelectorAll('.toc-multi-chapter use');\n const iconUse = e.currentTarget.querySelector('use');\n if (iconUse) {\n const href = iconUse.getAttributeNS('http://www.w3.org/1999/xlink', 'href');\n if (href === '#icon-expand') {\n chapters.forEach((element) => {\n element.classList.add('hidden');\n });\n icons.forEach((icon) => {\n icon.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#icon-collapse');\n });\n return;\n }\n\n chapters.forEach((element) => {\n element.classList.remove('hidden');\n });\n icons.forEach((icon) => {\n icon.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#icon-expand');\n });\n }\n };\n });\n}\n\nfunction showdownToc() {\n return [\n {\n type: 'output',\n config: {},\n filter: function (html) {\n if (typeof html === 'string') {\n // parse html\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n if (!renderTocElements(wrapper, this.config)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n\n if (typeof html !== 'object' || !html || !this.config.extraDocs || !Array.isArray(this.config.extraDocs)) {\n return false;\n }\n\n const obj = html;\n this.config.extraDocs.forEach((doc) => {\n utils.addExtra(obj, doc);\n });\n // 附加动态脚本\n const script = {\n inner: [\n {\n id: 'showdown-toc',\n code: loadTocEvent,\n host: '#total-showdown-toc',\n },\n ],\n };\n utils.addScript(obj, script);\n return obj;\n },\n },\n ];\n}\n\nexport default showdownToc;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown checktype extension for markdown\n */\n'use strict';\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nfunction showdownCss() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const prefix = 'css-ex-';\n utils.removeAllStylesheet(prefix);\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n const elements = wrapper.querySelectorAll('a');\n if (!elements.length) {\n return false;\n }\n\n elements.forEach((e)=>{\n try {\n if (e.href && typeof e.href === 'string' && e.href.substr(0, 4) === 'css:') {\n let cssLink = e.href.substr(4).trim();\n const hash = `${utils.hashString(cssLink)}`;\n utils.addCssLink(obj, cssLink, prefix + hash); \n if (e.parentNode && e.parentNode.tagName === 'P' && e.parentNode.parentNode) {\n e.parentNode.parentNode.removeChild(e.parentNode);\n } else {\n e.parentNode.removeChild(e);\n }\n cssLink = cdnjs.getUrl(cssLink);\n utils.loadStylesheet(cssLink, prefix + hash);\n }\n } catch {\n console.log('Error: href of <a> tag is not exist');\n }\n });\n return obj;\n }\n }\n ];\n}\n\nexport default showdownCss;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown viz extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown viz extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Viz === 'undefined') {\n var Viz = window.Viz || undefined;\n}\n\nconst engines = ['circo', 'dot', 'neato', 'osage', 'twopi'];\n\nfunction hasViz() {\n return typeof Viz !== 'undefined' && Viz && typeof Viz.instance !== 'undefined'\n ? true\n : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasViz();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadScript('Viz').then(name => {\n Viz = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasViz()) return;\n cdnjs.unloadScript('Viz');\n Viz = null;\n window.Viz = null;\n dync = false; \n}\n\nfunction onRenderViz(resolve, res) {\n if (hasViz()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const el = res.element;\n const langattr = res.element.dataset.lang;\n let engine = 'dot';\n if (langattr) {\n const obj = JSON.parse(langattr);\n if (obj && obj.engine && engines.indexOf(obj.engine) != -1) {\n engine = obj.engine;\n }\n }\n Viz.instance().then(viz => {\n const svg = viz.renderString(data, { format: 'svg', engine: engine });\n el.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svg}</div>`;\n resolve(true)\n });\n return;\n }\n\n setTimeout(() => {\n onRenderViz(resolve, res);\n }, 10);\n}\n\n/**\n * render Viz graphs\n */\nfunction renderViz(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(\"viz\", element);\n if (!meta) {\n return resolve(false);\n }\n \n onRenderViz(resolve, meta);\n });\n}\n\n// <div class=\"dot\"></div>\nfunction renderVizElements(elements) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderViz(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownViz() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the Viz in code blocks\n const elements = wrapper.querySelectorAll('code.dot.language-dot');\n if (!elements.length) {\n return false;\n }\n console.log(format(`Begin render dot elements.`));\n return renderVizElements(elements).then(() => {\n console.log(format(`End render dot elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownViz;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown vega extension for markdown\n */\n'use strict';\n\nconst extName = 'vega';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown vega extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof vegaEmbed === 'undefined') {\n var vegaEmbed = window.vegaEmbed || undefined;\n}\n\nfunction hasVegaEmbed() {\n return typeof vegaEmbed !== 'undefined' && vegaEmbed ? true : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasVegaEmbed();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs\n .loadScript(extName)\n .then(() => {\n return cdnjs.loadScript('vegaLite');\n })\n .then(() => {\n return cdnjs.loadScript('vegaEmbed');\n })\n .then((name) => {\n vegaEmbed = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasVegaEmbed()) return;\n cdnjs.unloadScript('vegaEmbed');\n cdnjs.unloadScript('vegaLite');\n cdnjs.unloadScript(extName);\n const vegaStyle = document.getElementById('vega-embed-style');\n if (vegaStyle && vegaStyle.tagName.toLowerCase() === 'style') {\n const head = document.head || document.getElementsByTagName('head')[0];\n head.removeChild(vegaStyle);\n }\n vegaEmbed = null;\n window.vegaEmbed = null;\n dync = false;\n}\n\n/**\n * render VegaEmbed graphs\n */\nfunction renderVega(element, options, scripts, isVegaLite) {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return Promise.resolve(false);\n }\n\n const container = meta.container;\n const vegaRenderer = (meta, config) => {\n const result = () => {\n const wval = eval;\n let el = document.getElementById(meta.id);\n if (el) {\n if (\n meta.lang &&\n meta.lang.type &&\n typeof meta.lang.type === 'string' &&\n meta.lang.type.toLowerCase() == 'javascript'\n ) {\n const option = wval(`(function(){${meta.data}; return option;})();`);\n vegaEmbed(el, option, config);\n } else {\n // JSON string\n const option = JSON.parse(meta.data);\n vegaEmbed(el, option, config);\n }\n }\n };\n\n result.toString = () => {\n if (\n meta.lang &&\n meta.lang.type &&\n typeof meta.lang.type === 'string' &&\n meta.lang.type.toLowerCase() == 'javascript'\n ) {\n return `function(){\n let el = document.getElementById('${meta.id}');\n if (el) {\n ${meta.data};\n const config = ${JSON.stringify(config)};\n vegaEmbed(el, option, config);\n }\n }`;\n }\n\n return `function(){\n let el = document.getElementById('${meta.id}');\n if (el) {\n const option = ${meta.data};\n const config = ${JSON.stringify(config)};\n vegaEmbed(el, option, config);\n }\n }`;\n };\n return result;\n };\n const script = {\n id: container,\n code: vegaRenderer(meta, options),\n host: `#${container}`,\n };\n scripts.push(script);\n return new Promise((resolve) => {\n onRenderVega(resolve, meta);\n });\n}\n\n// <div class=\"vegaembed || flow\"></div>\nfunction renderVegaElements(vegaElements, vegaLiteElements, scripts, options) {\n const script = {\n outer: [\n {\n name: extName,\n src: cdnjs.getSrc(false, extName, 'jsdelivr'),\n },\n {\n name: 'vegaLite',\n src: cdnjs.getSrc(false, 'vegaLite', 'jsdelivr'),\n },\n {\n name: 'vegaEmbed',\n src: cdnjs.getSrc(false, 'vegaEmbed', 'jsdelivr'),\n },\n ],\n inner: [],\n };\n scripts.push(script);\n dyncLoadScript();\n return new Promise((resolve) => {\n const promiseArray = [];\n vegaElements.forEach((element) => {\n promiseArray.push(renderVega(element, options, script.inner, false));\n });\n vegaLiteElements.forEach((element) => {\n promiseArray.push(renderVega(element, options, script.inner, true));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// theme: 'excel' | 'ggplot2' | 'quartz' | 'vox' | 'dark'\nconst getOptions = (userOptions = {}) => ({\n actions: { editor: false },\n theme: 'vox',\n tooltip: false,\n renderer: 'svg',\n ...userOptions,\n});\n\nfunction onRenderVega(resolve, meta) {\n if (hasVegaEmbed()) {\n const id = meta.id;\n const name = meta.className;\n const container = meta.container;\n const node = meta.element.parentNode;\n node.outerHTML = `<div id=\"${container}\" class=\"${name}\"><div id=\"${id}\"></div></div>`;\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderVega(resolve, meta);\n }, 10);\n}\n\nfunction showdownVega(userOptions) {\n const options = getOptions(userOptions);\n\n return [\n {\n type: 'output',\n config: options,\n filter: function (obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the VegaEmbed in code blocks\n const vegaElements = wrapper.querySelectorAll('code.vega.language-vega');\n const vegaLiteElements = wrapper.querySelectorAll('code.vega-lite.language-vega-lite');\n if (!vegaElements.length && !vegaLiteElements.length) {\n return false;\n }\n\n console.log(format(`Begin render vega elements.`));\n return renderVegaElements(vegaElements, vegaLiteElements, obj.scripts, this.config).then(() => {\n console.log(format(`End render vega elements.`));\n return obj;\n });\n },\n },\n ];\n}\n\nexport default showdownVega;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown align extension for markdown\n */\n'use strict';\n\nfunction renderAlignElements(wrapper) {\n let element = null;\n let childNode = null;\n let result = false;\n const elements = wrapper.querySelectorAll('p, li, h1, h2, h3, h4, h5, h6, div.paragraph');\n for (let i = 0; i < elements.length; i++) {\n element = elements[i];\n childNode = element.firstChild;\n while (childNode) {\n // Text node type is 3.\n if (childNode.nodeType === 3) {\n // Does the element consist of ':-:' or '--:'\n let results = childNode.nodeValue.match(/^([\\s\\S]*?)([:-]-:)(?:[\\s]?)([\\s\\S]*)$/);\n if (results) {\n if (results[2] === ':-:') {\n // align-center\n childNode.nodeValue = results[3];\n if (element.className) {\n element.className += ` align-center`;\n } else {\n element.className = `align-center`;\n }\n result = true;\n } else if (results[2] === '--:') {\n //align-right\n childNode.nodeValue = results[3];\n if (element.className) {\n element.className += ` align-right`;\n } else {\n element.className = `align-right`;\n }\n result = true;\n }\n //default algin-left\n }\n break;\n }\n childNode = childNode.nextSibling;\n }\n }\n return result;\n}\n\nfunction showdownAlign() {\n const parser = new DOMParser();\n return [\n {\n type: 'output',\n filter: function(html) {\n // parse html\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n if (!renderAlignElements(wrapper)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n }\n ];\n}\n\nexport default showdownAlign;\n","/*\nBased on ASCIIMathTeXImg.js but now part of https://github.com/jhuix/showdowns.git\n\nBased on ASCIIMathML, Version 1.4.7 Aug 30, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen\nModified with TeX conversion for IMG rendering Sept 6, 2006 (c) David Lippman http://www.pierce.ctc.edu/dlippman\n Updated to match ver 2.2 Mar 3, 2014\n Latest at https://github.com/mathjax/asciimathml\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nvar config = {\n decimalsign: \".\" // change to \",\" if you like, beware of `(1,2)`!\n};\n\nvar CONST = 0,\n UNARY = 1,\n BINARY = 2,\n INFIX = 3,\n LEFTBRACKET = 4,\n RIGHTBRACKET = 5,\n SPACE = 6,\n UNDEROVER = 7,\n DEFINITION = 8,\n LEFTRIGHT = 9,\n TEXT = 10; // token types\n\nvar AMsqrt = { input: 'sqrt', tag: 'msqrt', output: 'sqrt', tex: null, ttype: UNARY },\n AMroot = { input: 'root', tag: 'mroot', output: 'root', tex: null, ttype: BINARY },\n AMfrac = { input: 'frac', tag: 'mfrac', output: '/', tex: null, ttype: BINARY },\n AMdiv = { input: '/', tag: 'mfrac', output: '/', tex: null, ttype: INFIX },\n AMover = { input: 'stackrel', tag: 'mover', output: 'stackrel', tex: null, ttype: BINARY },\n AMsub = { input: '_', tag: 'msub', output: '_', tex: null, ttype: INFIX },\n AMsup = { input: '^', tag: 'msup', output: '^', tex: null, ttype: INFIX },\n AMtext = { input: 'text', tag: 'mtext', output: 'text', tex: null, ttype: TEXT },\n AMmbox = { input: 'mbox', tag: 'mtext', output: 'mbox', tex: null, ttype: TEXT },\n AMquote = { input: '\"', tag: 'mtext', output: 'mbox', tex: null, ttype: TEXT };\n\nvar AMsymbols = [\n //some greek symbols\n { input: 'alpha', tag: 'mi', output: '\\u03B1', tex: null, ttype: CONST },\n { input: 'beta', tag: 'mi', output: '\\u03B2', tex: null, ttype: CONST },\n { input: 'chi', tag: 'mi', output: '\\u03C7', tex: null, ttype: CONST },\n { input: 'delta', tag: 'mi', output: '\\u03B4', tex: null, ttype: CONST },\n { input: 'Delta', tag: 'mo', output: '\\u0394', tex: null, ttype: CONST },\n { input: 'epsi', tag: 'mi', output: '\\u03B5', tex: 'epsilon', ttype: CONST },\n { input: 'varepsilon', tag: 'mi', output: '\\u025B', tex: null, ttype: CONST },\n { input: 'eta', tag: 'mi', output: '\\u03B7', tex: null, ttype: CONST },\n { input: 'gamma', tag: 'mi', output: '\\u03B3', tex: null, ttype: CONST },\n { input: 'Gamma', tag: 'mo', output: '\\u0393', tex: null, ttype: CONST },\n { input: 'iota', tag: 'mi', output: '\\u03B9', tex: null, ttype: CONST },\n { input: 'kappa', tag: 'mi', output: '\\u03BA', tex: null, ttype: CONST },\n { input: 'lambda', tag: 'mi', output: '\\u03BB', tex: null, ttype: CONST },\n { input: 'Lambda', tag: 'mo', output: '\\u039B', tex: null, ttype: CONST },\n { input: 'lamda', tag: 'mi', output: 'lambda', tex: null, ttype: DEFINITION },\n { input: 'Lamda', tag: 'mi', output: 'Lambda', tex: null, ttype: DEFINITION },\n { input: 'mu', tag: 'mi', output: '\\u03BC', tex: null, ttype: CONST },\n { input: 'nu', tag: 'mi', output: '\\u03BD', tex: null, ttype: CONST },\n { input: 'omega', tag: 'mi', output: '\\u03C9', tex: null, ttype: CONST },\n { input: 'Omega', tag: 'mo', output: '\\u03A9', tex: null, ttype: CONST },\n { input: 'phi', tag: 'mi', output: '\\u03C6', tex: null, ttype: CONST },\n { input: 'varphi', tag: 'mi', output: '\\u03D5', tex: null, ttype: CONST },\n { input: 'Phi', tag: 'mo', output: '\\u03A6', tex: null, ttype: CONST },\n { input: 'pi', tag: 'mi', output: '\\u03C0', tex: null, ttype: CONST },\n { input: 'Pi', tag: 'mo', output: '\\u03A0', tex: null, ttype: CONST },\n { input: 'psi', tag: 'mi', output: '\\u03C8', tex: null, ttype: CONST },\n { input: 'Psi', tag: 'mi', output: '\\u03A8', tex: null, ttype: CONST },\n { input: 'rho', tag: 'mi', output: '\\u03C1', tex: null, ttype: CONST },\n { input: 'sigma', tag: 'mi', output: '\\u03C3', tex: null, ttype: CONST },\n { input: 'Sigma', tag: 'mo', output: '\\u03A3', tex: null, ttype: CONST },\n { input: 'tau', tag: 'mi', output: '\\u03C4', tex: null, ttype: CONST },\n { input: 'theta', tag: 'mi', output: '\\u03B8', tex: null, ttype: CONST },\n { input: 'vartheta', tag: 'mi', output: '\\u03D1', tex: null, ttype: CONST },\n { input: 'Theta', tag: 'mo', output: '\\u0398', tex: null, ttype: CONST },\n { input: 'upsilon', tag: 'mi', output: '\\u03C5', tex: null, ttype: CONST },\n { input: 'xi', tag: 'mi', output: '\\u03BE', tex: null, ttype: CONST },\n { input: 'Xi', tag: 'mo', output: '\\u039E', tex: null, ttype: CONST },\n { input: 'zeta', tag: 'mi', output: '\\u03B6', tex: null, ttype: CONST },\n\n //binary operation symbols\n { input: '*', tag: 'mo', output: '\\u22C5', tex: 'cdot', ttype: CONST },\n { input: '**', tag: 'mo', output: '\\u2217', tex: 'ast', ttype: CONST },\n { input: '***', tag: 'mo', output: '\\u22C6', tex: 'star', ttype: CONST },\n { input: '//', tag: 'mo', output: '/', tex: '/', ttype: CONST, val: true, notexcopy: true },\n { input: '\\\\\\\\', tag: 'mo', output: '\\\\', tex: 'backslash', ttype: CONST },\n { input: 'setminus', tag: 'mo', output: '\\\\', tex: null, ttype: CONST },\n { input: 'xx', tag: 'mo', output: '\\u00D7', tex: 'times', ttype: CONST },\n { input: '|><', tag: 'mo', output: '\\u22C9', tex: 'ltimes', ttype: CONST },\n { input: '><|', tag: 'mo', output: '\\u22CA', tex: 'rtimes', ttype: CONST },\n { input: '|><|', tag: 'mo', output: '\\u22C8', tex: 'bowtie', ttype: CONST },\n { input: '-:', tag: 'mo', output: '\\u00F7', tex: 'div', ttype: CONST },\n { input: 'divide', tag: 'mo', output: '-:', tex: null, ttype: DEFINITION },\n { input: '@', tag: 'mo', output: '\\u2218', tex: 'circ', ttype: CONST },\n { input: 'o+', tag: 'mo', output: '\\u2295', tex: 'oplus', ttype: CONST },\n { input: 'ox', tag: 'mo', output: '\\u2297', tex: 'otimes', ttype: CONST },\n { input: 'o.', tag: 'mo', output: '\\u2299', tex: 'odot', ttype: CONST },\n { input: 'sum', tag: 'mo', output: '\\u2211', tex: null, ttype: UNDEROVER },\n { input: 'prod', tag: 'mo', output: '\\u220F', tex: null, ttype: UNDEROVER },\n { input: '^^', tag: 'mo', output: '\\u2227', tex: 'wedge', ttype: CONST },\n { input: '^^^', tag: 'mo', output: '\\u22C0', tex: 'bigwedge', ttype: UNDEROVER },\n { input: 'vv', tag: 'mo', output: '\\u2228', tex: 'vee', ttype: CONST },\n { input: 'vvv', tag: 'mo', output: '\\u22C1', tex: 'bigvee', ttype: UNDEROVER },\n { input: 'nn', tag: 'mo', output: '\\u2229', tex: 'cap', ttype: CONST },\n { input: 'nnn', tag: 'mo', output: '\\u22C2', tex: 'bigcap', ttype: UNDEROVER },\n { input: 'uu', tag: 'mo', output: '\\u222A', tex: 'cup', ttype: CONST },\n { input: 'uuu', tag: 'mo', output: '\\u22C3', tex: 'bigcup', ttype: UNDEROVER },\n { input: 'overset', tag: 'mover', output: 'stackrel', tex: null, ttype: BINARY },\n { input: 'underset', tag: 'munder', output: 'stackrel', tex: null, ttype: BINARY },\n\n //binary relation symbols\n { input: '!=', tag: 'mo', output: '\\u2260', tex: 'ne', ttype: CONST },\n { input: ':=', tag: 'mo', output: ':=', tex: null, ttype: CONST },\n { input: 'lt', tag: 'mo', output: '<', tex: null, ttype: CONST },\n { input: 'gt', tag: 'mo', output: '>', tex: null, ttype: CONST },\n { input: '<=', tag: 'mo', output: '\\u2264', tex: 'le', ttype: CONST },\n { input: 'lt=', tag: 'mo', output: '\\u2264', tex: 'leq', ttype: CONST },\n { input: 'gt=', tag: 'mo', output: '\\u2265', tex: 'geq', ttype: CONST },\n { input: '>=', tag: 'mo', output: '\\u2265', tex: 'ge', ttype: CONST },\n { input: '-<', tag: 'mo', output: '\\u227A', tex: 'prec', ttype: CONST },\n { input: '-lt', tag: 'mo', output: '\\u227A', tex: null, ttype: CONST },\n { input: '>-', tag: 'mo', output: '\\u227B', tex: 'succ', ttype: CONST },\n { input: '-<=', tag: 'mo', output: '\\u2AAF', tex: 'preceq', ttype: CONST },\n { input: '>-=', tag: 'mo', output: '\\u2AB0', tex: 'succeq', ttype: CONST },\n { input: 'in', tag: 'mo', output: '\\u2208', tex: null, ttype: CONST },\n { input: '!in', tag: 'mo', output: '\\u2209', tex: 'notin', ttype: CONST },\n { input: 'sub', tag: 'mo', output: '\\u2282', tex: 'subset', ttype: CONST },\n { input: 'sup', tag: 'mo', output: '\\u2283', tex: 'supset', ttype: CONST },\n { input: 'sube', tag: 'mo', output: '\\u2286', tex: 'subseteq', ttype: CONST },\n { input: 'supe', tag: 'mo', output: '\\u2287', tex: 'supseteq', ttype: CONST },\n { input: '-=', tag: 'mo', output: '\\u2261', tex: 'equiv', ttype: CONST },\n { input: '~=', tag: 'mo', output: '\\u2245', tex: 'stackrel{\\\\sim}{=}', notexcopy: true, ttype: CONST }, //back hack b/c mimetex doesn't support /cong\n { input: 'cong', tag: 'mo', output: '~=', tex: null, ttype: DEFINITION },\n { input: '~~', tag: 'mo', output: '\\u2248', tex: 'approx', ttype: CONST },\n { input: 'prop', tag: 'mo', output: '\\u221D', tex: 'propto', ttype: CONST },\n\n //logical symbols\n { input: 'and', tag: 'mtext', output: 'and', tex: null, ttype: SPACE },\n { input: 'or', tag: 'mtext', output: 'or', tex: null, ttype: SPACE },\n { input: 'not', tag: 'mo', output: '\\u00AC', tex: 'neg', ttype: CONST },\n { input: '=>', tag: 'mo', output: '\\u21D2', tex: 'Rightarrow', ttype: CONST },\n { input: 'implies', tag: 'mo', output: '=>', tex: null, ttype: DEFINITION },\n { input: 'if', tag: 'mo', output: 'if', tex: null, ttype: SPACE },\n { input: '<=>', tag: 'mo', output: '\\u21D4', tex: 'Leftrightarrow', ttype: CONST },\n { input: 'iff', tag: 'mo', output: '<=>', tex: null, ttype: DEFINITION },\n { input: 'AA', tag: 'mo', output: '\\u2200', tex: 'forall', ttype: CONST },\n { input: 'EE', tag: 'mo', output: '\\u2203', tex: 'exists', ttype: CONST },\n { input: '_|_', tag: 'mo', output: '\\u22A5', tex: 'bot', ttype: CONST },\n { input: 'TT', tag: 'mo', output: '\\u22A4', tex: 'top', ttype: CONST },\n { input: '|--', tag: 'mo', output: '\\u22A2', tex: 'vdash', ttype: CONST },\n { input: '|==', tag: 'mo', output: '\\u22A8', tex: 'models', ttype: CONST }, //mimetex doesn't support\n\n //grouping brackets\n { input: '(', tag: 'mo', output: '(', tex: null, ttype: LEFTBRACKET, val: true },\n { input: ')', tag: 'mo', output: ')', tex: null, ttype: RIGHTBRACKET, val: true },\n { input: '[', tag: 'mo', output: '[', tex: null, ttype: LEFTBRACKET, val: true },\n { input: ']', tag: 'mo', output: ']', tex: null, ttype: RIGHTBRACKET, val: true },\n { input: 'left(', tag: 'mo', output: '(', tex: '(', notexcopy: true, ttype: LEFTBRACKET, val: true },\n { input: 'right)', tag: 'mo', output: ')', tex: ')', notexcopy: true, ttype: RIGHTBRACKET, val: true },\n { input: 'left[', tag: 'mo', output: '[', tex: '[', notexcopy: true, ttype: LEFTBRACKET, val: true },\n { input: 'right]', tag: 'mo', output: ']', tex: ']', notexcopy: true, ttype: RIGHTBRACKET, val: true },\n { input: '{', tag: 'mo', output: '{', tex: 'lbrace', ttype: LEFTBRACKET },\n { input: '}', tag: 'mo', output: '}', tex: 'rbrace', ttype: RIGHTBRACKET },\n { input: '|', tag: 'mo', output: '|', tex: null, ttype: LEFTRIGHT, val: true },\n { input: '|:', tag: 'mo', output: '|', tex: '|', ttype: LEFTBRACKET, notexcopy: true, val: true },\n { input: ':|', tag: 'mo', output: '|', tex: '|', ttype: RIGHTBRACKET, notexcopy: true, val: true },\n { input: ':|:', tag: 'mo', output: '|', tex: '|', ttype: CONST, notexcopy: true, val: true },\n //{input:\"||\", tag:\"mo\", output:\"||\", tex:null, ttype:LEFTRIGHT},\n { input: '(:', tag: 'mo', output: '\\u2329', tex: 'langle', ttype: LEFTBRACKET },\n { input: ':)', tag: 'mo', output: '\\u232A', tex: 'rangle', ttype: RIGHTBRACKET },\n { input: '<<', tag: 'mo', output: '\\u2329', tex: 'langle', ttype: LEFTBRACKET },\n { input: '>>', tag: 'mo', output: '\\u232A', tex: 'rangle', ttype: RIGHTBRACKET },\n { input: '{:', tag: 'mo', output: '{:', tex: null, ttype: LEFTBRACKET, invisible: true },\n { input: ':}', tag: 'mo', output: ':}', tex: null, ttype: RIGHTBRACKET, invisible: true },\n\n //miscellaneous symbols\n { input: 'int', tag: 'mo', output: '\\u222B', tex: null, ttype: CONST },\n { input: 'dx', tag: 'mi', output: '{:d x:}', tex: null, ttype: DEFINITION },\n { input: 'dy', tag: 'mi', output: '{:d y:}', tex: null, ttype: DEFINITION },\n { input: 'dz', tag: 'mi', output: '{:d z:}', tex: null, ttype: DEFINITION },\n { input: 'dt', tag: 'mi', output: '{:d t:}', tex: null, ttype: DEFINITION },\n { input: 'oint', tag: 'mo', output: '\\u222E', tex: null, ttype: CONST },\n { input: 'del', tag: 'mo', output: '\\u2202', tex: 'partial', ttype: CONST },\n { input: 'grad', tag: 'mo', output: '\\u2207', tex: 'nabla', ttype: CONST },\n { input: '+-', tag: 'mo', output: '\\u00B1', tex: 'pm', ttype: CONST },\n { input: 'O/', tag: 'mo', output: '\\u2205', tex: 'emptyset', ttype: CONST },\n { input: 'oo', tag: 'mo', output: '\\u221E', tex: 'infty', ttype: CONST },\n { input: 'aleph', tag: 'mo', output: '\\u2135', tex: null, ttype: CONST },\n { input: '...', tag: 'mo', output: '...', tex: 'ldots', ttype: CONST },\n { input: ':.', tag: 'mo', output: '\\u2234', tex: 'therefore', ttype: CONST },\n { input: \":'\", tag: 'mo', output: '\\u2235', tex: 'because', ttype: CONST },\n { input: '/_', tag: 'mo', output: '\\u2220', tex: 'angle', ttype: CONST },\n { input: '/_\\\\', tag: 'mo', output: '\\u25B3', tex: 'triangle', ttype: CONST },\n { input: '\\\\ ', tag: 'mo', output: '\\u00A0', tex: null, ttype: CONST, val: true },\n { input: 'frown', tag: 'mo', output: '\\u2322', tex: null, ttype: CONST },\n { input: '%', tag: 'mo', output: '%', tex: '%', ttype: CONST, notexcopy: true },\n { input: 'quad', tag: 'mo', output: '\\u00A0\\u00A0', tex: null, ttype: CONST },\n { input: 'qquad', tag: 'mo', output: '\\u00A0\\u00A0\\u00A0\\u00A0', tex: null, ttype: CONST },\n { input: 'cdots', tag: 'mo', output: '\\u22EF', tex: null, ttype: CONST },\n { input: 'vdots', tag: 'mo', output: '\\u22EE', tex: null, ttype: CONST },\n { input: 'ddots', tag: 'mo', output: '\\u22F1', tex: null, ttype: CONST },\n { input: 'diamond', tag: 'mo', output: '\\u22C4', tex: null, ttype: CONST },\n { input: 'square', tag: 'mo', output: '\\u25A1', tex: 'boxempty', ttype: CONST },\n { input: '|__', tag: 'mo', output: '\\u230A', tex: 'lfloor', ttype: CONST },\n { input: '__|', tag: 'mo', output: '\\u230B', tex: 'rfloor', ttype: CONST },\n { input: '|~', tag: 'mo', output: '\\u2308', tex: 'lceil', ttype: CONST },\n { input: 'lceiling', tag: 'mo', output: '|~', tex: null, ttype: DEFINITION },\n { input: '~|', tag: 'mo', output: '\\u2309', tex: 'rceil', ttype: CONST },\n { input: 'rceiling', tag: 'mo', output: '~|', tex: null, ttype: DEFINITION },\n { input: 'CC', tag: 'mo', output: '\\u2102', tex: 'mathbb{C}', ttype: CONST, notexcopy: true },\n { input: 'NN', tag: 'mo', output: '\\u2115', tex: 'mathbb{N}', ttype: CONST, notexcopy: true },\n { input: 'QQ', tag: 'mo', output: '\\u211A', tex: 'mathbb{Q}', ttype: CONST, notexcopy: true },\n { input: 'RR', tag: 'mo', output: '\\u211D', tex: 'mathbb{R}', ttype: CONST, notexcopy: true },\n { input: 'ZZ', tag: 'mo', output: '\\u2124', tex: 'mathbb{Z}', ttype: CONST, notexcopy: true },\n { input: 'f', tag: 'mi', output: 'f', tex: null, ttype: UNARY, func: true, val: true },\n { input: 'g', tag: 'mi', output: 'g', tex: null, ttype: UNARY, func: true, val: true },\n { input: \"''\", tag: 'mo', output: \"''\", tex: null, val: true },\n { input: \"'''\", tag: 'mo', output: \"'''\", tex: null, val: true },\n { input: \"''''\", tag: 'mo', output: \"''''\", tex: null, val: true },\n\n //standard functions\n { input: 'lim', tag: 'mo', output: 'lim', tex: null, ttype: UNDEROVER },\n { input: 'Lim', tag: 'mo', output: 'Lim', tex: null, ttype: UNDEROVER },\n { input: 'sin', tag: 'mo', output: 'sin', tex: null, ttype: UNARY, func: true },\n { input: 'cos', tag: 'mo', output: 'cos', tex: null, ttype: UNARY, func: true },\n { input: 'tan', tag: 'mo', output: 'tan', tex: null, ttype: UNARY, func: true },\n { input: 'arcsin', tag: 'mo', output: 'arcsin', tex: null, ttype: UNARY, func: true },\n { input: 'arccos', tag: 'mo', output: 'arccos', tex: null, ttype: UNARY, func: true },\n { input: 'arctan', tag: 'mo', output: 'arctan', tex: null, ttype: UNARY, func: true },\n { input: 'sinh', tag: 'mo', output: 'sinh', tex: null, ttype: UNARY, func: true },\n { input: 'cosh', tag: 'mo', output: 'cosh', tex: null, ttype: UNARY, func: true },\n { input: 'tanh', tag: 'mo', output: 'tanh', tex: null, ttype: UNARY, func: true },\n { input: 'cot', tag: 'mo', output: 'cot', tex: null, ttype: UNARY, func: true },\n { input: 'coth', tag: 'mo', output: 'coth', tex: null, ttype: UNARY, func: true },\n { input: 'sech', tag: 'mo', output: 'sech', tex: null, ttype: UNARY, func: true },\n { input: 'csch', tag: 'mo', output: 'csch', tex: null, ttype: UNARY, func: true },\n { input: 'sec', tag: 'mo', output: 'sec', tex: null, ttype: UNARY, func: true },\n { input: 'csc', tag: 'mo', output: 'csc', tex: null, ttype: UNARY, func: true },\n { input: 'log', tag: 'mo', output: 'log', tex: null, ttype: UNARY, func: true },\n { input: 'ln', tag: 'mo', output: 'ln', tex: null, ttype: UNARY, func: true },\n { input: 'abs', tag: 'mo', output: 'abs', tex: null, ttype: UNARY, notexcopy: true, rewriteleftright: ['|', '|'] },\n {\n input: 'norm',\n tag: 'mo',\n output: 'norm',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\|', '\\\\|']\n },\n {\n input: 'floor',\n tag: 'mo',\n output: 'floor',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\lfloor', '\\\\rfloor']\n },\n {\n input: 'ceil',\n tag: 'mo',\n output: 'ceil',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\lceil', '\\\\rceil']\n },\n { input: 'Sin', tag: 'mo', output: 'Sin', tex: null, ttype: UNARY, func: true },\n { input: 'Cos', tag: 'mo', output: 'Cos', tex: null, ttype: UNARY, func: true },\n { input: 'Tan', tag: 'mo', output: 'Tan', tex: null, ttype: UNARY, func: true },\n { input: 'Arcsin', tag: 'mo', output: 'Arcsin', tex: null, ttype: UNARY, func: true },\n { input: 'Arccos', tag: 'mo', output: 'Arccos', tex: null, ttype: UNARY, func: true },\n { input: 'Arctan', tag: 'mo', output: 'Arctan', tex: null, ttype: UNARY, func: true },\n { input: 'Sinh', tag: 'mo', output: 'Sinh', tex: null, ttype: UNARY, func: true },\n { input: 'Cosh', tag: 'mo', output: 'Cosh', tex: null, ttype: UNARY, func: true },\n { input: 'Tanh', tag: 'mo', output: 'Tanh', tex: null, ttype: UNARY, func: true },\n { input: 'Cot', tag: 'mo', output: 'Cot', tex: null, ttype: UNARY, func: true },\n { input: 'Sec', tag: 'mo', output: 'Sec', tex: null, ttype: UNARY, func: true },\n { input: 'Csc', tag: 'mo', output: 'Csc', tex: null, ttype: UNARY, func: true },\n { input: 'Log', tag: 'mo', output: 'Log', tex: null, ttype: UNARY, func: true },\n { input: 'Ln', tag: 'mo', output: 'Ln', tex: null, ttype: UNARY, func: true },\n { input: 'Abs', tag: 'mo', output: 'abs', tex: null, ttype: UNARY, notexcopy: true, rewriteleftright: ['|', '|'] },\n\n { input: 'det', tag: 'mo', output: 'det', tex: null, ttype: UNARY, func: true },\n { input: 'exp', tag: 'mo', output: 'exp', tex: null, ttype: UNARY, func: true },\n { input: 'dim', tag: 'mo', output: 'dim', tex: null, ttype: CONST },\n { input: 'mod', tag: 'mo', output: 'mod', tex: 'text{mod}', ttype: CONST, notexcopy: true },\n { input: 'gcd', tag: 'mo', output: 'gcd', tex: null, ttype: UNARY, func: true },\n { input: 'lcm', tag: 'mo', output: 'lcm', tex: 'text{lcm}', ttype: UNARY, func: true, notexcopy: true },\n { input: 'lub', tag: 'mo', output: 'lub', tex: null, ttype: CONST },\n { input: 'glb', tag: 'mo', output: 'glb', tex: null, ttype: CONST },\n { input: 'min', tag: 'mo', output: 'min', tex: null, ttype: UNDEROVER },\n { input: 'max', tag: 'mo', output: 'max', tex: null, ttype: UNDEROVER },\n\n //arrows\n { input: 'uarr', tag: 'mo', output: '\\u2191', tex: 'uparrow', ttype: CONST },\n { input: 'darr', tag: 'mo', output: '\\u2193', tex: 'downarrow', ttype: CONST },\n { input: 'rarr', tag: 'mo', output: '\\u2192', tex: 'rightarrow', ttype: CONST },\n { input: '->', tag: 'mo', output: '\\u2192', tex: 'to', ttype: CONST },\n { input: '>->', tag: 'mo', output: '\\u21A3', tex: 'rightarrowtail', ttype: CONST },\n { input: '->>', tag: 'mo', output: '\\u21A0', tex: 'twoheadrightarrow', ttype: CONST },\n { input: '>->>', tag: 'mo', output: '\\u2916', tex: 'twoheadrightarrowtail', ttype: CONST },\n { input: '|->', tag: 'mo', output: '\\u21A6', tex: 'mapsto', ttype: CONST },\n { input: 'larr', tag: 'mo', output: '\\u2190', tex: 'leftarrow', ttype: CONST },\n { input: 'harr', tag: 'mo', output: '\\u2194', tex: 'leftrightarrow', ttype: CONST },\n { input: 'rArr', tag: 'mo', output: '\\u21D2', tex: 'Rightarrow', ttype: CONST },\n { input: 'lArr', tag: 'mo', output: '\\u21D0', tex: 'Leftarrow', ttype: CONST },\n { input: 'hArr', tag: 'mo', output: '\\u21D4', tex: 'Leftrightarrow', ttype: CONST },\n\n //commands with argument\n AMsqrt,\n AMroot,\n AMfrac,\n AMdiv,\n AMover,\n AMsub,\n AMsup,\n { input: 'cancel', tag: 'menclose', output: 'cancel', tex: null, ttype: UNARY },\n { input: 'Sqrt', tag: 'msqrt', output: 'sqrt', tex: null, ttype: UNARY },\n { input: 'hat', tag: 'mover', output: '\\u005E', tex: null, ttype: UNARY, acc: true },\n { input: 'bar', tag: 'mover', output: '\\u00AF', tex: 'overline', ttype: UNARY, acc: true },\n { input: 'vec', tag: 'mover', output: '\\u2192', tex: null, ttype: UNARY, acc: true },\n { input: 'tilde', tag: 'mover', output: '~', tex: null, ttype: UNARY, acc: true },\n { input: 'dot', tag: 'mover', output: '.', tex: null, ttype: UNARY, acc: true },\n { input: 'ddot', tag: 'mover', output: '..', tex: null, ttype: UNARY, acc: true },\n {\n input: 'overarc',\n tag: 'mover',\n output: '\\u23DC',\n tex: 'stackrel{\\\\frown}',\n notexcopy: true,\n ttype: UNARY,\n acc: true\n },\n {\n input: 'overparen',\n tag: 'mover',\n output: '\\u23DC',\n tex: 'stackrel{\\\\frown}',\n notexcopy: true,\n ttype: UNARY,\n acc: true\n },\n { input: 'ul', tag: 'munder', output: '\\u0332', tex: 'underline', ttype: UNARY, acc: true },\n { input: 'ubrace', tag: 'munder', output: '\\u23DF', tex: 'underbrace', ttype: UNARY, acc: true },\n { input: 'obrace', tag: 'mover', output: '\\u23DE', tex: 'overbrace', ttype: UNARY, acc: true },\n AMtext,\n AMmbox,\n AMquote,\n //{input:\"var\", tag:\"mstyle\", atname:\"fontstyle\", atval:\"italic\", output:\"var\", tex:null, ttype:UNARY},\n { input: 'color', tag: 'mstyle', ttype: BINARY },\n {\n input: 'bb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'bold',\n output: 'bb',\n tex: 'mathbf',\n ttype: UNARY,\n notexcopy: true\n },\n { input: 'mathbf', tag: 'mstyle', atname: 'mathvariant', atval: 'bold', output: 'mathbf', tex: null, ttype: UNARY },\n {\n input: 'sf',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'sans-serif',\n output: 'sf',\n tex: 'mathsf',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathsf',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'sans-serif',\n output: 'mathsf',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'bbb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'double-struck',\n output: 'bbb',\n tex: 'mathbb',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathbb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'double-struck',\n output: 'mathbb',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'cc',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'script',\n output: 'cc',\n tex: 'mathcal',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathcal',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'script',\n output: 'mathcal',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'tt',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'monospace',\n output: 'tt',\n tex: 'mathtt',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathtt',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'monospace',\n output: 'mathtt',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'fr',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'fraktur',\n output: 'fr',\n tex: 'mathfrak',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathfrak',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'fraktur',\n output: 'mathfrak',\n tex: null,\n ttype: UNARY\n }\n];\n\nfunction compareNames(s1, s2) {\n if (s1.input > s2.input) return 1;\n else return -1;\n}\n\nvar AMnames = []; //list of input symbols\n\nfunction AMinitSymbols() {\n var i;\n var symlen = AMsymbols.length;\n for (i = 0; i < symlen; i++) {\n if (AMsymbols[i].tex && !(typeof AMsymbols[i].notexcopy == 'boolean' && AMsymbols[i].notexcopy)) {\n AMsymbols.push({\n input: AMsymbols[i].tex,\n tag: AMsymbols[i].tag,\n output: AMsymbols[i].output,\n ttype: AMsymbols[i].ttype,\n acc: AMsymbols[i].acc || false\n });\n }\n }\n refreshSymbols();\n}\n\nfunction refreshSymbols() {\n var i;\n AMsymbols.sort(compareNames);\n for (i = 0; i < AMsymbols.length; i++) AMnames[i] = AMsymbols[i].input;\n}\n\nfunction AMremoveCharsAndBlanks(str, n) {\n //remove n characters and any following blanks\n var st;\n if (str.charAt(n) == '\\\\' && str.charAt(n + 1) != '\\\\' && str.charAt(n + 1) != ' ') st = str.slice(n + 1);\n else st = str.slice(n);\n for (var i = 0; i < st.length && st.charCodeAt(i) <= 32; i = i + 1);\n return st.slice(i);\n}\n\nfunction AMposition(arr, str, n) {\n // return position >=n where str appears or would be inserted\n // assumes arr is sorted\n if (n == 0) {\n var h, m;\n n = -1;\n h = arr.length;\n while (n + 1 < h) {\n m = (n + h) >> 1;\n if (arr[m] < str) n = m;\n else h = m;\n }\n return h;\n } else for (var i = n; i < arr.length && arr[i] < str; i++);\n return i; // i=arr.length || arr[i]>=str\n}\n\nfunction AMgetSymbol(str) {\n //return maximal initial substring of str that appears in names\n //return null if there is none\n var k = 0; //new pos\n var j = 0; //old pos\n var mk; //match pos\n var st;\n var tagst;\n var match = '';\n var more = true;\n for (var i = 1; i <= str.length && more; i++) {\n st = str.slice(0, i); //initial substring of length i\n j = k;\n k = AMposition(AMnames, st, j);\n if (k < AMnames.length && str.slice(0, AMnames[k].length) == AMnames[k]) {\n match = AMnames[k];\n mk = k;\n i = match.length;\n }\n more = k < AMnames.length && str.slice(0, AMnames[k].length) >= AMnames[k];\n }\n AMpreviousSymbol = AMcurrentSymbol;\n if (match != '') {\n AMcurrentSymbol = AMsymbols[mk].ttype;\n return AMsymbols[mk];\n }\n // if str[0] is a digit or - return maxsubstring of digits.digits\n AMcurrentSymbol = CONST;\n k = 1;\n st = str.slice(0, 1);\n var integ = true;\n\n while ('0' <= st && st <= '9' && k <= str.length) {\n st = str.slice(k, k + 1);\n k++;\n }\n if (st == config.decimalsign) {\n st = str.slice(k, k + 1);\n if ('0' <= st && st <= '9') {\n integ = false;\n k++;\n while ('0' <= st && st <= '9' && k <= str.length) {\n st = str.slice(k, k + 1);\n k++;\n }\n }\n }\n if ((integ && k > 1) || k > 2) {\n st = str.slice(0, k - 1);\n tagst = 'mn';\n } else {\n k = 2;\n st = str.slice(0, 1); //take 1 character\n tagst = ('A' > st || st > 'Z') && ('a' > st || st > 'z') ? 'mo' : 'mi';\n }\n if (st == '-' && AMpreviousSymbol == INFIX) {\n AMcurrentSymbol = INFIX;\n return { input: st, tag: tagst, output: st, ttype: UNARY, func: true, val: true };\n }\n return { input: st, tag: tagst, output: st, ttype: CONST, val: true }; //added val bit\n}\n\nfunction AMTremoveBrackets(node) {\n var st;\n if (node.charAt(0) == '{' && node.charAt(node.length - 1) == '}') {\n var leftchop = 0;\n\n st = node.substr(1, 5);\n if (st == '\\\\left') {\n st = node.charAt(6);\n if (st == '(' || st == '[' || st == '{') {\n leftchop = 7;\n } else {\n st = node.substr(6, 7);\n if (st == '\\\\lbrace') {\n leftchop = 13;\n }\n }\n } else {\n st = node.charAt(1);\n if (st == '(' || st == '[') {\n leftchop = 2;\n }\n }\n if (leftchop > 0) {\n //st = node.charAt(node.length-7);\n st = node.substr(node.length - 8);\n if (st == '\\\\right)}' || st == '\\\\right]}' || st == '\\\\right.}') {\n node = '{' + node.substr(leftchop);\n node = node.substr(0, node.length - 8) + '}';\n } else if (st == '\\\\rbrace}') {\n node = '{' + node.substr(leftchop);\n node = node.substr(0, node.length - 14) + '}';\n }\n }\n }\n return node;\n}\n\n/*Parsing ASCII math expressions with the following grammar\nv ::= [A-Za-z] | greek letters | numbers | other constant symbols\nu ::= sqrt | text | bb | other unary symbols for font commands\nb ::= frac | root | stackrel binary symbols\nl ::= ( | [ | { | (: | {: left brackets\nr ::= ) | ] | } | :) | :} right brackets\nS ::= v | lEr | uS | bSS Simple expression\nI ::= S_S | S^S | S_S^S | S Intermediate expression\nE ::= IE | I/I Expression\nEach terminal symbol is translated into a corresponding mathml node.*/\n\nvar AMnestingDepth, AMpreviousSymbol, AMcurrentSymbol;\n\nfunction AMTgetTeXsymbol(symb) {\n var pre;\n if (typeof symb.val == 'boolean' && symb.val) {\n pre = '';\n } else {\n pre = '\\\\';\n }\n if (symb.tex == null) {\n //can't remember why this was here. Breaks /delta /Delta to removed\n //return (pre+(pre==''?symb.input:symb.input.toLowerCase()));\n return pre + symb.input;\n } else {\n return pre + symb.tex;\n }\n}\n\nfunction AMTparseSexpr(str) {\n //parses str and returns [node,tailstr]\n var symbol,\n node,\n result,\n i,\n st, // rightvert = false,\n newFrag = '';\n str = AMremoveCharsAndBlanks(str, 0);\n symbol = AMgetSymbol(str); //either a token or a bracket or empty\n if (symbol == null || (symbol.ttype == RIGHTBRACKET && AMnestingDepth > 0)) {\n return [null, str];\n }\n if (symbol.ttype == DEFINITION) {\n str = symbol.output + AMremoveCharsAndBlanks(str, symbol.input.length);\n symbol = AMgetSymbol(str);\n }\n switch (symbol.ttype) {\n case UNDEROVER:\n case CONST:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n var texsymbol = AMTgetTeXsymbol(symbol);\n if (texsymbol.charAt(0) == '\\\\' || symbol.tag == 'mo') return [texsymbol, str];\n else return ['{' + texsymbol + '}', str];\n\n case LEFTBRACKET: //read (expr+)\n AMnestingDepth++;\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n\n result = AMTparseExpr(str, true);\n AMnestingDepth--;\n var leftchop = 0;\n if (result[0].substr(0, 6) == '\\\\right') {\n st = result[0].charAt(6);\n if (st == ')' || st == ']' || st == '}') {\n leftchop = 6;\n } else if (st == '.') {\n leftchop = 7;\n } else {\n st = result[0].substr(6, 7);\n if (st == '\\\\rbrace') {\n leftchop = 13;\n }\n }\n }\n if (leftchop > 0) {\n result[0] = result[0].substr(leftchop);\n if (typeof symbol.invisible == 'boolean' && symbol.invisible) node = '{' + result[0] + '}';\n else {\n node = '{' + AMTgetTeXsymbol(symbol) + result[0] + '}';\n }\n } else {\n if (typeof symbol.invisible == 'boolean' && symbol.invisible) node = '{\\\\left.' + result[0] + '}';\n else {\n node = '{\\\\left' + AMTgetTeXsymbol(symbol) + result[0] + '}';\n }\n }\n return [node, result[1]];\n case TEXT:\n if (symbol != AMquote) str = AMremoveCharsAndBlanks(str, symbol.input.length);\n if (str.charAt(0) == '{') i = str.indexOf('}');\n else if (str.charAt(0) == '(') i = str.indexOf(')');\n else if (str.charAt(0) == '[') i = str.indexOf(']');\n else if (symbol == AMquote) i = str.slice(1).indexOf('\"') + 1;\n else i = 0;\n if (i == -1) i = str.length;\n st = str.slice(1, i);\n if (st.charAt(0) == ' ') {\n newFrag = '\\\\ ';\n }\n newFrag += '\\\\text{' + st + '}';\n if (st.charAt(st.length - 1) == ' ') {\n newFrag += '\\\\ ';\n }\n str = AMremoveCharsAndBlanks(str, i + 1);\n return [newFrag, str];\n case UNARY:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseSexpr(str);\n if (result[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n if (typeof symbol.func == 'boolean' && symbol.func) {\n // functions hack\n st = str.charAt(0);\n if (\n st == '^' ||\n st == '_' ||\n st == '/' ||\n st == '|' ||\n st == ',' ||\n (symbol.input.length == 1 && symbol.input.match(/\\w/) && st != '(')\n ) {\n return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n } else {\n node = '{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}}';\n return [node, result[1]];\n }\n }\n result[0] = AMTremoveBrackets(result[0]);\n if (symbol.input == 'sqrt') {\n // sqrt\n return ['\\\\sqrt{' + result[0] + '}', result[1]];\n } else if (symbol.input == 'cancel') {\n // cancel\n return ['\\\\cancel{' + result[0] + '}', result[1]];\n } else if (typeof symbol.rewriteleftright != 'undefined') {\n // abs, floor, ceil\n return [\n '{\\\\left' + symbol.rewriteleftright[0] + result[0] + '\\\\right' + symbol.rewriteleftright[1] + '}',\n result[1]\n ];\n } else if (typeof symbol.acc == 'boolean' && symbol.acc) {\n // accent\n //return ['{'+AMTgetTeXsymbol(symbol)+'{'+result[0]+'}}',result[1]];\n return [AMTgetTeXsymbol(symbol) + '{' + result[0] + '}', result[1]];\n } else {\n // font change command\n return ['{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}}', result[1]];\n }\n case BINARY:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseSexpr(str);\n if (result[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n result[0] = AMTremoveBrackets(result[0]);\n var result2 = AMTparseSexpr(result[1]);\n if (result2[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n result2[0] = AMTremoveBrackets(result2[0]);\n if (symbol.input == 'color') {\n newFrag = '{\\\\color{' + result[0].replace(/[\\{\\}]/g, '') + '}' + result2[0] + '}';\n } else if (symbol.input == 'root') {\n newFrag = '{\\\\sqrt[' + result[0] + ']{' + result2[0] + '}}';\n } else {\n newFrag = '{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}{' + result2[0] + '}}';\n }\n return [newFrag, result2[1]];\n case INFIX:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return [symbol.output, str];\n case SPACE:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return ['{\\\\quad\\\\text{' + symbol.input + '}\\\\quad}', str];\n case LEFTRIGHT:\n // if (rightvert) return [null,str]; else rightvert = true;\n AMnestingDepth++;\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseExpr(str, false);\n AMnestingDepth--;\n var st = '';\n st = result[0].charAt(result[0].length - 1);\n //alert(result[0].lastChild+\"***\"+st);\n if (st == '|' && str.charAt(0) !== ',') {\n // its an absolute value subterm\n node = '{\\\\left|' + result[0] + '}';\n return [node, result[1]];\n } else {\n // the \"|\" is a \\mid\n node = '{\\\\mid}';\n return [node, str];\n }\n\n default:\n //alert(\"default\");\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n }\n}\n\nfunction AMTparseIexpr(str) {\n var symbol, sym1, sym2, node, result;\n str = AMremoveCharsAndBlanks(str, 0);\n sym1 = AMgetSymbol(str);\n result = AMTparseSexpr(str);\n node = result[0];\n str = result[1];\n symbol = AMgetSymbol(str);\n if (symbol.ttype == INFIX && symbol.input != '/') {\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n // if (symbol.input == \"/\") result = AMTparseIexpr(str); else\n result = AMTparseSexpr(str);\n if (result[0] == null)\n // show box in place of missing argument\n result[0] = '{}';\n else result[0] = AMTremoveBrackets(result[0]);\n str = result[1];\n // if (symbol.input == \"/\") AMTremoveBrackets(node);\n if (symbol.input == '_') {\n sym2 = AMgetSymbol(str);\n if (sym2.input == '^') {\n str = AMremoveCharsAndBlanks(str, sym2.input.length);\n var res2 = AMTparseSexpr(str);\n res2[0] = AMTremoveBrackets(res2[0]);\n str = res2[1];\n node = '{' + node;\n node += '_{' + result[0] + '}';\n node += '^{' + res2[0] + '}';\n node += '}';\n } else {\n node += '_{' + result[0] + '}';\n }\n } else {\n //must be ^\n //node = '{'+node+'}^{'+result[0]+'}';\n node = node + '^{' + result[0] + '}';\n }\n if (typeof sym1.func != 'undefined' && sym1.func) {\n sym2 = AMgetSymbol(str);\n if (sym2.ttype != INFIX && sym2.ttype != RIGHTBRACKET && (sym1.input.length > 1 || sym2.ttype == LEFTBRACKET)) {\n result = AMTparseIexpr(str);\n node = '{' + node + result[0] + '}';\n str = result[1];\n }\n }\n }\n\n return [node, str];\n}\n\nfunction AMTparseExpr(str, rightbracket) {\n var symbol,\n node,\n result,\n i,\n nodeList = [],\n newFrag = '';\n var addedright = false;\n do {\n str = AMremoveCharsAndBlanks(str, 0);\n result = AMTparseIexpr(str);\n node = result[0];\n str = result[1];\n symbol = AMgetSymbol(str);\n if (symbol.ttype == INFIX && symbol.input == '/') {\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseIexpr(str);\n\n if (result[0] == null)\n // show box in place of missing argument\n result[0] = '{}';\n else result[0] = AMTremoveBrackets(result[0]);\n str = result[1];\n node = AMTremoveBrackets(node);\n node = '\\\\frac' + '{' + node + '}';\n node += '{' + result[0] + '}';\n newFrag += node;\n symbol = AMgetSymbol(str);\n } else if (node != undefined) newFrag += node;\n } while (\n ((symbol.ttype != RIGHTBRACKET && (symbol.ttype != LEFTRIGHT || rightbracket)) || AMnestingDepth == 0) &&\n symbol != null &&\n symbol.output != ''\n );\n if (symbol.ttype == RIGHTBRACKET || symbol.ttype == LEFTRIGHT) {\n // if (AMnestingDepth > 0) AMnestingDepth--;\n var len = newFrag.length;\n if (len > 2 && newFrag.charAt(0) == '{' && newFrag.indexOf(',') > 0) {\n //could be matrix (total rewrite from .js)\n var right = newFrag.charAt(len - 2);\n if (right == ')' || right == ']') {\n var left = newFrag.charAt(6);\n if ((left == '(' && right == ')' && symbol.output != '}') || (left == '[' && right == ']')) {\n var mxout = '';\n var pos = new Array(); //position of commas\n pos.push(0);\n var matrix = true;\n var mxnestingd = 0;\n var subpos = [];\n subpos[0] = [0];\n var lastsubposstart = 0;\n var mxanynestingd = 0;\n var columnaligns = '';\n for (i = 1; i < len - 1; i++) {\n if (newFrag.charAt(i) == left) mxnestingd++;\n if (newFrag.charAt(i) == right) {\n mxnestingd--;\n if (mxnestingd == 0 && newFrag.charAt(i + 2) == ',' && newFrag.charAt(i + 3) == '{') {\n pos.push(i + 2);\n lastsubposstart = i + 2;\n subpos[lastsubposstart] = [i + 2];\n }\n }\n if (newFrag.charAt(i) == '[' || newFrag.charAt(i) == '(' || newFrag.charAt(i) == '{') {\n mxanynestingd++;\n }\n if (newFrag.charAt(i) == ']' || newFrag.charAt(i) == ')' || newFrag.charAt(i) == '}') {\n mxanynestingd--;\n }\n if (newFrag.charAt(i) == ',' && mxanynestingd == 1) {\n subpos[lastsubposstart].push(i);\n }\n if (mxanynestingd < 0) {\n //happens at the end of the row\n if (lastsubposstart == i + 1) {\n //if at end of row, skip to next row\n i++;\n } else {\n //misformed something - abandon treating as a matrix\n matrix = false;\n }\n }\n }\n\n pos.push(len);\n var lastmxsubcnt = -1;\n if (mxnestingd == 0 && pos.length > 0 && matrix) {\n for (i = 0; i < pos.length - 1; i++) {\n if (i > 0) mxout += '\\\\\\\\';\n if (i == 0) {\n //var subarr = newFrag.substr(pos[i]+7,pos[i+1]-pos[i]-15).split(',');\n if (subpos[pos[i]].length == 1) {\n var subarr = [newFrag.substr(pos[i] + 7, pos[i + 1] - pos[i] - 15)];\n } else {\n var subarr = [newFrag.substring(pos[i] + 7, subpos[pos[i]][1])];\n for (var j = 2; j < subpos[pos[i]].length; j++) {\n subarr.push(newFrag.substring(subpos[pos[i]][j - 1] + 1, subpos[pos[i]][j]));\n }\n subarr.push(newFrag.substring(subpos[pos[i]][subpos[pos[i]].length - 1] + 1, pos[i + 1] - 8));\n }\n } else {\n //var subarr = newFrag.substr(pos[i]+8,pos[i+1]-pos[i]-16).split(',');\n if (subpos[pos[i]].length == 1) {\n var subarr = [newFrag.substr(pos[i] + 8, pos[i + 1] - pos[i] - 16)];\n } else {\n var subarr = [newFrag.substring(pos[i] + 8, subpos[pos[i]][1])];\n for (var j = 2; j < subpos[pos[i]].length; j++) {\n subarr.push(newFrag.substring(subpos[pos[i]][j - 1] + 1, subpos[pos[i]][j]));\n }\n subarr.push(newFrag.substring(subpos[pos[i]][subpos[pos[i]].length - 1] + 1, pos[i + 1] - 8));\n }\n }\n for (j = subarr.length - 1; j >= 0; j--) {\n if (subarr[j] == '{\\\\mid}') {\n if (i == 0) {\n columnaligns = '|' + columnaligns;\n }\n subarr.splice(j, 1);\n } else if (i == 0) {\n columnaligns = 'c' + columnaligns;\n }\n }\n if (lastmxsubcnt > 0 && subarr.length != lastmxsubcnt) {\n matrix = false;\n } else if (lastmxsubcnt == -1) {\n lastmxsubcnt = subarr.length;\n }\n mxout += subarr.join('&');\n }\n }\n mxout = '\\\\begin{array}{' + columnaligns + '} ' + mxout + '\\\\end{array}';\n\n if (matrix) {\n newFrag = mxout;\n }\n }\n }\n }\n\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n if (typeof symbol.invisible != 'boolean' || !symbol.invisible) {\n node = '\\\\right' + AMTgetTeXsymbol(symbol); //AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));\n newFrag += node;\n addedright = true;\n } else {\n newFrag += '\\\\right.';\n addedright = true;\n }\n }\n if (AMnestingDepth > 0 && !addedright) {\n newFrag += '\\\\right.'; //adjust for non-matching left brackets\n //todo: adjust for non-matching right brackets\n }\n\n return [newFrag, str];\n}\n\nexport default function AMTparseAMtoTeX(str) {\n AMnestingDepth = 0;\n str = str.replace(/(&nbsp;|\\u00a0|&#160;)/g, '');\n str = str.replace(/&gt;/g, '>');\n str = str.replace(/&lt;/g, '<');\n if (str.match(/\\S/) == null) {\n return '';\n }\n return AMTparseExpr(str.replace(/^\\s+/g, ''), false)[0];\n}\n\nAMinitSymbols();\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown katex extension for markdown\n */\n\nif (typeof window === 'undefined') {\n throw Error('The showdown katex extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport asciimathToTex from './asciimath2tex';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof katex === 'undefined') {\n var katex = window.katex || undefined;\n}\n\nif (typeof renderMathInElement === 'undefined') {\n var RenderMathInElement = window.renderMathInElement || undefined;\n}\n\nlet katexElementCount = 0;\nfunction hasKatex() {\n return typeof RenderMathInElement !== 'undefined' && RenderMathInElement && typeof katex !== 'undefined' && katex\n ? true\n : false;\n}\n\nlet dync = false;\nconst cssCdnName = 'katexCSS';\nfunction dyncLoadScript(callback) {\n const sync = hasKatex();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs\n .loadScript('katex')\n .then(name => {\n katex = utils.interopDefault(window[name]);\n return cdnjs.loadScript('renderMathInElement');\n })\n .then(name => {\n RenderMathInElement = utils.interopDefault(window[name]);\n if (typeof callback === 'function' && callback) {\n callback(RenderMathInElement);\n }\n })\n .catch(e => {\n console.log('load script error: ' + e);\n });\n return sync;\n }\n }\n\n if (typeof callback === 'function' && callback) {\n callback(RenderMathInElement);\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasKatex()) return;\n cdnjs.unloadScript('renderMathInElement');\n cdnjs.unloadScript('katex');\n cdnjs.unloadStyleSheet(cssCdnName);\n katex = null;\n window.katex = null;\n RenderMathInElement = null;\n window.renderMathInElement = null; \n dync = false; \n}\n\nfunction onRenderKatex(resolve, res) {\n if (hasKatex()) {\n const id = res.id;\n const name = res.className;\n const input = res.input;\n const data = res.data;\n const cssLink = res.cssLink;\n const config = res.options;\n const doc = res.element.ownerDocument;\n let html = '';\n if (data instanceof Array) {\n data.forEach(code => {\n if (code === '') {\n html += '<br>';\n } else {\n const math = katex.renderToString(code, config);\n html += cssLink\n ? `<div title=\"${input}\" class=\"${name} css-katex\" data-css=\"${cssLink}\">${math}</div>`\n : `<div title=\"${input}\" class=\"${name}\">${math}</div>`;\n }\n });\n } else {\n const math = katex.renderToString(data, config);\n html = cssLink\n ? `<div title=\"${input}\" class=\"${name} css-katex\" data-css=\"${cssLink}\">${math}</div>`\n : `<div title=\"${input}\" class=\"${name}\">${math}</div>`;\n }\n res.element.parentNode.outerHTML = html;\n --katexElementCount;\n if (!katexElementCount) {\n RenderMathInElement(doc.body, config);\n }\n resolve(true);\n } else {\n setTimeout(() => {\n onRenderKatex(resolve, res);\n }, 10);\n }\n}\n\nfunction renderKatex(element, config, isAsciimath) {\n return new Promise(resolve => {\n let latex;\n const meta = utils.createElementMeta('katex', element, code => {\n let data;\n latex = code;\n const codes = code.split(/\\n[ \\f\\r\\t\\v]*\\n/);\n if (codes.length > 1) {\n data = new Array();\n codes.forEach(code => {\n code = code.trim();\n if (code !== '') {\n code = isAsciimath ? asciimathToTex(code) : code;\n }\n data.push(code);\n });\n } else {\n data = isAsciimath ? asciimathToTex(latex) : latex;\n }\n return data;\n });\n if (!meta) {\n return resolve(false);\n }\n\n meta.cssLink = cdnjs.getSrc(true, cssCdnName);\n meta.input = latex;\n meta.options = config;\n onRenderKatex(resolve, meta);\n });\n}\n\nfunction renderBlockElements(latex, asciimath, config) {\n katexElementCount = latex.length + asciimath.length;\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n latex.forEach(element => {\n promiseArray.push(renderKatex(element, config, false));\n });\n asciimath.forEach(element => {\n promiseArray.push(renderKatex(element, config, true));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n/**\n * https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n * @param {string} str\n * @returns {string} regexp escaped string\n */\nfunction escapeRegExp(str) {\n return str.replace(/[-[\\]/{}()*+?.\\\\$^|]/g, '\\\\$&');\n}\n\n// katex config\nconst getConfig = (userConfig = {}) => {\n let config = {\n displayMode: true,\n throwOnError: false, // fail silently\n errorColor: '#ff0000',\n delimiters: null,\n ...userConfig\n };\n\n function _isEmptyArray(a) {\n if (!Array.isArray(a) || !a.length) {\n return false;\n }\n\n return true;\n }\n\n function _isObjectProperty(obj, prop) {\n if (!obj || typeof obj !== 'object' || !obj.hasOwnProperty(prop)) {\n return false;\n }\n return true;\n }\n\n function _getDelimiter(obj, style, type) {\n if (!_isObjectProperty(obj, style) || !_isObjectProperty(obj[style], type) || !_isEmptyArray(obj[style][type])) {\n return false;\n }\n\n obj[style][type].forEach(delimiter => {\n delimiter.display = type === 'inline' ? false : true;\n if (style === 'asciimath') {\n delimiter.asciimath = true;\n }\n });\n return obj[style][type];\n }\n\n if (!Array.isArray(config.delimiters)) {\n config.delimiters = []\n .concat(\n _getDelimiter(config.delimiters, 'texmath', 'display') || [\n { left: '$$', right: '$$', display: true },\n { left: '\\\\[', right: '\\\\]', display: true },\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true } \n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'texmath', 'inline') || [\n { left: '\\\\(', right: '\\\\)', display: false }\n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'asciimath', 'display') || [\n { left: '@@', right: '@@', display: true, asciimath: true }\n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'asciimath', 'inline') || [\n { left: \"\\\\$\", right: \"\\\\$\", display: false, asciimath: true }\n ]\n );\n } else if (!config.delimiters.length) {\n config.delimiters = [\n { left: '$$', right: '$$', display: true },\n { left: '\\\\[', right: '\\\\]', display: true },\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true }, \n { left: '\\\\(', right: '\\\\)', display: false },\n { left: '@@', right: '@@', display: true, asciimath: true },\n { left: \"\\\\$\", right: \"\\\\$\", display: false, asciimath: true }\n ];\n }\n return config;\n};\n\nfunction showdownKatex(userConfig) {\n let inlineMathCount = 0;\n const config = getConfig(userConfig);\n const mathDelimiters = config.delimiters.map(({ left, right, display, asciimath }) => {\n const test = new RegExp(`${escapeRegExp(left)}(.+?)${escapeRegExp(right)}`, 'g');\n const replacer = (match, math) => {\n ++inlineMathCount;\n if (asciimath) {\n math = asciimathToTex(math);\n }\n if (display) {\n return `\\\\[${math}\\\\]`;\n }\n return `\\\\(${math}\\\\)`;\n };\n return { test, replacer };\n });\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n inlineMathCount = 0;\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n if (mathDelimiters.length) {\n // convert inline math to inline latex\n // ignore anything in code and pre elements\n wrapper.querySelectorAll(':not(code):not(pre)').forEach(el => {\n /** @type Text[] */\n const textNodes = [...el.childNodes].filter(\n // skip \"empty\" text nodes\n node => node.nodeName === '#text' && node.nodeValue.trim()\n );\n\n textNodes.forEach(node => {\n const newText = mathDelimiters.reduce(\n (acc, { test, replacer }) => acc.replace(test, replacer),\n node.nodeValue\n );\n node.nodeValue = newText;\n });\n });\n }\n\n // find the math in code blocks\n const latex = wrapper.querySelectorAll('code.latex.language-latex');\n const asciimath = wrapper.querySelectorAll('code.asciimath.language-asciimath');\n\n if (!latex.length && !asciimath.length) {\n if (inlineMathCount > 0) {\n this.config.cssLink = cdnjs.getSrc(true, cssCdnName);\n const that = this;\n function asyncRenderKatex(resolve, render) {\n if (hasKatex()) {\n render(wrapper.ownerDocument.body, that.config);\n resolve(true);\n } else {\n setTimeout(() => {\n asyncRenderKatex(resolve, render);\n }, 10);\n }\n }\n console.log(format(`Begin render inline katex elements.`));\n return new Promise(resolve => {\n dyncLoadScript(render => {\n asyncRenderKatex(resolve, render);\n });\n }).then(() => {\n console.log(format(`End render inline katex elements.`));\n return obj;\n });\n }\n\n return false;\n }\n\n this.config.cssLink = cdnjs.getSrc(true, cssCdnName);\n utils.addCssLink(obj, this.config.cssLink, 'css-katex');\n console.log(format(`Begin render katex elements.`));\n return renderBlockElements(latex, asciimath, this.config).then(() => {\n console.log(format(`End render katex elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownKatex;\n","/*\n * Copyright (c) 2024-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown echarts extension for markdown\n */\n'use strict';\n\nconst extName = 'echarts';\n\nif (typeof window === 'undefined') {\n throw Error(`The showdown ${extName} extension can only be used in browser environment!`);\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof echarts === 'undefined') {\n var echarts = window.echarts || undefined;\n}\n\nfunction hasEcharts() {\n return !!echarts;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasEcharts();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadScript(extName).then((name) => {\n echarts = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasEcharts()) return;\n cdnjs.unloadScript(extName);\n echarts = null;\n window.echarts = null;\n dync = false;\n}\n\nfunction onRenderEcharts(resolve, meta) {\n if (hasEcharts()) {\n const id = meta.id;\n const container = meta.container;\n const name = meta.className;\n const node = meta.element.parentNode;\n // // 在 SSR 模式下第一个参数不需要再传入 DOM 对象\n // let chart = echarts.init(null, null, {\n // renderer: 'svg', // 必须使用 SVG 模式\n // ssr: true,\n // width: res.config.width, // 需要指明高和宽\n // height: res.config.height\n // });\n // // 像正常使用一样 setOption\n // const option = JSON.parse(data);\n // chart.setOption(option);\n // // 输出字符串\n // const svg = chart.renderToSVGString();\n // // 如果不再需要图表,调用 dispose 以释放内存\n // chart.dispose();\n // chart = null;\n if (!meta.lang) {\n meta.lang = { width: '400px', height: '300px' };\n } else {\n if (!meta.lang.width) meta.lang.width = '400px';\n if (!meta.lang.height) meta.lang.height = '300px';\n }\n const style = `width:${meta.lang.width}; height:${meta.lang.height};`;\n node.outerHTML = `<div id=\"${container}\" class=\"${name}\" style=\"${style}\"><div id=\"${id}\" style=\"width:100%;height:100%;display:inline-block\"></div></div>`;\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderEcharts(resolve, meta);\n }, 20);\n}\n\n/**\n * render echarts graphs\n */\nfunction renderEcharts(element, scripts, config) {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return Promise.resolve(false);\n }\n\n config = { ...config, ssr: false, width: meta.lang.width, height: meta.lang.height };\n const echartRenderer = (meta, config) => {\n const result = () => {\n const wval = eval;\n let el = document.getElementById(meta.id);\n if (el) {\n let chart = echarts.getInstanceByDom(el);\n if (!chart) {\n el.innerHTML = '';\n }\n chart = echarts.init(el, null, config);\n if (\n meta.lang &&\n meta.lang.type &&\n typeof meta.lang.type === 'string' &&\n meta.lang.type.toLowerCase() == 'javascript'\n ) {\n const option = wval(`(function(){${meta.data}; return option;})();`);\n chart.setOption(option);\n } else {\n // JSON string\n const option = JSON.parse(meta.data);\n chart.setOption(option);\n }\n }\n };\n\n result.toString = () => {\n if (\n meta.lang &&\n meta.lang.type &&\n typeof meta.lang.type === 'string' &&\n meta.lang.type.toLowerCase() == 'javascript'\n ) {\n return `function(){\n const config = ${JSON.stringify(config)};\n let el = document.getElementById('${meta.id}');\n if (el) {\n let chart = echarts.getInstanceByDom(el);\n if (!chart) {\n el.innerHTML = '';\n }\n chart = echarts.init(el, null, config);\n ${meta.data}\n chart.setOption(option); \n }\n }`;\n }\n\n return `function(){\n const config = ${JSON.stringify(config)};\n let el = document.getElementById('${meta.id}');\n if (el) {\n let chart = echarts.getInstanceByDom(el);\n if (!chart) {\n el.innerHTML = '';\n }\n chart = echarts.init(el, null, config);\n const option = ${meta.data};\n chart.setOption(option);\n }\n }`;\n };\n return result;\n };\n const script = {\n id: meta.container,\n code: echartRenderer(meta, config),\n host: `#${meta.container}`,\n };\n scripts.push(script);\n return new Promise((resolve) => {\n onRenderEcharts(resolve, meta);\n });\n}\n\n// <div class=\"echarts\"></div>\nfunction renderEchartsElements(elements, scripts, config) {\n const script = {\n outer: [\n {\n name: extName,\n src: cdnjs.getSrc(false, extName, 'jsdelivr'),\n },\n ],\n inner: [],\n };\n scripts.push(script);\n dyncLoadScript();\n return new Promise((resolve) => {\n const promiseArray = [];\n elements.forEach((element) => {\n promiseArray.push(renderEcharts(element, script.inner, config));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// echarts default config\nconst getConfig = (config = {}) => ({\n renderer: 'svg',\n ssr: false,\n tooltip: {\n show: true,\n },\n animation: true,\n useDirtyRect: false,\n ...config,\n});\n\nfunction showdownEcharts(userConfig) {\n const config = getConfig(userConfig);\n return [\n {\n type: 'output',\n config: config,\n filter: function (obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the echarts in code blocks\n const elements = wrapper.querySelectorAll(`code.${extName}.language-${extName}`);\n if (!elements.length) {\n return false;\n }\n\n console.log(format(`Begin render ${extName} elements.`));\n return renderEchartsElements(elements, obj.scripts, this.config).then(() => {\n console.log(format(`End render ${extName} elements.`));\n return obj;\n });\n },\n },\n ];\n}\n\nexport default showdownEcharts;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown mermaid extension for markdown\n */\n'use strict';\n\nconst extName = \"mermaid\";\n\nif (typeof window === 'undefined') {\n throw Error('The showdown mermaid extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof mermaid === 'undefined') {\n var mermaid = window.mermaid || undefined;\n}\n\nfunction hasMermaid() {\n return typeof mermaid !== 'undefined' && mermaid ? true : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript(config) {\n // When window object exists,\n // it means browser environment, otherwise node.js environment.\n // In browser environment, html need to be rendered asynchronously.\n const sync = hasMermaid();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadScript(extName).then(name => {\n mermaid = utils.interopDefault(window[name]);\n mermaid.initialize(config);\n });\n return sync\n }\n }\n\n mermaid.initialize(config);\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasMermaid()) return;\n cdnjs.unloadScript(extName);\n katex = null;\n window.mermaid = null;\n mermaid = null; \n dync = false; \n}\n\n\nfunction onRenderMermaid(resolve, res) {\n if (hasMermaid()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const node = res.element.parentNode;\n mermaid.render(id, data).then(m =>{\n node.outerHTML = `<div class=\"${name}\">${m.svg}</div>`;\n resolve(true);\n });\n return;\n }\n\n setTimeout(() => {\n onRenderMermaid(resolve, res);\n }, 10);\n}\n\n/**\n * render mermaid graphs\n */\nfunction renderMermaid(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n onRenderMermaid(resolve, meta);\n });\n}\n\n// <div class=\"mermaid\"></div>\nfunction renderMermaidElements(elements, config) {\n dyncLoadScript(config);\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderMermaid(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// mermaid default config\nconst getConfig = (config = {}) => ({\n theme: 'forest',\n logLevel: 4,\n startOnLoad: false,\n arrowMarkerAbsolute: false,\n flowchart: {\n curve: 'basis'\n },\n gantt: {\n axisFormat: '%m/%d/%Y'\n },\n sequence: {\n actorMargin: 50\n },\n ...config\n});\n\nfunction showdownMermaid(userConfig) {\n const config = getConfig(userConfig);\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the mermaid in code blocks\n const elements = wrapper.querySelectorAll('code.mermaid.language-mermaid');\n if (!elements.length) {\n return false;\n }\n\n console.log(format(`Begin render mermaid elements.`));\n return renderMermaidElements(elements, this.config).then(() => {\n console.log(format(`End render mermaid elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownMermaid;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: zlib codec for PlantUML website\n * Encode/Decode code taken from the PlantUML website:\n * http://plantuml.sourceforge.net/codejavascript2.html\n */\n'use strict';\n\nimport zlib from 'zlib';\n\nfunction encode64(data) {\n var r = '';\n for (var i = 0; i < data.length; i += 3) {\n if (i + 2 == data.length) {\n r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), 0);\n } else if (i + 1 == data.length) {\n r += append3bytes(data.charCodeAt(i), 0, 0);\n } else {\n r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), data.charCodeAt(i + 2));\n }\n }\n return r;\n}\n\nfunction append3bytes(b1, b2, b3) {\n var c1 = b1 >> 2;\n var c2 = ((b1 & 0x3) << 4) | (b2 >> 4);\n var c3 = ((b2 & 0xf) << 2) | (b3 >> 6);\n var c4 = b3 & 0x3f;\n var r = '';\n r += encode6bit(c1 & 0x3f);\n r += encode6bit(c2 & 0x3f);\n r += encode6bit(c3 & 0x3f);\n r += encode6bit(c4 & 0x3f);\n return r;\n}\n\nfunction encode6bit(b) {\n if (b < 10) {\n return String.fromCharCode(48 + b);\n }\n b -= 10;\n if (b < 26) {\n return String.fromCharCode(65 + b);\n }\n b -= 26;\n if (b < 26) {\n return String.fromCharCode(97 + b);\n }\n b -= 26;\n if (b == 0) {\n return '-';\n }\n if (b == 1) {\n return '_';\n }\n return '?';\n}\n\nfunction decode6bit(cc) {\n var c = cc.charCodeAt(0);\n if (cc === '_') return 63;\n if (cc === '-') return 62;\n if (c >= 97) return c - 61; // - 97 + 26 + 10\n if (c >= 65) return c - 55; // - 65 + 10\n if (c >= 48) return c - 48;\n return '?';\n}\n\nfunction extract3bytes(data) {\n var c1 = decode6bit(data[0]);\n var c2 = decode6bit(data[1]);\n var c3 = decode6bit(data[2]);\n var c4 = decode6bit(data[3]);\n var b1 = (c1 << 2) | ((c2 >> 4) & 0x3f);\n var b2 = ((c2 << 4) & 0xf0) | ((c3 >> 2) & 0xf);\n var b3 = ((c3 << 6) & 0xc0) | (c4 & 0x3f);\n return [b1, b2, b3];\n}\n\nfunction decode64(data) {\n var r = '';\n var i = 0;\n for (i = 0; i < data.length; i += 4) {\n var t = extract3bytes(data.substring(i, i + 4));\n r = r + String.fromCharCode(t[0]);\n r = r + String.fromCharCode(t[1]);\n r = r + String.fromCharCode(t[2]);\n }\n return r;\n}\n\nfunction encode(data) {\n return encode64(\n zlib\n .deflateRawSync(data, {\n level: 9\n })\n .toString('binary')\n );\n}\n\nfunction decode(data) {\n return zlib.inflateRawSync(Buffer.from(decode64(data), 'binary')).toString();\n}\n\nfunction zEncode(data) {\n return zlib\n .deflateRawSync(data, {\n level: 9\n })\n .toString('base64');\n}\n\nfunction zDecode(data) {\n return zlib.inflateRawSync(Buffer.from(data, 'base64')).toString();\n}\n\nconst brEncode =\n typeof zlib.brotliCompressSync === 'undefined'\n ? undefined\n : function(data) {\n return zlib\n .brotliCompressSync(Buffer.from(data), {\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 11\n }\n })\n .toString('base64');\n };\n\nconst brDecode =\n typeof zlib.brotliDecompressSync === 'undefined'\n ? undefined\n : function(data) {\n return zlib.brotliDecompressSync(Buffer.from(data, 'base64')).toString();\n };\n\nconst zlibcodec = { encode, decode, brEncode, brDecode };\nexport { zlibcodec as default, encode, decode, zEncode, zDecode, brEncode, brDecode };\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: plantuml codec for PlantUML website\n * Encode/Decode code taken from the PlantUML website:\n * http://plantuml.sourceforge.net/codejavascript2.html\n */\n\n'use strict';\n\nimport * as zlibcodec from './zlib-codec.js';\n\nfunction encodeuml(data) {\n const startuml = '@startuml';\n const enduml = '@enduml';\n const s = `${startuml}${String(data.split(startuml)[1]).split(enduml)[0] || ''}${enduml}`;\n return zlibcodec.encode(s);\n}\n\nfunction decodeuml(data) {\n return zlibcodec.decode(data);\n}\n\nconst plantumlcodec = {\n encodeuml,\n decodeuml\n};\n\nexport { plantumlcodec as default, encodeuml, decodeuml };\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown plantuml extension for markdown\n */\n'use strict';\n\nimport format from './log';\nimport plantumlcodec from '../utils/plantuml-codec.js';\n\nconst defaultUmlWebsite = 'www.plantuml.com/plantuml';\nconst defaultImageFormat = 'img';\n\nlet umlElementCount = 0;\nfunction renderPlantumlElement(element, config) {\n return new Promise(resolve => {\n const langattr = element.dataset.lang;\n let langobj = null;\n if (langattr) {\n try {\n langobj = JSON.parse(langattr);\n } catch {\n console.log(`Error: parse plantuml data-lang ${langattr} failed.`);\n }\n }\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return resolve(false);\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const code = element.textContent.trim();\n const name =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const imageFormat = config.imageFormat;\n if (imageFormat === 'svg') {\n const id = 'plantuml-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n if (typeof config.svgRender === 'function' && config.svgRender) {\n config.svgRender(id, name, code, umlElementCount).then(svgData => {\n element.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svgData}</div>`;\n resolve(true);\n });\n } else if (typeof window !== 'undefined' && window.fetch && window.dispatchEvent) {\n const protocol = window && window.location.protocol;\n const website = (protocol === 'http:' || protocol === 'https:' ? '//' : 'https://') + config.umlWebSite;\n const imageExtension = imageFormat !== defaultImageFormat ? `.${imageFormat}` : '';\n const uml = plantumlcodec.encodeuml(code);\n const src = `${website}/${imageFormat}/${uml}${imageExtension}`;\n window\n .fetch(src)\n .then(response => {\n if (response.ok) {\n return response.text();\n }\n })\n .then(svgData => {\n element.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svgData}</div>`;\n resolve(true);\n });\n }\n } else {\n const protocol = window && window.location.protocol;\n const website = (protocol === 'http:' || protocol === 'https:' ? '//' : 'https://') + config.umlWebSite;\n const imageExtension = imageFormat !== defaultImageFormat ? `.${imageFormat}` : '';\n const uml = plantumlcodec.encodeuml(code);\n const src = `${website}/${imageFormat}/${uml}${imageExtension}`;\n element.parentNode.outerHTML = `<div class=\"${name}\"><img src='${src}' alt=''></img></div>`;\n return resolve(true);\n }\n });\n}\n\n// <div class=\"plantuml\"></div>\nfunction renderPlantumlElements(elements, config) {\n umlElementCount = elements.length;\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderPlantumlElement(element, config));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// Plantuml default config\nconst getConfig = (config = {}) => ({\n umlWebSite: defaultUmlWebsite,\n imageFormat: defaultImageFormat,\n svgRender: null,\n ...config\n});\n\nfunction showdownPlantuml(userConfig) {\n const config = getConfig(userConfig);\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the plantuml in code blocks\n const elements = wrapper.querySelectorAll('code.plantuml.language-plantuml');\n if (!elements.length) {\n return false;\n }\n\n console.log(format(`Begin render plantuml elements.`));\n return renderPlantumlElements(elements, this.config).then(() => {\n console.log(format(`End render plantuml elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownPlantuml;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown railroad extension for markdown\n */\n'use strict';\n\nconst extName = \"railroad\";\nconst cssCdnName = 'railroadCSS';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown railroad extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nlet railroad = false;\nfunction hasRailroad() {\n return railroad;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasRailroad();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs.loadScript(extName).then(() => {\n railroad = true;\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasRailroad()) return;\n cdnjs.unloadScript(extName);\n cdnjs.unloadStyleSheet(cssCdnName);\n railroad = false;\n dync = false; \n}\n\nfunction onRenderRailroad(resolve, res) {\n if (hasRailroad()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const cssLink = res.cssLink;\n const railroadElement = window.eval(data).format();\n const doc = res.element.ownerDocument;\n res.element.parentNode.outerHTML = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-railroad\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n railroadElement.addTo(doc.getElementById(id));\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderRailroad(resolve, res);\n }, 10);\n}\n\n/**\n * render railroad graphs\n */\nfunction renderRailroad(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n\n meta.cssLink = cdnjs.getSrc(true, cssCdnName);\n onRenderRailroad(resolve, meta);\n });\n}\n\n// <div class=\"railroad\"></div>\nfunction renderRailroadElements(elements) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderRailroad(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownRailroad() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the railroad in code blocks\n const elements = wrapper.querySelectorAll('code.railroad.language-railroad');\n if (!elements.length) {\n return false;\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(true, cssCdnName)\n };\n utils.addCssLink(obj, this.config.cssLink, 'css-railroad');\n console.log(format(`Begin render railroad elements.`));\n return renderRailroadElements(elements).then(() => {\n console.log(format(`End render railroad elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownRailroad;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown sequence extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown sequence extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Raphael === 'undefined') {\n var Raphael = window.Raphael || undefined;\n}\n\n// js-sequence-diagrams can create a global object named Diagrams of window,\n// To be compatible with railroad diagrams extension that also has window.Diagram object,\n// You need to save the original Diagrams object of railroad diagrams extension here.\nlet diagram;\nif (typeof window !== 'undefined') {\n if (window.Diagram) {\n diagram = window.Diagram;\n if (window.Diagram['Signal']) {\n var sequence = window.Diagram;\n }\n }\n}\n\nconst themes = ['simple', 'hand'];\nif (typeof sequence === 'undefined' && typeof window !== 'undefined') {\n var sequence = window.SequenceJS;\n}\n\nfunction hasRaphael() {\n return !!Raphael;\n}\n\nfunction hasSequence() {\n return hasRaphael() && !!sequence;\n}\n\nfunction hasFlowchart() {\n return hasRaphael() && !!window.flowchart;\n}\n\nlet dync = false;\nconst cssCdnName = 'sequenceCSS';\nfunction dyncLoadScript() {\n const sync = hasSequence();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs\n .loadScript('WebFont')\n .then(() => {\n if (!hasRaphael()) {\n return cdnjs.loadScript('Raphael');\n }\n\n return 'Raphael';\n })\n .then((name) => {\n Raphael = utils.interopDefault(window[name]);\n return cdnjs.loadScript('Snap');\n })\n .then(() => {\n return cdnjs.loadScript('underscore');\n })\n .then(() => {\n // You need to save the original Diagrams object of sequence diagrams extension here.\n if (!diagram && window['Diagram']) {\n diagram = window['Diagram'];\n }\n return cdnjs.loadScript('sequence');\n })\n .then(() => {\n sequence = window['Diagram'];\n window.SequenceJS = sequence;\n // You need to replace the original Diagrams object of sequence diagrams extension here.\n if (diagram) {\n window['Diagram'] = diagram;\n }\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasSequence()) return;\n cdnjs.unloadScript('sequence');\n cdnjs.unloadScript('underscore');\n cdnjs.unloadScript('Snap');\n cdnjs.unloadScript('WebFont');\n cdnjs.unloadStyleSheet(cssCdnName);\n diagram = null;\n sequence = null;\n window.Diagram = null;\n window.SequenceJS = null;\n if (!hasFlowchart()) {\n cdnjs.unloadScript('Raphael');\n const es = document.getElementsByTagName('i');\n if (es && es.length > 0) {\n const body = document.body;\n for (let i = 0; i < es.length; i++) {\n const e = es[i];\n if (e.title && e.title === 'Raphaël Colour Picker') {\n body.removeChild(e);\n }\n }\n }\n Raphael = null;\n window.Raphael = null;\n }\n dync = false;\n}\n\n/**\n * render sequence graphs\n */\nfunction renderSequence(element) {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const sync = dyncLoadScript();\n const cssLink = cdnjs.getSrc(true, cssCdnName);\n const code = element.textContent.trim();\n const name = 'js-sequence' + (!diagramClass ? '' : ' ') + diagramClass;\n const id = 'sequence-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n element.id = id;\n if (cssLink) {\n element.className = element.className + (!element.className ? '' : ' ') + 'css-sequence';\n element.dataset.css = cssLink;\n }\n if (!sync && typeof window !== 'undefined' && window.dispatchEvent) {\n Promise.resolve(id).then((elementid) => {\n // dispatch sequence custom event\n window.dispatchEvent(\n new CustomEvent('sequence', {\n detail: {\n id: elementid,\n className: name,\n data: code,\n langattr: langattr,\n cssLink: cssLink,\n },\n })\n );\n });\n } else {\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n // dispatch sequence custom event\n window.dispatchEvent(\n new CustomEvent('sequence', {\n detail: {\n id: id,\n className: name,\n data: code,\n langattr: langattr,\n cssLink: cssLink\n }\n })\n );\n }\n }\n}\n\n// <div class=\"sequence\"></div>\nfunction renderSequenceElements(elements) {\n if (!elements.length) {\n return false;\n }\n elements.forEach((element) => {\n renderSequence(element);\n });\n return true;\n}\n\nfunction onRenderSequence(element) {\n if (hasSequence()) {\n const id = element.id;\n const name = element.className;\n const data = element.data;\n const cssLink = element.cssLink;\n let theme = 'hand';\n const langattr = element.langattr;\n if (langattr) {\n const obj = JSON.parse(langattr);\n if (obj && obj.theme && themes.indexOf(obj.theme) != -1) {\n theme = obj.theme;\n }\n }\n let el = window.document.getElementById(id);\n if (el) {\n el.parentNode.outerHTML = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-sequence\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n el = window.document.getElementById(id);\n const d = sequence.parse(data);\n const options = { theme: theme };\n d.drawSVG(el ? el : id, options);\n return;\n }\n }\n setTimeout(() => {\n onRenderSequence(element);\n }, 10);\n}\n\nfunction showdownSequence() {\n let hasEvent = false;\n return [\n {\n type: 'output',\n filter: function (html) {\n if (typeof html === 'string') {\n // parse html\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n\n // find the sequence in code blocks\n const elements = wrapper.querySelectorAll('code.sequence.language-sequence');\n if (elements.length) {\n if (!hasEvent) {\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n hasEvent = true;\n // Listen sequence custom event\n window.addEventListener('sequence', (event) => {\n if (event.detail) {\n onRenderSequence(event.detail);\n }\n });\n }\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(true, cssCdnName),\n };\n }\n if (!renderSequenceElements(elements)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n\n if (!html || !html.wrapper) {\n return false;\n }\n\n const obj = html;\n const wrapper = obj.wrapper;\n const elements = wrapper.querySelectorAll('code.sequence.language-sequence');\n if (elements.length > 0) {\n utils.addCssLink(obj, cdnjs.getSrc(true, cssCdnName), 'css-sequence');\n }\n return obj;\n },\n },\n ];\n}\n\nexport default showdownSequence;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown wavedrom extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown wavedrom extension can only be used in browser environment!');\n}\n\nimport log from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof WaveDrom === 'undefined') {\n var WaveDrom = window.WaveDrom || undefined;\n}\n\nlet wdCount = 0;\nlet indexWD = 0;\nfunction hasWavedrom() {\n return !!WaveDrom;\n}\n\nlet dync = false;\nfunction dyncLoadScript(skin) {\n const sync = hasWavedrom();\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n if (typeof window !== 'undefined') {\n cdnjs\n .loadScript({ WaveDromSkin: skin })\n .then(() => {\n return cdnjs.loadScript('WaveDrom');\n })\n .then(name => {\n WaveDrom = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript(skin) {\n if (!hasWavedrom()) return;\n cdnjs.unloadScript('WaveDrom');\n cdnjs.unloadScript({ WaveDromSkin: skin });\n WaveDrom = null;\n window.WaveDrom = null;\n dync = false; \n}\n\nfunction onRenderWavedrom(resolve, res) {\n if (hasWavedrom()) {\n const index = res.index;\n const id = res.id;\n const name = res.className;\n const data = res.data;\n let element = res.element;\n const doc = element.ownerDocument;\n element.parentNode.outerHTML = utils.renderCacheElement(doc, id + index, name, el => {\n const obj = window.eval(`(${data})`);\n WaveDrom.RenderWaveForm(index, obj, id);\n // Replace the created cache element with the original element with the same id.\n const wdel = document.getElementById('WaveDrom_Display_' + index);\n if (el != wdel) {\n while (wdel.childNodes.length) {\n el.appendChild(wdel.removeChild(wdel.childNodes[0]));\n }\n }\n });\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderWavedrom(resolve, res);\n }, 10);\n}\n/**\n * render wavedrom graphs\n */\nfunction renderWavedrom(element) {\n return new Promise(resolve => {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const code = element.textContent.trim();\n const name =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const index = indexWD;\n ++indexWD;\n // When index of wavwdrom is 0, there will be some special logic in the WaveDrom lib.\n // So the index needs to be cleared after all WavwDrom element are rendered.\n --wdCount;\n if (!wdCount) {\n indexWD = 0;\n }\n\n //const id = 'wavedrom-' + Date.now() + '-' + Math.floor(Math.random() * 10000) + '-';\n const id = 'WaveDrom_Display_';\n element.id = id + index;\n const res = {\n element: element,\n index: index,\n id: id,\n className: name,\n data: code\n };\n onRenderWavedrom(resolve, res);\n // const id = 'WaveDrom_Display_' + index;\n // element.parentNode.outerHTML = cdnjs.renderCacheElement(element.ownerDocument, id, name, el => {\n // const obj = window.eval(`(${code})`);\n // WaveDrom.RenderWaveForm(index, obj, 'WaveDrom_Display_');\n // // Replace the created cache element with the original element with the same id.\n // const wdel = document.getElementById('WaveDrom_Display_' + index);\n // if (el != wdel) {\n // while (wdel.childNodes.length) {\n // el.appendChild(wdel.removeChild(wdel.childNodes[0]));\n // }\n // }\n // });\n });\n}\n\n// <div class=\"wavedrom\"></div>\nfunction renderWavedromElements(elements, skin) {\n dyncLoadScript(skin);\n return new Promise(resolve => {\n const promiseArray = [];\n wdCount = elements.length;\n elements.forEach(element => {\n promiseArray.push(renderWavedrom(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// wavedrom default config\nconst getConfig = (config = {}) => ({\n skin: 'default',\n ...config\n});\n\nfunction showdownWavedrom(skinConfig) {\n const config = getConfig(skinConfig)\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the wavedrom in code blocks\n const elements = wrapper.querySelectorAll('code.wavedrom.language-wavedrom');\n if (!elements.length) {\n return false;\n }\n\n log(`Begin render wavedrom elements.`);\n return renderWavedromElements(elements, this.config.skin).then(() => {\n log(`End render wavedrom elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownWavedrom;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown footnotes extension for markdown\n */\n'use strict';\n\nfunction showdownFootnotes() {\n return [\n {\n type: 'lang',\n filter: (text, converter) =>\n text.replace(/^\\[\\^([\\d\\w]+)\\]:\\s*((\\n+(\\s{2,4}|\\t).+)+)$/gm, (str, name, rawContent, _, padding) => {\n const content = converter.makeHtml(rawContent.replace(new RegExp(`^${padding}`, 'gm'), ''));\n return `<div class=\"footnote\" id=\"footnote-${name}\"><a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>:${content}</div>`;\n })\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(\n /^\\[\\^([\\d\\w]+)\\]:( |\\n)((.+\\n)*.+)$/gm,\n (str, name, _, content) =>\n `<small class=\"footnote\" id=\"footnote-${name}\"><a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>: ${content}</small>`\n )\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(/([^\\\\])\\[\\^([\\d\\w]+)\\]/gm, (str, preContent, name) => `${preContent}<a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>`)\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(/\\\\\\[\\^([\\d\\w]+)\\]/gm, (str, name) => `[^${name}]`)\n }\n ];\n}\n\nexport default showdownFootnotes;\n","/*\n * Copyright (c) 2020-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown container extension for markdown\n */\n'use strict';\n\nfunction showdownContainer() {\n return [\n {\n type: 'lang',\n filter: (text, converter) =>\n text.replace(\n /(?:^|\\n)(?: {0,3})(:::+)(?: *)([\\S]+)(?:[ \\t]*)([^\\s][\\S\\t ]*)?\\n([\\s\\S]*?)\\n(?: {0,3})\\1(?:[ \\t]*)\\n/g,\n function (wholeMatch, delim, classname, title, content) {\n if (classname) {\n let classes = classname.split('-');\n if (classes.length > 1) {\n classes.forEach(function (name, index, arr) {\n if (index > 0) {\n arr[index] = arr[index - 1] + '-' + name;\n }\n });\n } else {\n classes.unshift('container');\n }\n classname = classes.join(' ');\n }\n if (content) {\n content = converter.makeHtml(content);\n }\n if (title) {\n title = `<p class=\"container-title\">${title}</p>`;\n } else {\n title = ''\n }\n return `<div class=\"showdown-container ${classname}\">${title}${content}</div>`;\n }\n ),\n },\n ];\n}\n\nexport default showdownContainer;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown flowchart extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown flowchart extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Raphael === 'undefined') {\n var Raphael = window.Raphael || undefined;\n}\n\nif (typeof flowchart === 'undefined') {\n var flowchart = window.flowchart || undefined;\n}\n\nfunction hasRaphael() {\n return !!Raphael\n}\n\nfunction hasFlowchart() {\n return typeof Raphael !== 'undefined' && Raphael && typeof flowchart !== 'undefined' && flowchart ? true : false;\n}\n\nfunction hasSequence() {\n return hasRaphael() && !!window.SequenceJS;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasFlowchart();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n if (!hasRaphael()) {\n cdnjs\n .loadScript('Raphael')\n .then(name => {\n Raphael = utils.interopDefault(window[name]);\n return cdnjs.loadScript('flowchart');\n })\n .then(name => {\n flowchart = utils.interopDefault(window[name]);\n });\n return sync\n }\n\n cdnjs\n .loadScript('flowchart')\n .then(name => {\n flowchart = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasFlowchart()) return;\n cdnjs.unloadScript('flowchart');\n flowchart = null;\n window.flowchart = null;\n if (!hasSequence()) {\n cdnjs.unloadScript('Raphael');\n const es = document.getElementsByTagName('i');\n if (es && es.length > 0) {\n const body = document.body;\n for (let i = 0; i < es.length; i++) {\n const e = es[i];\n if (e.title && e.title === 'Raphaël Colour Picker') {\n body.removeChild(e);\n }\n }\n }\n Raphael = null;\n window.Raphael = null;\n }\n dync = false;\n}\n\nfunction onRenderFlowchart(resolve, res) {\n if (hasFlowchart()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const options = res.options;\n const doc = res.element.ownerDocument;\n res.element.parentNode.outerHTML = utils.renderCacheElement(doc, id, name, el => {\n flowchart.parse(data).drawSVG(el, options);\n });\n resolve(true);\n return;\n }\n \n setTimeout(() => {\n onRenderFlowchart(resolve, res);\n }, 10);\n}\n\n/**\n * render flowchart graphs\n */\nfunction renderFlowchart(element, options) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta('flowchart', element);\n if (!meta) {\n return resolve(false);\n }\n\n meta.options = options;\n onRenderFlowchart(resolve, meta);\n });\n}\n\n// <div class=\"flowchart || flow\"></div>\nfunction renderFlowchartElements(flowchartElements, flowElements, options) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n flowchartElements.forEach(element => {\n promiseArray.push(renderFlowchart(element, options));\n });\n flowElements.forEach(element => {\n promiseArray.push(renderFlowchart(element, options));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// Flowchart default options:\n// 'x': 0,\n// 'y': 0,\n// 'line-width': 3,\n// 'line-length': 50,\n// 'text-margin': 10,\n// 'font-size': 14,\n// 'font-color': 'black',\n// 'font': 'normal',\n// 'font-family': 'calibri',\n// 'font-weight': 'normal',\n// 'line-color': 'black',\n// 'element-color': 'black',\n// 'fill': 'white',\n// 'yes-text': 'yes',\n// 'no-text': 'no',\n// 'arrow-end': 'block',\n// 'class': 'flowchart',\n// 'scale': 1,\n// 'symbols': {\n// 'start': {},\n// 'end': {},\n// 'condition': {},\n// 'inputoutput': {},\n// 'operation': {},\n// 'subroutine': {},\n// 'parallel': {}\n// },\n// 'flowstate' : {\n// 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n// 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n// 'future' : { 'fill': '#FFFF99'},\n// 'invalid': {'fill': '#444444'}\n// }\nconst getOptions = (userOptions = {}) => ({\n 'line-width': 3,\n maxWidth: 3, //ensures the flowcharts fits within a certian width\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n font: 'normal',\n 'font-family': 'Helvetica',\n 'font-weight': 'normal',\n 'font-color': 'black',\n 'line-color': 'black',\n 'element-color': 'black',\n fill: 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n scale: 1,\n symbols: {\n start: {\n 'font-color': 'red',\n 'element-color': 'green',\n fill: 'yellow'\n },\n end: {\n class: 'end-element'\n }\n },\n flowstate: {\n past: { fill: '#CCCCCC', 'font-size': 12 },\n current: { fill: 'yellow', 'font-color': 'red', 'font-weight': 'bold' },\n future: { fill: '#FFFF99' },\n request: { fill: 'blue' },\n invalid: { fill: '#444444' },\n approved: {\n fill: '#58C4A3',\n 'font-size': 12,\n 'yes-text': 'APPROVED',\n 'no-text': 'n/a'\n },\n rejected: {\n fill: '#C45879',\n 'font-size': 12,\n 'yes-text': 'n/a',\n 'no-text': 'REJECTED'\n }\n },\n ...userOptions\n});\n\nfunction showdownFlowchart(userOptions) {\n const options = getOptions(userOptions);\n\n return [\n {\n type: 'output',\n config: options,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the Flowchart in code blocks\n const flowchartElements = wrapper.querySelectorAll('code.flowchart.language-flowchart');\n const flowElements = wrapper.querySelectorAll('code.flow.language-flow');\n if (!flowchartElements.length && !flowElements.length) {\n return false;\n }\n console.log(format(`Begin render flowchart elements.`));\n return renderFlowchartElements(flowchartElements, flowElements, this.config).then(() => {\n console.log(format(`End render flowchart elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownFlowchart;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport './less/preview.less';\nimport './less/container.less';\nimport './less/toc.less';\n\nimport showdown from './parser/showdown.js';\nimport showdownAbc from './extensions/showdown-abc.js';\nimport showdownToc from './extensions/showdown-toc.js';\nimport showdownCss from './extensions/showdown-css.js';\nimport showdownViz from './extensions/showdown-viz.js';\nimport showdownVega from './extensions/showdown-vega.js';\nimport showdownAlign from './extensions/showdown-align.js';\nimport showdownKatex from './extensions/showdown-katex.js';\nimport showdownEcharts from './extensions/showdown-echarts.js';\nimport showdownMermaid from './extensions/showdown-mermaid.js';\nimport showdownPlantuml from './extensions/showdown-plantuml.js';\nimport showdownRailroad from './extensions/showdown-railroad.js';\nimport showdownSequence from './extensions/showdown-sequence.js';\nimport showdownWavedrom from './extensions/showdown-wavedrom.js';\nimport showdownFootnotes from './extensions/showdown-footnotes.js';\nimport showdownContainer from './extensions/showdown-container.js';\nimport showdownFlowchart from './extensions/showdown-flowchart.js';\n\nimport * as zlibcodec from './utils/zlib-codec.js';\nimport cdnjs from './extensions/cdn';\nimport format from './extensions/log';\n\n//////////////////////////////////////////////////////////////////////\nconst getOptions = (options = {}) => {\n return {\n flavor: 'github',\n ...options,\n };\n};\n\nconst getAsyncExtensions = (options, extensions = {}) => {\n const mermaidOptions = options ? options.mermaid || {} : {};\n const plantumlOptions = options ? options.plantuml || {} : {};\n const katexOptions = options ? options.katex || {} : {};\n const vegaOptions = options ? options.vega || {} : {};\n\n const getExtension = (name, def) => {\n let obj = null;\n try {\n obj = showdown.extension(name);\n } catch {\n console.log(`Warning: not found ${name} extension.`);\n }\n return obj ? obj : def;\n };\n\n const asyncExtensions = {\n 'showdown-toc': getExtension('showdown-toc', showdownToc),\n 'showdown-plantuml': showdownPlantuml(plantumlOptions),\n 'showdown-mermaid': showdownMermaid(mermaidOptions),\n 'showdown-katex': showdownKatex(katexOptions),\n 'showdown-flowchart': showdownFlowchart,\n 'showdown-viz': showdownViz,\n 'showdown-vega': showdownVega(vegaOptions),\n 'showdown-wavedrom': showdownWavedrom,\n 'showdown-railroad': showdownRailroad,\n 'showdown-abc': showdownAbc,\n 'showdown-echarts': showdownEcharts,\n 'showdown-sequence': getExtension('showdown-sequence', showdownSequence),\n ...extensions,\n 'showdow-css': showdownCss,\n };\n\n let extnames = [];\n for (let prop in asyncExtensions) {\n if (asyncExtensions.hasOwnProperty(prop)) {\n showdown.asyncExtension(prop, asyncExtensions[prop]);\n extnames.push(prop);\n }\n }\n return extnames;\n};\n\nconst getExtensions = (options, extensions = {}) => {\n const nativeExtensions = {\n 'showdown-toc': showdownToc,\n 'showdown-align': showdownAlign,\n 'showdown-footnotes': showdownFootnotes,\n 'showdown-container': showdownContainer,\n 'showdown-sequence': showdownSequence,\n ...extensions,\n };\n\n let extnames = [];\n for (let prop in nativeExtensions) {\n if (nativeExtensions.hasOwnProperty(prop)) {\n showdown.extension(prop, nativeExtensions[prop]);\n extnames.push(prop);\n }\n }\n return extnames;\n};\n\nconst loadScript = (id, code, parent) => {\n if (!id || !code || typeof document === 'undefined') {\n return false;\n }\n\n let element = document.getElementById(id);\n if (!element) {\n if (!parent) {\n parent = document.body;\n } else if (typeof parent === 'string') {\n parent = document.querySelector(parent);\n }\n element = parent;\n }\n const tag = element.tagName;\n const scriptID = `script-${id}`;\n let script = document.querySelector(`${tag} > #${scriptID}`);\n if (script) {\n return true;\n }\n\n script = document.createElement('script');\n script.id = scriptID;\n script.type = 'text/javascript';\n script.text = code;\n element.appendChild(script);\n return true;\n};\n\nconst insertScript = (id, code, parent) => {\n if (!id || !code || typeof document === 'undefined') {\n return false;\n }\n\n let element = document.getElementById(id);\n if (!element) {\n if (!parent) {\n parent = document.body;\n } else if (typeof parent === 'string') {\n parent = document.querySelector(parent);\n }\n element = parent;\n }\n const tag = element.tagName;\n const scriptID = `script-${id}`;\n let script = document.querySelector(`${tag} > #${scriptID}`);\n if (script) {\n return true;\n }\n\n script = document.createElement('script');\n script.id = scriptID;\n script.type = 'text/javascript';\n script.text = code;\n element.insertBefore(script, element.children[0]);\n return true;\n};\n\nfunction appendScript(name, src) {\n return new Promise((resovle, reject) => {\n if (!name || !src || typeof document === 'undefined') {\n reject('Args is invaild!');\n }\n\n const id = 'script-' + name.toLowerCase();\n let script = document.getElementById(id);\n if (script) {\n return resovle(name);\n }\n\n const head = document.head || document.getElementsByTagName('head')[0];\n script = document.createElement('script');\n script.src = src;\n script.id = id;\n script.onload = () => {\n resovle(name);\n };\n head.appendChild(script);\n });\n}\n\nfunction addCssLink(obj, link, id) {\n if (!obj.cssLinks) {\n obj.cssLinks = [];\n } else {\n if (!Array.isArray(obj.cssLinks)) {\n obj.cssLinks = [obj.cssLinks];\n }\n }\n obj.cssLinks.push({\n id: id,\n link: link,\n });\n return obj;\n}\n\nconst opScript = function (script, root, promise) {\n let host = root;\n if (script.host && typeof script.host === 'string') {\n host = document.querySelector(script.host);\n }\n if (!script.inner) {\n if (!script.code) {\n return false;\n }\n\n if (typeof script.code === 'function') {\n const method = script.code;\n if (promise) {\n promise.then(() => {\n method();\n });\n return true;\n }\n\n method();\n return true;\n }\n\n if (promise) {\n promise.then(() => {\n loadScript(script.id, script.code, host);\n });\n return true;\n }\n return loadScript(script.id, script.code, host);\n }\n\n if (!showdown.helper.isArray(script.inner)) {\n script.inner = [script.inner];\n }\n if (script.code) {\n if (typeof script.code === 'function') {\n const method = script.code;\n if (promise) {\n promise.then(() => {\n method();\n });\n } else {\n method();\n }\n } else {\n if (promise) {\n promise.then(() => {\n if (!insertScript(script.id, script.code, host)) {\n console.log(format('Args is invaild with insert script!'), script);\n }\n });\n } else if (!insertScript(script.id, script.code, host)) {\n console.log(format('Args is invaild with insert script!'), script);\n }\n }\n }\n if (script.inner.length > 0) {\n for (let j = 0; j < script.inner.length; ++j) {\n const s = script.inner[j];\n if (!s.code) continue;\n\n if (typeof s.code === 'function') {\n const method = s.code;\n if (promise) {\n promise.then(() => {\n method();\n });\n } else {\n method();\n }\n continue;\n }\n\n let innerHost = host;\n if (s.host && typeof s.host === 'string') {\n innerHost = document.querySelector(s.host);\n }\n if (promise) {\n promise.then(() => {\n loadScript(s.id, s.code, innerHost);\n });\n continue;\n }\n loadScript(s.id, s.code, innerHost);\n }\n }\n return true;\n};\n\nconst showdownFlavors = ['github', 'ghost', 'vanilla', 'original', 'allon'];\nconst mermaidThemes = ['default', 'forest', 'dark', 'neutral'];\nconst vegaThemes = ['excel', 'ggplot2', 'quartz', 'vox', 'dark'];\nconst vegaRenderers = ['canvas', 'svg'];\nconst plantumlImgFmts = ['svg', 'png', 'jpg'];\n\n// defaultOptions.vega is embedOptions of vega-embed;\n// defaultOptions.katex is config of katex,\n// format is { delimiters: [ { left: '$$', right: '$$', display: true | false | undefined, asciimath: true | undefined }] };\n// defaultOptions.mermaid is config of mermaidAPI;\n// defaultOptions.plantuml is {umlWebSite: string, imageFormat: string};\n// defaultOptions.showdown is flavor and ShowdownOptions of showdown\nconst showdowns = {\n showdown: showdown,\n converter: null,\n defaultOptions: {\n showdown: getOptions(),\n plantuml: { imageFormat: 'svg' },\n mermaid: { theme: 'default' },\n katex: {},\n vega: { theme: 'vox' },\n },\n defaultExtensions: {},\n defaultAsyncExtensions: {},\n markdownDecodeFilter: function (doc) {\n return '';\n },\n initDefaultOptions: function () {\n if (!this.defaultOptions) {\n this.defaultOptions = {\n showdown: {},\n plantuml: {},\n mermaid: {},\n katex: {},\n vega: {},\n };\n }\n },\n setFlavor: function (name) {\n this.showdown.setFlavor(name);\n if (this.converter) {\n this.converter.setFlavor(name);\n }\n },\n addOptions: function (options) {\n for (const key in options) {\n if (key !== 'flavor') {\n this.showdown.setOption(key, options[key]);\n if (this.converter) {\n this.converter.setOption(key, options[key]);\n }\n }\n }\n },\n addExtension: function (name, extension) {\n this.removeExtension(name);\n if (typeof name === 'string') {\n try {\n showdown.extension(name, extension);\n if (this.converter) {\n this.converter.addExtension(name);\n }\n } catch (err) {\n console.log(err);\n }\n }\n },\n removeExtension: function (name) {\n if (typeof name !== 'string') return;\n if (this.converter) {\n let ext = null;\n try {\n ext = showdown.extension(name);\n } catch (err) {\n console.log(err);\n }\n if (!ext) return;\n this.converter.removeExtension(ext);\n }\n showdown.removeExtension(name);\n },\n addAsyncExtension: function (name, extension) {\n this.removeAsyncExtension(name);\n if (typeof name === 'string') {\n try {\n showdown.asyncExtension(name, extension);\n if (this.converter) {\n this.converter.addAsyncExtension(name);\n }\n } catch (err) {\n console.log(err);\n }\n }\n },\n removeAsyncExtension: function (name) {\n if (typeof name !== 'string') return;\n if (this.converter) {\n let ext = null;\n try {\n ext = showdown.asyncExtension(name);\n } catch (err) {\n console.log(err);\n }\n if (!ext) return;\n this.converter.removeAsyncExtension(ext);\n }\n showdown.removeAsyncExtension(name);\n },\n setCDN: function (cdnname, defScheme, distScheme, uriPath) {\n if (typeof cdnname === 'string' && cdnname) {\n cdnjs.setCDN(cdnname, defScheme, distScheme, uriPath);\n }\n },\n setShowdownFlavor: function (name) {\n this.initDefaultOptions();\n if (name) {\n if (showdownFlavors.indexOf(name) === -1) {\n name = 'github';\n }\n this.defaultOptions.showdown.flavor = name;\n this.setFlavor(name);\n }\n },\n setShowdownOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.showdown = Object.assign(this.defaultOptions.showdown || {}, options);\n this.setShowdownFlavor(this.defaultOptions.showdown.flavor);\n this.addOptions(this.defaultOptions.showdown);\n return this.defaultOptions.showdown;\n },\n setPlantumlOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.plantuml = Object.assign(this.defaultOptions.plantuml || {}, options);\n const imageFormat = this.defaultOptions.plantuml.imageFormat;\n if (imageFormat && plantumlImgFmts.indexOf(imageFormat) === -1) {\n this.defaultOptions.plantuml.imageFormat = 'png';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-plantuml', showdownPlantuml(this.defaultOptions.plantuml));\n }\n return this.defaultOptions.plantuml;\n },\n setMermaidOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.mermaid = Object.assign(this.defaultOptions.mermaid || {}, options);\n const theme = this.defaultOptions.mermaid.theme;\n if (theme && mermaidThemes.indexOf(theme) === -1) {\n this.defaultOptions.mermaid.theme = 'default';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-mermaid', showdownMermaid(this.defaultOptions.mermaid));\n }\n return this.defaultOptions.mermaid;\n },\n setKatexOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.katex = Object.assign(this.defaultOptions.katex || {}, options);\n if (this.converter) {\n this.addAsyncExtension('showdown-katex', showdownKatex(this.defaultOptions.katex));\n }\n return this.defaultOptions.katex;\n },\n setVegaOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.vega = Object.assign(this.defaultOptions.vega || {}, options);\n const theme = this.defaultOptions.vega.theme;\n if (theme && vegaThemes.indexOf(theme) === -1) {\n this.defaultOptions.vega.theme = 'vox';\n }\n const renderer = this.defaultOptions.vega.renderer;\n if (renderer && vegaRenderers.indexOf(renderer) === -1) {\n this.defaultOptions.vega.renderer = 'canvas';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-vega', showdownVega(this.defaultOptions.vega));\n }\n return this.defaultOptions.vega;\n },\n init: function (reset) {\n if (!this.converter) {\n const showdownOptions = this.defaultOptions ? this.defaultOptions.showdown || {} : {};\n const options = getOptions(showdownOptions);\n const extensions = getExtensions(this.defaultOptions, this.defaultExtensions);\n const asyncExtensions = getAsyncExtensions(this.defaultOptions, this.defaultAsyncExtensions);\n this.setFlavor(options.flavor);\n // converter instance of showdown\n this.converter = new showdown.Converter({\n extensions: extensions,\n }).initConvertExtObj(options.flavor, asyncExtensions);\n this.addOptions(options);\n } else {\n let resetOptions = {};\n if (typeof reset === 'boolean' && reset) {\n resetOptions = { option: true, extension: true };\n } else {\n resetOptions = reset;\n }\n if (typeof resetOptions === 'object') {\n if (resetOptions.hasOwnProperty('option') && resetOptions.option) {\n const showdownOptions = this.defaultOptions ? this.defaultOptions.showdown || {} : {};\n const options = getOptions(showdownOptions);\n this.addOptions(options);\n }\n if (resetOptions.hasOwnProperty('extension') && resetOptions.extension) {\n this.addAsyncExtension('showdown-plantuml', showdownPlantuml(this.defaultOptions.plantuml));\n this.addAsyncExtension('showdown-mermaid', showdownMermaid(this.defaultOptions.mermaid));\n this.addAsyncExtension('showdown-vega', showdownVega(this.defaultOptions.vega));\n }\n }\n }\n return this;\n },\n makeHtml: function (doc, callback) {\n let content = '';\n if (typeof doc === 'object') {\n if (typeof doc.content === 'string') {\n if (typeof doc.type === 'string') {\n switch (doc.type) {\n case 'zip':\n content = this.zDecode(doc.content);\n break;\n default:\n content = this.markdownDecodeFilter(doc) || doc.content;\n break;\n }\n } else {\n content = doc.content;\n }\n }\n } else {\n content = doc;\n }\n\n if (this.converter && content) {\n // Compatible with old versions, be deprecated in the future.\n function _checkCssTypes(obj) {\n return new Promise((resolve) => {\n if (obj.cssLinks && Array.isArray(obj.cssLinks)) {\n obj.cssTypes = { css: {} };\n obj.cssLinks.forEach((css) => {\n if (css.id === 'css-abc') {\n obj.cssTypes.hasAbc = true;\n obj.cssTypes.css.abc = css.link;\n return;\n }\n\n if (css.id === 'css-katex') {\n obj.cssTypes.hasKatex = true;\n obj.cssTypes.css.katex = css.link;\n return;\n }\n\n if (css.id === 'css-railroad') {\n obj.cssTypes.hasRailroad = true;\n obj.cssTypes.css.railroad = css.link;\n return;\n }\n\n if (css.id === 'css-sequence') {\n obj.cssTypes.hasSequence = true;\n obj.cssTypes.css.sequence = css.link;\n }\n });\n if (typeof callback === 'function' && callback) {\n callback(obj.cssTypes);\n }\n }\n return resolve(obj);\n });\n }\n\n return this.converter.asyncMakeHtml(content, _checkCssTypes).then((obj) => {\n content = `<div class='showdowns'>${obj.html}</div>`;\n if (obj.extras) {\n let extras = obj.extras;\n if (!showdown.helper.isArray(extras)) {\n extras = [extras];\n }\n for (let i = 0; i < extras.length; ++i) {\n if (typeof extras[i] !== 'string') continue;\n content += extras[i];\n }\n }\n return { html: content, scripts: obj.scripts, cssLinks: obj.cssLinks };\n });\n }\n return Promise.reject(!content ? 'Content is empty.' : 'Converter is invaild.');\n },\n completedHtml: function (scripts, element) {\n if (!showdown.helper.isArray(scripts)) {\n scripts = [scripts];\n }\n\n return new Promise((revole, reject) => {\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n for (let i = 0; i < scripts.length; ++i) {\n const script = scripts[i];\n if (script.outer) {\n if (!showdown.helper.isArray(script.outer)) {\n script.outer = [script.outer];\n }\n let o = script.outer[0];\n let result = appendScript(o.name, o.src);\n for (let k = 1; k < script.outer.length; ++k) {\n o = script.outer[k];\n result = result.then(() => {\n return appendScript(o.name, o.src);\n });\n }\n\n opScript(script, element, result);\n continue;\n }\n\n if (!opScript(script, element)) {\n return reject('Args is invaild!');\n }\n }\n revole(true);\n });\n },\n zDecode: function (zContent) {\n return zlibcodec.zDecode(zContent);\n },\n zEncode: function (content) {\n return zlibcodec.zEncode(content);\n },\n};\n\nexport default showdowns;\n"],"names":["showdown","ConverterExtObj","flavor","asyncExtensions","outputAsyncModifiers","currConvFlavor","_parseAsyncExtension","ext","name","helper","isString","stdExtName","asyncExtension","isUndefined","Error","isArray","validateExtension","i","length","type","push","forEach","this","addAsyncExtension","extension","removeAsyncExtension","a","j","splice","getAsyncExtensions","getCurrFlavor","setCurrFlavor","Converter","prototype","initConvertExtObj","extObj","resetOptions","converterOptions","globalOptions","getOptions","options","gOpt","hasOwnProperty","opt","setFlavor","preset","getFlavorOptions","defaultOptions","getDefaultOptions","option","getFlavor","removeExtension","exts","getAllExtensions","langExtensions","language","outputModifiers","output","asyncMakeHtml","text","callback","content","makeHtml","outputs","Promise","resolve","html","globals","converter","doc","DOMParser","parseFromString","wrapper","body","result","scripts","cssLinks","then","obj","filter","promise","innerHTML","extras","subParser","ghCodeBlocks","_dispatch","replace","wholeMatch","delim","langattr","codeblock","end","omitExtraWLInCodeBlocks","tables","parseStyles","sLine","test","parseHeaders","header","style","id","trim","tablesHeaderId","tableHeaderId","toLowerCase","parseCells","cells","row","col","cell","tablesMerge","direct","tablesRowspan","str","left","right","ii","mergeCells","parseTableContent","rawTable","headerless","tableLines","split","rawStyles","rawCells","headers","styles","map","s","shift","rawHeaders","tb","tblLgn","buildTable","parseTable","parseHeaderlessTable","escapeCharactersCallback","tablesHeaderless","currFlavor","flavors","github","ghCompatibleHeaderId","underline","rawHeaderId","ghost","allOn","_asyncExtensions","resetAsyncExtensions","orgSetFlavor","orgGetFlavorOptions","format","Date","Format","setFlavorOptions","Object","assign","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","S","getMilliseconds","matches","exec","getFullYear","substring","k","m","RegExp","n","cdnName","scheme","document","location","protocol","defScheme","distScheme","uriPath","cdnSrc","local","ABCJS","ABCJSCSS","echarts","Viz","Raphael","flowchart","mermaid","katex","katexCSS","renderMathInElement","railroad","railroadCSS","Snap","WebFont","underscore","sequence","sequenceCSS","WaveDrom","WaveDromSkin","default","lowkey","narrow","vega","vegaLite","vegaEmbed","cdnjs","jsdelivr","getCDN","getName","key","keys","val","getSrc","native","src","def","cdn","url","setCDN","scheme_default","scheme_dist","uri_path","at","getUrl","uri","URL","origin","prefix","loadScript","resovle","reject","script","getElementById","head","getElementsByTagName","createElement","onload","appendChild","unloadScript","e","removeChild","loadStyleSheet","css","link","rel","href","unloadStyleSheet","utils","interopDefault","ex","loadStyle","innerText","loadStylesheet","cssLink","stylesheet","code","element","res","rej","querySelector","removeAllStylesheet","querySelectorAll","renderCacheElement","window","el","className","display","outerHTML","renderElement","createElementMeta","dataset","lang","langobj","JSON","parse","diagramClass","align","width","height","textContent","classList","now","random","container","data","addCssLink","Array","addScript","addExtra","extra","hashString","hash","char","charCodeAt","imul","extName","cssCdnName","undefined","hasAbc","dync","abcCreateEnv","cursorControl","self","onReady","onStart","svg","cursor","createElementNS","setAttribute","setAttributeNS","beatSubdivisions","onBeat","beatNumber","totalBeats","totalTime","onEvent","ev","measureStart","lastSelection","remove","elements","note","add","top","onFinished","els","abcEnv","abcOptions","add_classes","responsive","setTune","render","userAction","synthControl","abc","renderAbc","disable","visualObj","synth","CreateSynth","init","response","catch","error","load","audio","supportsAudio","SynthController","displayLoop","displayRestart","displayPlay","displayProgress","displayWarp","loadABC","toString","stringify","onRenderAbc","meta","ownerDocument","parentNode","class","host","setTimeout","renderAbcElements","outer","inner","sync","dyncLoadScript","promiseArray","all","showdownAbc","config","createHeadingElement","toc","headingLevel","nexthead","parent","tagName","title","icon","child","createTextNode","appendTocElement","currTocNode","tempTocNode","preLevel","loadTocEvent","totalToc","divider","startX","startWidth","onDrag","moveX","clientX","newWidth","documentElement","clientWidth","stopDragging","removeEventListener","userSelect","startDragging","addEventListener","tocFoldIcon","onclick","chapters","icons","contains","tocCloseIcon","switchToc","tocSwitch","currentTarget","iconUse","getAttributeNS","showdownToc","firstHeadOne","extraDocs","swtichToc","insertBefore","tocView","tocNode","standalone","prev","replaceChild","parseInt","substr","renderTocElements","showdownCss","engines","hasViz","instance","onRenderViz","engine","indexOf","viz","renderString","renderViz","renderVizElements","showdownViz","hasVegaEmbed","renderVega","isVegaLite","wval","eval","vegaRenderer","onRenderVega","renderVegaElements","vegaElements","vegaLiteElements","showdownVega","userOptions","actions","editor","theme","tooltip","renderer","showdownAlign","parser","childNode","firstChild","nodeType","results","nodeValue","match","nextSibling","renderAlignElements","AMquote","input","tag","tex","ttype","AMsymbols","notexcopy","invisible","func","rewriteleftright","acc","atname","atval","compareNames","s1","s2","AMnestingDepth","AMpreviousSymbol","AMcurrentSymbol","AMnames","AMremoveCharsAndBlanks","st","charAt","slice","AMposition","arr","h","AMgetSymbol","mk","tagst","more","integ","AMTremoveBrackets","node","leftchop","AMTgetTeXsymbol","symb","pre","AMTparseSexpr","symbol","newFrag","texsymbol","AMTparseExpr","result2","AMTparseIexpr","sym1","sym2","res2","rightbracket","addedright","len","mxout","pos","matrix","mxnestingd","subpos","lastsubposstart","mxanynestingd","columnaligns","lastmxsubcnt","subarr","join","AMTparseAMtoTeX","symlen","sort","refreshSymbols","AMinitSymbols","RenderMathInElement","katexElementCount","hasKatex","onRenderKatex","math","renderToString","renderKatex","isAsciimath","latex","codes","asciimathToTex","escapeRegExp","getConfig","userConfig","displayMode","throwOnError","errorColor","delimiters","_isObjectProperty","prop","_getDelimiter","delimiter","asciimath","concat","showdownKatex","inlineMathCount","mathDelimiters","replacer","childNodes","nodeName","newText","reduce","that","asyncRenderKatex","renderBlockElements","hasEcharts","onRenderEcharts","renderEcharts","ssr","chart","getInstanceByDom","setOption","echartRenderer","renderEchartsElements","showdownEcharts","show","animation","useDirtyRect","hasMermaid","onRenderMermaid","renderMermaid","renderMermaidElements","initialize","showdownMermaid","logLevel","startOnLoad","arrowMarkerAbsolute","curve","gantt","axisFormat","actorMargin","append3bytes","b1","b2","b3","c2","c3","c4","r","encode6bit","b","String","fromCharCode","decode6bit","cc","c","extract3bytes","c1","encode","encode64","zlib","deflateRawSync","level","decode","inflateRawSync","Buffer","from","t","decode64","plantumlcodec","encodeuml","startuml","enduml","zlibcodec.encode","decodeuml","zlibcodec.decode","defaultImageFormat","umlElementCount","renderPlantumlElements","imageFormat","website","umlWebSite","imageExtension","uml","svgRender","svgData","fetch","dispatchEvent","ok","renderPlantumlElement","showdownPlantuml","hasRailroad","diagram","onRenderRailroad","railroadElement","addTo","renderRailroad","renderRailroadElements","showdownRailroad","Diagram","themes","SequenceJS","hasRaphael","hasSequence","renderSequence","elementid","CustomEvent","detail","onRenderSequence","drawSVG","showdownSequence","hasEvent","event","renderSequenceElements","wdCount","indexWD","hasWavedrom","onRenderWavedrom","index","RenderWaveForm","wdel","renderWavedrom","renderWavedromElements","skin","showdownWavedrom","skinConfig","log","showdownFootnotes","rawContent","_","padding","preContent","showdownContainer","classname","classes","unshift","hasFlowchart","onRenderFlowchart","renderFlowchart","showdownFlowchart","maxWidth","font","fill","scale","symbols","start","flowstate","past","current","future","request","invalid","approved","rejected","flowchartElements","flowElements","renderFlowchartElements","scriptID","insertScript","children","appendScript","opScript","root","method","innerHost","showdownFlavors","mermaidThemes","vegaThemes","vegaRenderers","plantumlImgFmts","showdowns","plantuml","defaultExtensions","defaultAsyncExtensions","markdownDecodeFilter","initDefaultOptions","addOptions","addExtension","err","cdnname","setShowdownFlavor","setShowdownOptions","setPlantumlOptions","setMermaidOptions","setKatexOptions","setVegaOptions","reset","extensions","nativeExtensions","extnames","getExtensions","mermaidOptions","plantumlOptions","katexOptions","vegaOptions","getExtension","zDecode","_checkCssTypes","cssTypes","completedHtml","revole","zContent","zEncode"],"mappings":"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"}
1
+ {"version":3,"file":"showdowns.core.min.js","sources":["../src/parser/converter.js","../src/parser/githubCodeBlocks.js","../src/parser/tables.js","../src/parser/showdown.js","../src/extensions/log.js","../src/extensions/date-format.js","../src/extensions/cdn.js","../src/extensions/utils.js","../src/extensions/showdown-abc.js","../src/extensions/showdown-toc.js","../src/extensions/showdown-css.js","../src/extensions/showdown-viz.js","../src/extensions/showdown-vega.js","../src/extensions/showdown-align.js","../src/extensions/asciimath2tex.js","../src/extensions/showdown-katex.js","../src/extensions/showdown-echarts.js","../src/extensions/showdown-mermaid.js","../src/utils/zlib-codec.js","../src/utils/plantuml-codec.js","../src/extensions/showdown-plantuml.js","../src/extensions/showdown-railroad.js","../src/extensions/showdown-sequence.js","../src/extensions/showdown-wavedrom.js","../src/extensions/showdown-footnotes.js","../src/extensions/showdown-container.js","../src/extensions/showdown-flowchart.js","../src/showdowns.js"],"sourcesContent":["/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\n\nshowdown.ConverterExtObj = function(flavor, asyncExtensions) {\n 'use strict';\n\n let outputAsyncModifiers = [],\n /**\n * The flavor set in this converter\n */\n currConvFlavor = flavor;\n\n _constructor();\n\n /**\n * Converter constructor\n * @private\n */\n function _constructor() {\n if (asyncExtensions) {\n showdown.helper.forEach(asyncExtensions, _parseAsyncExtension);\n }\n }\n\n /**\n * Parse async extension\n * @param {*} ext\n * @param {string} [name='']\n * @private\n */\n function _parseAsyncExtension(ext, name) {\n name = name || null;\n // If it's a string, the extension was previously loaded\n if (showdown.helper.isString(ext)) {\n name = showdown.helper.stdExtName(ext);\n ext = showdown.asyncExtension(name);\n if (showdown.helper.isUndefined(ext)) {\n throw Error(\n 'Extension \"' + name + '\" could not be loaded. It was either not found or is not a valid aync extension.'\n );\n }\n }\n\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n if (showdown.validateExtension(ext)) {\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n case 'output':\n outputAsyncModifiers.push(ext[i]);\n break;\n }\n }\n }\n }\n\n this.addAsyncExtension = function(extension, name) {\n name = name || null;\n _parseAsyncExtension(extension, name);\n };\n\n this.removeAsyncExtension = function(extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n for (var a = 0; a < extension.length; ++a) {\n const ext = extension[a];\n for (var j = 0; j < outputAsyncModifiers.length; ++j) {\n if (outputAsyncModifiers[j] === ext) {\n outputAsyncModifiers.splice(j, 1);\n }\n }\n }\n };\n\n this.getAsyncExtensions = function() {\n return outputAsyncModifiers;\n };\n\n /**\n * Get the currently flavor name of this converter\n * @returns {string}\n */\n this.getCurrFlavor = function() {\n return currConvFlavor;\n };\n\n /**\n * Set the currently flavor name of this converter\n * @param {string} flavor name\n */\n this.setCurrFlavor = function(name) {\n currConvFlavor = name;\n };\n};\n\nshowdown.Converter.prototype.initConvertExtObj = function(flavor, asyncExtensions) {\n this.extObj = new showdown.ConverterExtObj(flavor, asyncExtensions);\n\n this.resetOptions = function(converterOptions) {\n converterOptions = converterOptions || {};\n\n const globalOptions = showdown.getOptions();\n let options = this.getOptions();\n for (var gOpt in globalOptions) {\n if (globalOptions.hasOwnProperty(gOpt)) {\n options[gOpt] = globalOptions[gOpt];\n }\n }\n\n // Merge options\n if (typeof converterOptions === 'object') {\n for (var opt in converterOptions) {\n if (converterOptions.hasOwnProperty(opt)) {\n options[opt] = converterOptions[opt];\n }\n }\n }\n };\n\n /**\n * Set the flavor THIS converter should use\n * @param {string} name\n */\n this.setFlavor = function(name) {\n let preset = showdown.getFlavorOptions(name);\n if (showdown.helper.isUndefined(preset)) return;\n this.extObj.setCurrFlavor(name);\n let defaultOptions = showdown.getDefaultOptions(true);\n for (var option in defaultOptions) {\n if (defaultOptions.hasOwnProperty(option)) {\n this.getOptions()[option] = defaultOptions[option];\n }\n }\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n this.getOptions()[option] = preset[option];\n }\n }\n };\n\n /**\n * Get the currently set flavor of this converter\n * @returns {string}\n */\n this.getFlavor = function() {\n return this.extObj.getCurrFlavor();\n };\n\n this.addAsyncExtension = function(extension, name) {\n this.extObj.addAsyncExtension(extension, name);\n };\n\n this.removeAsyncExtension = function(extension) {\n this.extObj.removeAsyncExtension(extension);\n };\n\n // Because removeExtension function of converter has bug in showdown.js,\n // it needs to be overrode.\n this.removeExtension = function(extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n const exts = this.getAllExtensions();\n let langExtensions = exts.language;\n let outputModifiers = exts.output;\n for (var a = 0; a < extension.length; ++a) {\n const ext = extension[a];\n for (var i = 0; i < langExtensions.length; ++i) {\n if (langExtensions[i] === ext) {\n langExtensions.splice(i, 1);\n }\n }\n for (var j = 0; j < outputModifiers.length; ++j) {\n if (outputModifiers[j] === ext) {\n outputModifiers.splice(j, 1);\n }\n }\n }\n };\n\n /**\n * Async converts a markdown string into HTML\n * @param {string} text\n * @returns {*}\n */\n this.asyncMakeHtml = function(text, callback) {\n const content = this.makeHtml(text);\n const outputs = this.extObj.getAsyncExtensions();\n if (!outputs.length) {\n return Promise.resolve({html: content});\n }\n\n var globals = {\n outputs: outputs,\n converter: this\n };\n const parser = new DOMParser();\n const doc = parser.parseFromString(content, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n const options = this.getOptions();\n let scripts = [];\n let cssLinks = [];\n let result = Promise.resolve({ wrapper, options, globals, scripts, cssLinks });\n //forEach写法\n outputs.forEach(function(ext) {\n result = result.then(obj => {\n const filter = ext.filter(obj);\n return filter ? filter : obj;\n });\n });\n return result.then(obj => {\n if (typeof callback === 'function' && callback) {\n const promise = callback(obj);\n if (promise instanceof Promise) {\n return promise.then(obj => {\n return { html: obj.wrapper.innerHTML, extras: obj.extras, scripts: obj.scripts, cssLinks: obj.cssLinks };\n });\n }\n }\n return { html: obj.wrapper.innerHTML, extras: obj.extras, scripts: obj.scripts, cssLinks: obj.cssLinks };\n });\n };\n\n return this;\n};\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Override githubCodeBlocks parser;\n * Support language attribute, see the following format:\n * ```lang {\"theme\": \"github\", \"align\": \"center\"}\n * code block\n * ```\n * OR\n * ```lang [\"theme\": \"vox\", \"align\": \"right\"]\n * code block\n * ```\n */\n'use strict';\n\nimport showdown from 'showdown';\n\nshowdown.subParser('githubCodeBlocks', function(text, options, globals) {\n 'use strict';\n\n // early exit if option is not enabled\n if (!options.ghCodeBlocks) {\n return text;\n }\n\n text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n\n text += '¨0';\n\n text = text.replace(\n /(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*?)(?:[ \\t]*?)((?:\\{[\\S\\t ]*\\}|\\[[\\S\\t ]*\\])?)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g,\n function(wholeMatch, delim, language, langattr, codeblock) {\n var end = options.omitExtraWLInCodeBlocks ? '' : '\\n';\n\n // First parse the github code block\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n codeblock =\n '<pre><code' +\n (language ? ' class=\"' + language + ' language-' + language + '\"' : '') +\n (langattr ? ` data-lang='${langattr}'` : '') +\n '>' +\n codeblock +\n end +\n '</code></pre>';\n\n codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n // Since GHCodeblocks can be false positives, we need to\n // store the primitive text and the parsed text in a global var,\n // and then return a token\n return (\n '\\n\\n¨G' +\n (globals.ghCodeBlocks.push({\n text: wholeMatch,\n codeblock: codeblock\n }) -\n 1) +\n 'G\\n\\n'\n );\n }\n );\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\n\n// Override tables parser;\nshowdown.subParser('tables', function (text, options, globals) {\n 'use strict';\n\n if (!options.tables) {\n return text;\n }\n\n var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm,\n headerlessTableRgx = /^ {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n headerlessSingeColTblRgx = /^ {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n function parseStyles(sLine) {\n if (/^:[ \\t]*--*$/.test(sLine)) {\n return ' style=\"text-align:left;\"';\n } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n return ' style=\"text-align:right;\"';\n } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n return ' style=\"text-align:center;\"';\n } else {\n return '';\n }\n }\n\n function parseHeaders(header, style) {\n var id = '';\n header = header.trim();\n // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n if (options.tablesHeaderId || options.tableHeaderId) {\n id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n }\n header = showdown.subParser('spanGamut')(header, options, globals);\n\n return '<th' + id + style + '>' + header + '</th>\\n';\n }\n\n function mergeCells(cells, row, col, cell) {\n if (cell) {\n if (!options.tablesRowspan || cell !== '^^' || !row) {\n return;\n }\n\n // up merge except for first row cells\n for (var i = row - 1; i >= 0; --i) {\n if (!cells[i][col]) {\n for (var ii = col - 1; ii >= 0; -ii) {\n if (cells[i + 1][ii] && cells[i + 1][ii] !== '^^') {\n return;\n }\n\n if (cells[i][ii]) {\n if (!cells[i + 1][ii]) {\n return;\n }\n\n cells[i][ii] = cells[i][ii]\n .replace(/rowspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' rowspan=\"' + (row - i + 1) + '\"' + right;\n });\n return cell;\n }\n }\n } else if (cells[i][col] !== '^^') {\n cells[i][col] = cells[i][col]\n .replace(/rowspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' rowspan=\"' + (row - i + 1) + '\"' + right;\n });\n return cell;\n } else if (i === 0) {\n cells[i][col] = '<td rowspan=\"' + (row - i + 1) + '\"></td>\\n';\n return cell;\n }\n }\n\n return;\n }\n\n // left merge except for first column cells\n if (!col) {\n return;\n }\n\n for (var ii = col - 1; ii >= 0; --ii) {\n if (cells[row][ii]) {\n if (cells[row][ii] === '^^') {\n for (var i = row - 1; i >= 0; --i) {\n if (cells[i][ii + 1]) {\n return;\n }\n\n if (cells[i][ii] !== '^^') {\n cells[i][ii] = cells[i][ii]\n .replace(/colspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' colspan=\"' + (col - ii + 1) + '\"' + right;\n });\n return cell;\n }\n }\n } else {\n cells[row][ii] = cells[row][ii]\n .replace(/colspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' colspan=\"' + (col - ii + 1) + '\"' + right;\n });\n return cell;\n }\n } else if (ii === 0) {\n cells[row][ii] = '<td colspan=\"' + (col - ii + 1) + '\"></td>\\n';\n return cell;\n }\n }\n\n return;\n }\n\n function parseCells(cells, row, col, cell, style) {\n if (options.tablesMerge) {\n var direct = mergeCells(cells, row, col, cell);\n if (!showdown.helper.isUndefined(direct)) {\n return direct;\n }\n }\n\n cell = cell.trim();\n var subText = showdown.subParser('spanGamut')(cell, options, globals);\n return '<td' + style + '>' + subText + '</td>\\n';\n }\n\n function buildTable(headers, styles, cells) {\n var tb = '<table>\\n',\n tblLgn = styles.length;\n\n if (headers.length) {\n tb += '<thead>\\n<tr>\\n';\n for (var i = 0; i < headers.length; ++i) {\n tb += headers[i];\n }\n tb += '</tr>\\n</thead>\\n';\n }\n tb += '<tbody>\\n'\n\n for (i = 0; i < cells.length; ++i) {\n tb += '<tr>\\n';\n for (var ii = 0; ii < tblLgn; ++ii) {\n if (!options.tablesMerge || cells[i][ii] !== '^^') {\n tb += cells[i][ii];\n }\n }\n tb += '</tr>\\n';\n }\n tb += '</tbody>\\n</table>\\n';\n return tb;\n }\n\n function parseTableContent(rawTable, headerless) {\n var i,\n tableLines = rawTable.split('\\n');\n\n for (i = 0; i < tableLines.length; ++i) {\n // strip wrong first and last column if wrapped tables are used\n if (/^ {0,3}\\|/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n }\n if (/\\|[ \\t]*$/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n }\n // parse code spans first, but we only support one line code spans\n tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n }\n\n var rawStyles = [],\n rawCells = [],\n headers = [],\n styles = [],\n cells = [];\n\n if (headerless) {\n rawStyles = tableLines[0].split('|').map(function (s) {\n return s.trim();\n });\n tableLines.shift();\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n } else {\n var rawHeaders = tableLines[0].split('|').map(function (s) {\n return s.trim();\n });\n rawStyles = tableLines[1].split('|').map(function (s) {\n return s.trim();\n });\n\n tableLines.shift();\n tableLines.shift();\n\n if (rawHeaders.length < rawStyles.length) {\n return rawTable;\n }\n\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n\n for (i = 0; i < rawHeaders.length; ++i) {\n if (showdown.helper.isUndefined(styles[i])) {\n styles[i] = '';\n }\n headers.push(parseHeaders(rawHeaders[i], styles[i]));\n }\n }\n\n for (i = 0; i < tableLines.length; ++i) {\n if (tableLines[i].trim() === '') {\n continue;\n }\n rawCells.push(\n tableLines[i].split('|').map(function (s) {\n var cell = s.trim();\n if (cell === '' && s.length > 0) return s;\n return cell;\n })\n );\n }\n\n for (i = 0; i < rawCells.length; ++i) {\n var row = [];\n cells.push(row);\n for (var ii = 0; ii < styles.length; ++ii) {\n if (showdown.helper.isUndefined(rawCells[i][ii])) {\n rawCells[i][ii] = '';\n }\n row.push(parseCells(cells, i, ii, rawCells[i][ii], styles[ii]));\n }\n }\n\n return buildTable(headers, styles, cells);\n }\n\n function parseTable(rawTable) {\n return parseTableContent(rawTable, false);\n }\n\n function parseHeaderlessTable(rawTable) {\n return parseTableContent(rawTable, true);\n }\n\n text = globals.converter._dispatch('tables.before', text, options, globals);\n\n // find escaped pipe characters\n text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback);\n\n // parse multi column tables\n text = text.replace(tableRgx, parseTable);\n\n // parse one column tables\n text = text.replace(singeColTblRgx, parseTable);\n\n if (options.tablesHeaderless) {\n // parse multi column headerless tables\n text = text.replace(headerlessTableRgx, parseHeaderlessTable);\n\n // parse one column headerless tables\n text = text.replace(headerlessSingeColTblRgx, parseHeaderlessTable);\n }\n\n text = globals.converter._dispatch('tables.after', text, options, globals);\n\n return text;\n});\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\nimport './converter.js';\nimport './githubCodeBlocks.js';\nimport './tables.js';\n\nlet currFlavor = 'vanilla',\n flavors = {\n github: {\n ghCompatibleHeaderId: false,\n underline: true,\n rawHeaderId: true,\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n },\n ghost: {\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n },\n allOn: {\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n }\n },\n _asyncExtensions = {};\n\n/**\n * Gets or registers an async extension\n * @static\n * @param {string} name\n * @param {object|function=} ext\n * @returns {*}\n */\nshowdown.asyncExtension = function(name, ext) {\n 'use strict';\n\n if (!showdown.helper.isString(name)) {\n throw Error(\"Extension 'name' must be a string\");\n }\n\n name = showdown.helper.stdExtName(name);\n\n // Getter\n if (showdown.helper.isUndefined(ext)) {\n if (!_asyncExtensions.hasOwnProperty(name)) {\n throw Error('Async Extension named ' + name + ' is not registered!');\n }\n return _asyncExtensions[name];\n\n // Setter\n } else {\n // Expand extension if it's wrapped in a function\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n // Ensure extension is an array\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n if (showdown.validateExtension(ext)) {\n _asyncExtensions[name] = ext;\n }\n }\n};\n\n/**\n * Remove an async extension\n * @param {string} name\n */\nshowdown.removeAsyncExtension = function(name) {\n 'use strict';\n name = showdown.helper.stdExtName(name);\n delete _asyncExtensions[name];\n};\n\n/**\n * Removes all async extensions\n */\nshowdown.resetAsyncExtensions = function() {\n 'use strict';\n _asyncExtensions = {};\n};\n\n/**\n * Remove an extension\n * @param {string} name\n */\nshowdown.removeExtension = function(name) {\n 'use strict';\n name = showdown.helper.stdExtName(name);\n delete showdown.getAllExtensions[name];\n};\n\nconst orgSetFlavor = showdown.setFlavor;\nconst orgGetFlavorOptions = showdown.getFlavorOptions;\n\n/**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\nshowdown.setFlavor = function(name) {\n 'use strict';\n\n try {\n orgSetFlavor(name);\n currFlavor = name;\n if (!flavors.hasOwnProperty(name)) return;\n } catch {\n if (!flavors.hasOwnProperty(name)) return;\n showdown.resetOptions();\n currFlavor = name;\n }\n var preset = flavors[name];\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n showdown.getOptions()[option] = preset[option];\n }\n }\n};\n\n/**\n * Get the currently set flavor\n * @returns {string}\n */\nshowdown.getFlavor = function() {\n 'use strict';\n return currFlavor;\n};\n\nshowdown.setFlavorOptions = function(name, options) {\n if (options) {\n flavors[name] = Object.assign(flavors[name] || {}, options);\n }\n};\n\n/**\n * Get the options of a specified flavor. Returns undefined if the flavor was not found\n * @param {string} name Name of the flavor\n * @returns {{}|undefined}\n */\nshowdown.getFlavorOptions = function(name) {\n 'use strict';\n const flavor = orgGetFlavorOptions(name);\n if (!showdown.helper.isUndefined(flavor)) {\n if (!flavors.hasOwnProperty(name)) {\n return flavor;\n }\n return Object.assign(flavor, flavors[name]);\n }\n\n if (flavors.hasOwnProperty(name)) {\n return flavors[name];\n }\n};\n\nexport default showdown;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: dynamic loading js libs for local or cdnjs or jsdelivr\n */\n'use strict';\n\nimport './date-format.js';\n\nfunction format(s) {\n return `${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} ${s}`;\n}\n\nexport default format;\n","/*\r\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\r\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\r\n * Description: Date format extension\r\n */\r\n'use strict';\r\n// 对Date的扩展,将 Date 转化为指定格式的String\r\n// 月(M)、日(d)、小时(h/H)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,\r\n// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)\r\n// 例子:\r\n// (new Date()).Format(\"yyyy-MM-dd hh:mm:ss.S\") ==> 1970-01-01 08:09:04.423\r\n// (new Date()).Format(\"yyyy-M-d h:m:s.S\") ==> 1970-1-1 8:9:4.18\r\nDate.prototype.Format = function(fmt) {\r\n var o = {\r\n 'M+': this.getMonth() + 1, //月份\r\n 'd+': this.getDate(), //日\r\n 'h+': this.getHours(), //小时\r\n 'H+': this.getHours(), //小时\r\n 'm+': this.getMinutes(), //分\r\n 's+': this.getSeconds(), //秒\r\n 'q+': Math.floor((this.getMonth() + 3) / 3), //季度\r\n S: this.getMilliseconds() //毫秒\r\n };\r\n if (!fmt) fmt = 'yyyy-MM-dd hh:mm:ss.S';\r\n const matches = /(y+)/.exec(fmt);\r\n if (matches) fmt = fmt.replace(matches[1], (this.getFullYear() + '').substring(4 - matches[1].length));\r\n for (const k in o) {\r\n const m = new RegExp('(' + k + ')').exec(fmt)\r\n if (m) {\r\n let n = o[k];\r\n if (m[1].length == 1) n = ('000' + o[k]).substring(('' + o[k]).length);\r\n else if (m[1].length == 2) n = ('00' + o[k]).substring(('' + o[k]).length);\r\n fmt = fmt.replace(m[1], n);\r\n }\r\n }\r\n return fmt;\r\n};\r\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: dynamic loading js libs for local or cdnjs or jsdelivr\n */\n'use strict';\n\nlet cdnName = 'jsdelivr';\nlet scheme = document.location.protocol === 'file:' ? 'https://' : document.location.protocol + '//';\nlet defScheme = '';\nlet distScheme = '';\nlet uriPath = '';\n\nconst cdnSrc = {\n local: {\n ABCJS: '../node_modules/abcjs/dist/abcjs-basic.js',\n ABCJSCSS: '../node_modules/abcjs/abcjs-audio.css',\n echarts: '../node_modules/echarts/dist/echarts.js',\n Viz: '../node_modules/@viz-js/viz/lib/viz-standalone.js',\n Raphael: '../node_modules/raphael/raphael.min.js',\n flowchart: '../dist/diagrams/flowchart/flowchart.min.js',\n mermaid: '../node_modules/mermaid/dist/mermaid.js',\n katex: '../node_modules/katex/dist/katex.min.js',\n katexCSS: '../node_modules/katex/dist/katex.min.css',\n renderMathInElement: '../node_modules/katex/dist/contrib/auto-render.js',\n railroad: '../node_modules/railroad-diagrams/railroad-diagrams.js',\n railroadCSS: '../node_modules/railroad-diagrams/railroad-diagrams.css',\n Snap: '../node_modules/snapsvg/dist/snap.svg-min.js',\n WebFont: '../node_modules/webfontloader/webfontloader.js',\n underscore: '../node_modules/underscore/underscore-min.js',\n sequence: '../node_modules/@rokt33r/js-sequence-diagrams/dist/sequence-diagram-min.js',\n sequenceCSS: '../node_modules/@rokt33r/js-sequence-diagrams/dist/sequence-diagram-min.css',\n WaveDrom: '../node_modules/wavedrom/wavedrom.min.js',\n WaveDromSkin: {\n default: '../node_modules/wavedrom/skins/default.js',\n lowkey: '../node_modules/wavedrom/skins/lowkey.js',\n narrow: '../node_modules/wavedrom/skins/narrow.js',\n },\n vega: '../node_modules/vega/build/vega.min.js',\n vegaLite: '../node_modules/vega-lite/build/vega-lite.min.js',\n vegaEmbed: '../node_modules/vega-embed/build/vega-embed.min.js',\n },\n cdnjs: {\n ABCJS: scheme + 'cdnjs.cloudflare.com/ajax/libs/abcjs/6.5.1/abcjs-basic-min.js',\n ABCJSCSS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/abcjs-audio.css',\n echarts: scheme + 'cdnjs.cloudflare.com/ajax/libs/echarts/5.6.0/echarts.min.js',\n Viz: scheme + 'cdn.jsdelivr.net/npm/@viz-js/viz@3/lib/viz-standalone.js',\n Raphael: scheme + 'cdnjs.cloudflare.com/ajax/libs/raphael/2.3.0/raphael.min.js',\n flowchart: scheme + 'cdnjs.cloudflare.com/ajax/libs/flowchart/1.18.0/flowchart.min.js',\n mermaid: scheme + 'cdnjs.cloudflare.com/ajax/libs/mermaid/11.6.0/mermaid.min.js',\n katex: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.22/katex.min.js',\n katexCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.22/katex.min.css',\n renderMathInElement: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.22/contrib/auto-render.js',\n railroad: scheme + 'cdnjs.cloudflare.com/ajax/libs/railroad-diagrams/1.0.0/railroad-diagrams.js',\n railroadCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/railroad-diagrams/1.0.0/railroad-diagrams.css',\n Snap: scheme + 'cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js',\n WebFont: scheme + 'cdnjs.cloudflare.com/ajax/libs/webfont/1.6.28/webfontloader.js',\n underscore: scheme + 'cdnjs.cloudflare.com/ajax/libs/underscore.js/1.13.7/underscore-min.js',\n sequence: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.js',\n sequenceCSS: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.css',\n WaveDrom: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/wavedrom.min.js',\n WaveDromSkin: {\n default: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/default.js',\n lowkey: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/lowkey.js',\n narrow: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/narrow.js',\n },\n vega: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega/6.1.2/vega.min.js',\n vegaLite: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega-lite/6.1.0/vega-lite.min.js',\n vegaEmbed: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega-embed/7.0.2/vega-embed.min.js',\n },\n jsdelivr: {\n ABCJS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/dist/abcjs-basic-min.js',\n ABCJSCSS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/abcjs-audio.css',\n echarts: scheme + 'cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js',\n Viz: scheme + 'cdn.jsdelivr.net/npm/@viz-js/viz@3/lib/viz-standalone.js',\n Raphael: scheme + 'cdn.jsdelivr.net/npm/raphael@2/raphael.min.js',\n flowchart: scheme + 'cdnjs.cloudflare.com/ajax/libs/flowchart/1.18.0/flowchart.min.js',\n mermaid: scheme + 'cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js',\n katex: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/katex.min.js',\n katexCSS: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/katex.min.css',\n renderMathInElement: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/contrib/auto-render.js',\n railroad: scheme + 'cdn.jsdelivr.net/npm/railroad-diagrams@1/railroad-diagrams.js',\n railroadCSS: scheme + 'cdn.jsdelivr.net/npm/railroad-diagrams@1/railroad-diagrams.css',\n Snap: scheme + 'cdn.jsdelivr.net/npm/snapsvg@0/dist/snap.svg-min.js',\n WebFont: scheme + 'cdn.jsdelivr.net/npm/webfontloader@1/webfontloader.js',\n underscore: scheme + 'cdn.jsdelivr.net/npm/underscore@1/underscore-min.js',\n sequence: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.js',\n sequenceCSS: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.css',\n WaveDrom: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/wavedrom.min.js',\n WaveDromSkin: {\n default: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/default.js',\n lowkey: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/lowkey.js',\n narrow: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/narrow.js',\n },\n vega: scheme + 'cdn.jsdelivr.net/npm/vega@6/build/vega.min.js',\n vegaLite: scheme + 'cdn.jsdelivr.net/npm/vega-lite@6/build/vega-lite.min.js',\n vegaEmbed: scheme + 'cdn.jsdelivr.net/npm/vega-embed@7/build/vega-embed.min.js',\n },\n};\n\nfunction setCDN(name, scheme_default, scheme_dist, uri_path) {\n if (name in cdnSrc) {\n cdnName = name;\n }\n\n if (typeof scheme_default === 'string' && scheme_default) {\n defScheme = scheme_default;\n }\n\n if (typeof scheme_dist === 'string' && scheme_dist) {\n distScheme = scheme_dist;\n }\n\n if (typeof uri_path === 'string' && uri_path) {\n if (uriPath.at(uriPath.length - 1) !== '/') {\n uri_path += '/';\n }\n uriPath = uri_path;\n }\n}\n\nfunction getCDN() {\n return cdnName;\n}\n\nfunction getName(name) {\n if (typeof name === 'object') {\n const key = Object.keys(name)[0];\n const val = name[key];\n if (typeof val === 'string') {\n return key + '-' + val;\n }\n }\n\n return name;\n}\n\nfunction getUrl(url) {\n try {\n const uri = new URL(url);\n if (uri.protocol === 'dist:') {\n url = url.substring(uri.protocol.length + 2);\n if (url.substring(0, 8) === '../dist/') {\n url = distScheme + url;\n } else {\n url = defScheme + url;\n }\n return url;\n }\n\n if (uri.protocol === 'file:') {\n if (uriPath) {\n const preUri = new URL(uriPath);\n url = preUri.origin + '/' + url.substring(8);\n return url;\n }\n }\n } catch {\n if (uriPath) {\n const prefix = './';\n if (url.substring(0, prefix.length) === prefix) {\n url = url.substring(prefix.length);\n }\n url = uriPath + url;\n }\n }\n return url;\n}\n\nfunction getSrc(native, name, src, def) {\n if (typeof src === 'undefined' || !src) {\n src = getCDN();\n }\n if (cdnSrc.hasOwnProperty(src)) {\n const cdn = cdnSrc[src];\n let url = '';\n if (typeof name === 'object') {\n const key = Object.keys(name)[0];\n const val = name[key];\n if (cdn[key] && typeof val === 'string' && val && cdn[key][val]) {\n url = cdn[key][val];\n }\n } else if (cdn[name]) {\n url = cdn[name];\n }\n\n if (url) {\n if (native || url.substring(0, scheme.length) === scheme) {\n def = url;\n } else if (url.substring(0, 8) === '../dist/') {\n def = distScheme + url;\n } else {\n def = defScheme + url;\n }\n }\n }\n return def;\n}\n\nfunction loadScript(name, src) {\n return new Promise((resovle, reject) => {\n if (!name || typeof document === 'undefined') {\n reject('Args is invaild!');\n }\n\n if (typeof src === 'undefined') {\n src = '';\n }\n\n src = getSrc(false, name, src);\n if (!src) {\n reject(name + ' script source invaild!');\n }\n\n const id = 'script-' + getName(name).toLowerCase();\n let script = document.getElementById(id);\n if (script) {\n return resovle(name);\n }\n\n const head = document.head || document.getElementsByTagName('head')[0];\n script = document.createElement('script');\n script.src = src;\n script.id = id;\n script.onload = () => {\n resovle(name);\n };\n head.appendChild(script);\n });\n}\n\nfunction unloadScript(name) {\n name = getName(name);\n const e = document.getElementById('script-' + name.toLowerCase());\n if (e) {\n const head = document.head || document.getElementsByTagName('head')[0];\n head.removeChild(e);\n }\n}\n\nfunction loadStyleSheet(name, css) {\n if (!name || typeof document === 'undefined') {\n return '';\n }\n\n if (typeof css === 'undefined') {\n css = '';\n }\n\n css = getSrc(false, name, css);\n if (!css) {\n return '';\n }\n\n const id = 'css-' + getName(name).toLowerCase();\n let script = document.getElementById(id);\n if (!script) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = css;\n link.id = id;\n head.appendChild(link);\n }\n return cdnName === 'local' ? '' : css;\n}\n\nfunction unloadStyleSheet(name) {\n name = getName(name);\n const e = document.getElementById('css-' + name.toLowerCase());\n if (e) {\n const head = document.head || document.getElementsByTagName('head')[0];\n head.removeChild(e);\n }\n}\n\nconst cdnjs = {\n setCDN,\n getCDN,\n getUrl,\n getSrc,\n loadScript,\n unloadScript,\n loadStyleSheet,\n unloadStyleSheet,\n};\n\nexport default cdnjs;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nfunction loadStyle(name, css) {\n if (!name || !css || typeof document === 'undefined') {\n return false;\n }\n\n const id = 'css-' + name.toLowerCase();\n const script = document.getElementById(id);\n if (!script) {\n const head = document.head || document.getElementsByTagName('head')[0];\n const style = document.createElement('style');\n style.id = id;\n style.type = 'text/css';\n style.innerText = css;\n head.appendChild(style);\n }\n return true;\n}\n\nfunction loadStylesheet(cssLink, id) {\n if (!cssLink || typeof document === 'undefined') {\n return false;\n }\n\n let stylesheet = null;\n if (id) {\n stylesheet = document.getElementById(id);\n }\n if (!stylesheet) {\n const head = document.head || document.getElementsByTagName('head')[0];\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = cssLink;\n if (id) link.id = id;\n head.appendChild(link);\n }\n return true;\n}\n\nfunction removeAllStylesheet(prefix) {\n if (!prefix) return;\n const head = document.head || document.getElementsByTagName('head')[0];\n const links = head.querySelectorAll('link');\n links.forEach((link) => {\n if (link.id && link.id.substring(0, prefix.length) === prefix) {\n head.removeChild(link);\n }\n });\n}\n\nfunction loadScript(id, code, element) {\n return new Promise((res, rej) => {\n if (!id || !code || typeof document === 'undefined') {\n return rej('Args is invaild!');\n }\n\n let script = document.getElementById(id);\n if (script) {\n return res(true);\n }\n\n if (!element) {\n element = document.body;\n } else if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n script = document.createElement('script');\n script.id = id;\n script.type = 'text/javascript';\n script.text = code;\n element.appendChild(script);\n res(true);\n });\n}\n\nfunction interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nfunction renderCacheElement(doc, id, name, callback) {\n if (typeof window !== 'undefined' && window.document) {\n doc = window.document;\n }\n const el = doc.createElement('div');\n el.id = id;\n el.className = name;\n el.style.display = 'none';\n doc.body.appendChild(el);\n if (typeof callback === 'function' && callback) {\n const result = callback(el);\n if (result instanceof Promise) {\n result.then((el) => {\n doc.body.removeChild(el);\n el.style.display = '';\n });\n return el.outerHTML;\n }\n }\n doc.body.removeChild(el);\n el.style.display = '';\n return el.outerHTML;\n}\n\nfunction renderElement(doc, id, name) {\n if (typeof window !== 'undefined' && window.document) {\n doc = window.document;\n }\n const el = doc.createElement('div');\n el.id = id;\n el.className = name;\n doc.body.appendChild(el);\n return el;\n}\n\nfunction createElementMeta(name, element, callback) {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return false;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n if (langobj.width) {\n if (typeof langobj.width !== 'string') {\n langobj.width = langobj.width + 'px';\n }\n }\n if (langobj.height) {\n if (typeof langobj.height !== 'string') {\n langobj.height = langobj.height + 'px';\n }\n }\n }\n\n let code = element.textContent.trim();\n if (callback && typeof callback === 'function') {\n code = callback(code);\n }\n const className =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const id = name.toLowerCase() + '-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n element.id = id;\n return {\n id: id,\n container: id + '-container',\n className: className,\n data: code,\n element: element,\n lang: langobj,\n };\n}\n\nfunction addCssLink(obj, link, id) {\n if (!obj.cssLinks) {\n obj.cssLinks = [];\n } else {\n if (!Array.isArray(obj.cssLinks)) {\n obj.cssLinks = [obj.cssLinks];\n }\n }\n\n obj.cssLinks.push({\n id: id,\n link: link,\n });\n return obj;\n}\n\nfunction addScript(obj, script) {\n if (!obj.scripts) {\n obj.scripts = [];\n } else {\n if (!Array.isArray(obj.scripts)) {\n obj.scripts = [obj.scripts];\n }\n }\n obj.scripts.push(script);\n return obj;\n}\n\nfunction addExtra(obj, extra) {\n if (!obj.extras) {\n obj.extras = [];\n } else {\n if (!Array.isArray(obj.extras)) {\n obj.extras = [obj.extras];\n }\n }\n obj.extras.push(extra);\n return obj;\n}\n\nfunction hashString(str) {\n const seed = 31;\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (Math.imul(seed, hash) + char) | 0; // 使用32位整数运算\n }\n return hash >>> 0; // 确保无符号整数\n}\n\nconst utils = {\n interopDefault,\n loadStyle,\n loadStylesheet,\n loadScript,\n removeAllStylesheet,\n renderCacheElement,\n renderElement,\n createElementMeta,\n addCssLink,\n addScript,\n addExtra,\n hashString,\n};\n\nexport default utils;\n","/*\n * Copyright (c) 2024-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown abc extension for markdown\n */\n'use strict';\n\nconst extName = 'abc';\nconst cssCdnName = 'ABCJSCSS';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown abcjs extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof ABCJS === 'undefined') {\n var ABCJS = window.ABCJS || undefined;\n}\n\nfunction hasAbc() {\n return !!ABCJS;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasAbc();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n utils.loadStyle(\n 'abc-audio',\n '.highlight{fill: #0a9ecc;} .abcjs-cursor{stroke: red;}' +\n ' .abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed{border: none;}' +\n ' .abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed svg path{fill: #6eaa49;}'\n );\n cdnjs.loadScript('ABCJS').then((name) => {\n ABCJS = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasAbc()) return;\n cdnjs.unloadScript('ABCJS');\n cdnjs.unloadStyleSheet(cssCdnName);\n ABCJS = null;\n window.ABCJS = null;\n dync = false;\n}\n\nfunction abcCreateEnv() {\n if (typeof ABCJS === 'undefined') {\n var ABCJS = window.ABCJS || undefined;\n }\n\n function cursorControl(id) {\n const self = this;\n self.onReady = function () {};\n self.onStart = function () {\n const tag = '#' + id + ' svg';\n const svg = document.querySelector(tag);\n const cursor = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n cursor.setAttribute('class', 'abcjs-cursor');\n cursor.setAttributeNS(null, 'x1', 0);\n cursor.setAttributeNS(null, 'y1', 0);\n cursor.setAttributeNS(null, 'x2', 0);\n cursor.setAttributeNS(null, 'y2', 0);\n svg.appendChild(cursor);\n };\n self.beatSubdivisions = 2;\n self.onBeat = function (beatNumber, totalBeats, totalTime) {};\n self.onEvent = function (ev) {\n if (ev.measureStart && ev.left === null) return; // this was the second part of a tie across a measure line. Just ignore it.\n\n const className = '#' + id + ' svg .highlight';\n const lastSelection = document.querySelectorAll(className);\n for (let k = 0; k < lastSelection.length; k++) lastSelection[k].classList.remove('highlight');\n\n for (let i = 0; i < ev.elements.length; i++) {\n const note = ev.elements[i];\n for (let j = 0; j < note.length; j++) {\n note[j].classList.add('highlight');\n }\n }\n\n const tag = '#' + id + ' svg .abcjs-cursor';\n const cursor = document.querySelector(tag);\n if (cursor) {\n cursor.setAttribute('x1', ev.left - 2);\n cursor.setAttribute('x2', ev.left - 2);\n cursor.setAttribute('y1', ev.top);\n cursor.setAttribute('y2', ev.top + ev.height);\n }\n };\n self.onFinished = function () {\n const className = '#' + id + ' svg .highlight';\n const els = document.querySelectorAll(className);\n for (let i = 0; i < els.length; i++) {\n els[i].classList.remove('highlight');\n }\n const tag = '#' + id + ' svg .abcjs-cursor';\n const cursor = document.querySelector(tag);\n if (cursor) {\n cursor.setAttribute('x1', 0);\n cursor.setAttribute('x2', 0);\n cursor.setAttribute('y1', 0);\n cursor.setAttribute('y2', 0);\n }\n };\n }\n\n window.abcEnv = {\n abcOptions: {\n add_classes: true,\n responsive: 'resize',\n },\n setTune(render, userAction, synthControl) {\n const id = render.id;\n const abc = render.data;\n if (!synthControl) {\n ABCJS.renderAbc(id, abc, this.abcOptions);\n return;\n }\n\n synthControl.disable(true);\n const visualObj = ABCJS.renderAbc(id, abc, this.abcOptions)[0];\n const midiBuffer = new ABCJS.synth.CreateSynth();\n midiBuffer\n .init({\n visualObj: visualObj,\n })\n .then(function (response) {\n synthControl\n .setTune(visualObj, userAction)\n .then(function (response) {\n console.log('Audio successfully loaded.');\n })\n .catch(function (error) {\n console.warn('Audio problem:', error);\n });\n })\n .catch(function (error) {\n console.warn('Audio problem:', error);\n });\n },\n load(audio, render) {\n let synthControl;\n if (audio) {\n const id = '#' + audio;\n if (ABCJS.synth.supportsAudio()) {\n synthControl = new ABCJS.synth.SynthController();\n synthControl.load(id, new cursorControl(render.id), {\n displayLoop: true,\n displayRestart: true,\n displayPlay: true,\n displayProgress: true,\n displayWarp: true,\n });\n } else {\n document.querySelector(id).innerHTML =\n \"<div class='audio-error'>Audio is not supported in this browser.</div>\";\n }\n }\n this.setTune(render, false, synthControl);\n },\n };\n}\n\nfunction loadABC(audio, render) {\n const result = function () {\n window.abcEnv.load(audio, render);\n };\n\n result.toString = function () {\n return `function(){\n const audio = '${audio}';\n const render = ${JSON.stringify(render)};\n window.abcEnv.load(audio, render);\n }`;\n };\n\n return result;\n}\n\nfunction onRenderAbc(resolve, scripts, meta) {\n if (hasAbc()) {\n const id = meta.id;\n const name = meta.className;\n const container = meta.container;\n let style = '';\n if (meta.lang) {\n if (meta.lang.width) {\n style += `width:${meta.lang.width};`;\n }\n if (meta.lang.height) {\n style += `height:${meta.lang.height};`;\n }\n }\n let html = '';\n if (style) {\n html += `<div id=\"${container}\" class=\"${name}\" style=\"${style}\">`;\n html += `<div id=\"${id}\" style=\"width:100%;height:100%;display:inline-block\"></div>`;\n } else {\n html += `<div id=\"${container}\" class=\"${name}\">`;\n html += `<div id=\"${id}\"></div>`;\n }\n if (!meta.lang || !meta.lang.audio) {\n const data = meta.data;\n const doc = meta.element.ownerDocument;\n html += '</div>';\n meta.element.parentNode.outerHTML = html;\n const element = doc.getElementById(id);\n ABCJS.renderAbc(element, data, {\n add_classes: true,\n responsive: 'resize',\n });\n return resolve(true);\n }\n\n const cssLink = meta.cssLink;\n const data = meta.data;\n const audio = id + '-audio';\n if (style) {\n html += cssLink\n ? `<div id=\"${audio}\" style=\"width:100%;height:100%;display:inline-block\" class=\"css-abc\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${audio}\" style=\"width:100%;height:100%;display:inline-block\"></div>`;\n } else {\n html += cssLink ? `<div id=\"${audio}\" class=\"css-abc\" data-css=\"${cssLink}\"></div>` : `<div id=\"${audio}\"></div>`;\n }\n html += '</div>';\n meta.element.parentNode.outerHTML = html;\n\n const script = {\n id: container,\n code: loadABC(audio, {\n id: id,\n class: name,\n data: data,\n }),\n host: `#${container}`,\n };\n scripts.push(script);\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderAbc(resolve, scripts, meta);\n }, 10);\n}\n\n/**\n * render abc graphs\n */\nfunction renderAbc(element, scripts) {\n return new Promise((resolve) => {\n let meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n meta.cssLink = cdnjs.getSrc(true, cssCdnName);\n onRenderAbc(resolve, scripts, meta);\n });\n}\n\n// <div class=\"abc\"></div>\nfunction renderAbcElements(elements, scripts) {\n const script = {\n outer: [\n {\n name: 'ABCJS',\n src: cdnjs.getSrc(false, 'ABCJS', 'jsdelivr'),\n },\n ],\n id: 'abcjs-ext',\n code: abcCreateEnv,\n inner: [],\n };\n scripts.push(script);\n dyncLoadScript();\n return new Promise((resolve) => {\n const promiseArray = [];\n elements.forEach((element) => {\n promiseArray.push(renderAbc(element, script.inner));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownAbc() {\n return [\n {\n type: 'output',\n filter: function (obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the abc in code blocks\n const elements = wrapper.querySelectorAll(`code.${extName}.language-${extName}`);\n if (!elements.length) {\n return false;\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(true, cssCdnName),\n };\n utils.addCssLink(obj, this.config.cssLink, 'css-abc');\n console.log(format(`Begin render ${extName} elements.`));\n return renderAbcElements(elements, obj.scripts).then(() => {\n console.log(format(`End render ${extName} elements.`));\n return obj;\n });\n },\n },\n ];\n}\n\nexport default showdownAbc;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown toc extension for markdown\n */\n'use strict';\n\nimport format from './log';\nimport utils from './utils';\n\nfunction createHeadingElement(wrapper, element, toc, headingLevel, nexthead) {\n try {\n if (nexthead) {\n if (headingLevel > 1) {\n const parent = toc.parentNode;\n if (parent && parent.tagName === 'UL') {\n parent.classList.add('toc-multi');\n }\n }\n const title = toc.querySelector('div');\n if (title) {\n title.classList.remove('toc-title');\n title.classList.add('toc-multi-title');\n const icon = title.querySelector('i');\n if (icon) {\n icon.classList.remove('toc-chapter');\n icon.classList.add('toc-multi-chapter');\n icon.innerHTML = '<svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-expand\"></use></svg>';\n }\n }\n toc = toc.appendChild(wrapper.ownerDocument.createElement('ul'));\n if (headingLevel > 1) {\n toc.classList.add(`toc-level-${headingLevel}`);\n } else {\n toc.classList.add('toc-main');\n }\n }\n toc = toc.appendChild(wrapper.ownerDocument.createElement('li'));\n if (element) {\n const child = toc.appendChild(wrapper.ownerDocument.createElement('div'));\n child.classList.add(`toc-title-${headingLevel}`, `toc-title`);\n const icon = child.appendChild(wrapper.ownerDocument.createElement('i'));\n icon.classList.add('iconfont', 'toc-chapter');\n icon.innerHTML = '<svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-chapter-l\"></use></svg>';\n const link = child.appendChild(wrapper.ownerDocument.createElement('a'));\n link.appendChild(wrapper.ownerDocument.createTextNode(element.textContent));\n link.href = '#' + element.id;\n }\n } catch {\n console.warn(format('append child error:'), wrapper);\n }\n return toc;\n}\n\nfunction appendTocElement(wrapper, element, currTocNode, headingLevel) {\n // If the current heading level is not greater than the heading level of current toc node,\n // return the toc node whose heading level is less than the current heading level in the toc node list.\n // At the same time, clearing the invalid toc node.\n if (headingLevel <= currTocNode.headingLevel) {\n let tempTocNode = null;\n while (currTocNode) {\n if (headingLevel > currTocNode.headingLevel) break;\n tempTocNode = currTocNode;\n currTocNode = tempTocNode.parentNode;\n // Remove toc node from node list and clean it.\n tempTocNode.parentNode = null;\n tempTocNode.toc = null;\n tempTocNode.headingLevel = null;\n tempTocNode.preLevel = null;\n }\n if (currTocNode) appendTocElement(wrapper, element, currTocNode, headingLevel);\n return currTocNode;\n }\n\n // If the current heading level is greater than the heading level of\n // the latest heading of the current toc node,\n // you need to create a new level heading with out list.\n // Otherwise add a heading of the same heading level.\n if (headingLevel > currTocNode.preLevel) {\n currTocNode.preLevel++;\n while (headingLevel > currTocNode.preLevel) {\n currTocNode.toc = createHeadingElement(wrapper, null, currTocNode.toc, headingLevel, true);\n currTocNode.preLevel++;\n }\n currTocNode.toc = createHeadingElement(wrapper, element, currTocNode.toc, headingLevel, true);\n } else {\n while (headingLevel < currTocNode.preLevel) {\n if (currTocNode.toc) currTocNode.toc = currTocNode.toc.parentNode;\n if (currTocNode.toc) currTocNode.toc = currTocNode.toc.parentNode;\n currTocNode.preLevel--;\n }\n if (currTocNode.toc) currTocNode.toc = currTocNode.toc.parentNode;\n currTocNode.toc = createHeadingElement(wrapper, element, currTocNode.toc, headingLevel, false);\n }\n\n if (currTocNode.parentNode) appendTocElement(wrapper, element, currTocNode.parentNode, headingLevel);\n return currTocNode;\n}\n\nfunction renderTocElements(wrapper, config) {\n let element = null;\n let headingLevel = 0;\n let currTocNode = null;\n let result = false;\n let firstHeadOne = false;\n let totalToc = null;\n\n config.extraDocs = [];\n config.extraDocs.push(\n '<div id=\"toc-svgs\" class=\"hidden\"><svg aria-hidden=\"true\" style=\"position: absolute; width: 0px; height: 0px; overflow: hidden;\"><symbol id=\"icon-chapter-s\" viewBox=\"0 0 1024 1024\"><path d=\"M725.108359 579.864261c11.519371-117.753568-94.714826-195.829303-165.110981-247.666471l-10.879406-7.679581-21.118846-15.359161c-40.317798-28.798427-81.915525-58.876784-95.994756-95.994756-15.999126-41.597728-13.439266-74.235945 7.67958-97.274686 26.878532-29.438392 90.235071-35.838042 120.313428-11.519371 26.238567 20.478881 26.878532 53.117098 24.958637 70.396154-2.55986 24.318672 14.719196 46.717448 39.037867 49.917274 24.318672 2.55986 46.717448-14.719196 49.917274-39.037868 7.039615-60.796679-14.079231-115.833673-58.236819-151.03175C547.838042-19.143018 432.644335-8.903578 373.127586 55.732892c-44.157588 47.997378-53.117098 115.193708-24.958637 189.429652 8.319546 23.038742 21.758811 42.877658 37.117973 60.156714-36.478007 34.558112-73.59598 78.075735-79.355665 138.872414C294.411886 561.94524 400.646083 640.020975 471.042237 691.858143l10.879406 7.679581 21.118846 15.359161c40.317798 28.798427 81.915525 58.876784 95.994757 95.994756 15.999126 41.597728 13.439266 74.235945-7.679581 97.274686-26.878532 29.438392-90.235071 35.838042-120.313428 11.519371-26.238567-20.478881-26.878532-53.117098-24.958636-70.396154 2.55986-24.318672-14.719196-46.717448-39.037868-49.917274s-46.717448 14.719196-49.917273 39.037868c-7.039615 60.796679 14.079231 115.833673 58.236819 151.03175 29.438392 23.038742 67.196329 34.558112 106.234197 34.558112 50.557238 0 102.394407-19.198951 135.672589-55.676959 44.157588-47.997378 53.117098-115.193708 24.958636-189.429652-8.319546-23.038742-21.758811-42.877658-37.117972-60.156714 36.478007-34.558112 74.235945-78.075735 79.99563-138.872414z m-201.588988 39.677833c-60.156714-44.157588-135.672589-99.834547-129.272939-166.390911 3.199825-33.278182 28.158462-60.156714 57.596854-87.675211 7.679581 5.759685 15.999126 11.519371 23.678707 17.279056 7.039615 5.11972 13.439266 9.599476 19.838916 14.719196l10.879406 8.319546c60.156714 44.157588 135.672589 99.834547 129.272938 166.39091-3.199825 33.278182-28.158462 60.156714-57.596854 87.675211-8.319546-5.759685-15.999126-11.519371-23.678706-17.279056-7.039615-5.11972-13.439266-9.599476-19.838917-14.719196l-10.879405-8.319545z\"></path></symbol><symbol id=\"icon-chapter-l\" viewBox=\"0 0 1024 1024\"><path d=\"M791.272727 11.636364a81.454545 81.454545 0 0 1 81.175273 74.752L872.727273 93.090909v884.363636a34.909091 34.909091 0 0 1-51.060364 30.999273l-4.142545-2.606545-142.615273-101.888-142.615273 101.934545a34.909091 34.909091 0 0 1-30.813091 4.840727l-5.026909-2.048-4.747636-2.792727L349.090909 903.912727l-142.615273 101.934546a34.955636 34.955636 0 0 1-53.946181-18.944l-0.93091-4.654546L151.272727 977.454545V93.090909A81.454545 81.454545 0 0 1 226.024727 11.915636L232.727273 11.636364h558.545454z m-139.636363 605.090909H372.363636l-4.747636 0.325818A34.909091 34.909091 0 0 0 372.363636 686.545455h279.272728l4.747636-0.325819A34.909091 34.909091 0 0 0 651.636364 616.727273z m0-186.181818H372.363636l-4.747636 0.325818A34.909091 34.909091 0 0 0 372.363636 500.363636h279.272728l4.747636-0.325818A34.909091 34.909091 0 0 0 651.636364 430.545455z m0-186.181819H372.363636l-4.747636 0.325819A34.909091 34.909091 0 0 0 372.363636 314.181818h279.272728l4.747636-0.325818A34.909091 34.909091 0 0 0 651.636364 244.363636z\"></path></symbol><symbol id=\"icon-toc\" viewBox=\"0 0 1024 1024\"><path d=\"M62.500473 512.163729l61.447491-40.958854 387.221112 202.039529L898.394281 471.204875l61.443397 40.958854-448.668603 244.728794L62.500473 512.163729zM62.500473 308.228013l448.668603-244.732887 448.668603 244.732887-448.668603 244.724701L62.500473 308.228013zM511.169075 877.18012l387.225205-202.035436 61.443397 40.958854L511.169075 960.836425 62.500473 716.104561l61.447491-40.958854L511.169075 877.18012z\"></path></symbol><symbol id=\"icon-collapse\" viewBox=\"0 0 1024 1024\"><path d=\"M85.781832 219.399571h73.720856c20.35996 0 36.879928-16.359968 36.879928-36.559928s-16.519968-36.559929-36.879928-36.559929h-73.719856c-20.35996 0-36.860928 16.359968-36.860928 36.559929 0 20.199961 16.499968 36.559929 36.859928 36.559928zM50.462901 475.419071c0 20.199961 16.500968 36.579929 36.859928 36.579929h72.179859c20.35996 0 36.879928-16.379968 36.879928-36.579929s-16.519968-36.579929-36.879928-36.579928h-72.179859c-20.35996 0-36.859928 16.379968-36.859928 36.579928z m145.919715 292.577429c0-20.199961-16.519968-36.595929-36.879928-36.595929h-73.719856c-20.35996 0-36.860928 16.395968-36.860928 36.595929 0 20.180961 16.499968 36.562929 36.859928 36.562929h73.720856c20.35996 0 36.879928-16.381968 36.879928-36.562929z\"></path><path d=\"M933.660176 38.839924l-73.718856-2.279995c0-20.198961-16.519968-36.559929-36.879928-36.559929h-661.998707c-20.35996 0-36.879928 16.359968-36.879928 36.559929v70.879861h36.879928s73.359857 6.840987 73.359857 73.140857c0 0 0.779998 73.279857-75.239853 73.279857l-34.999932 2.119996 0.759999 144.019719 34.399933-0.02s75.879852-0.02 75.879852 77.699848c0 0-7.057986 70.879862-76.179852 70.879862l-34.699932 0.019-0.619999 143.980718h36.740929s73.559856 2.279996 73.559856 75.437853c0 0-0.14 75.402853-76.179851 75.402853l-33.199935-2.279996-0.46 73.159857s42.239918 109.718786 106.759792 109.718786h705.018623s34.557933-6.877987 34.557932-34.298933V75.421853s-6.899987-36.580929-36.859928-36.580929zM306.9634 255.9795h479.238064v292.579429h-479.239064V255.9795zM897.939246 916.55821s1.159998 34.279933-37.999926 34.279933H233.243544s-38.019926-12.559975-38.019925-37.719926l627.838773-0.36c20.35996 0 36.879928-16.379968 36.879928-36.579928V69.719864l37.998926 12.559975v834.278371z\"></path><path d=\"M694.042644 329.119357H399.14022c-10.19998 0-18.439964 8.199984-18.439964 18.319964 0 10.07998 8.239984 18.259964 18.439964 18.259965h294.901424c10.17898 0 18.418964-8.179984 18.418964-18.259965 0-10.11898-8.239984-18.319964-18.419964-18.319964z m0 109.719786H399.14022c-10.19998 0-18.439964 8.199984-18.439964 18.279964 0 10.11998 8.239984 18.299964 18.439964 18.299964h294.901424c10.17898 0 18.418964-8.179984 18.418964-18.299964 0-10.07998-8.239984-18.279964-18.419964-18.279964z\"></path></symbol><symbol id=\"icon-chapter\" viewBox=\"0 0 1024 1024\"><path d=\"M832 128v768H256V128h576m64-64H192v896h704V64z\" ></path><path d=\"M161.3 296.2v-0.2H320v-40H161.3c-35.5 0-64.3 28.7-64.3 64s28.8 64 64.3 64h90v-40h-90v-0.2c-13.3 0-24.1-10.7-24.1-23.8 0-13.1 10.8-23.8 24.1-23.8z m0 192v-0.2H320v-40H161.3c-35.5 0-64.3 28.7-64.3 64s28.8 64 64.3 64h90v-40h-90v-0.2c-13.3 0-24.1-10.7-24.1-23.8 0-13.1 10.8-23.8 24.1-23.8z m0 192v-0.2H320v-40H161.3c-35.5 0-64.3 28.7-64.3 64s28.8 64 64.3 64h90v-40h-90v-0.2c-13.3 0-24.1-10.7-24.1-23.8 0-13.1 10.8-23.8 24.1-23.8z\" ></path><path d=\"M288 277a32 32 0 1 0 64 0 32 32 0 1 0-64 0zM288 469a32 32 0 1 0 64 0 32 32 0 1 0-64 0zM288 662a32 32 0 1 0 64 0 32 32 0 1 0-64 0zM384 256h385v40H384z m0 128h385v40H384z m0 128h385v40H384z m0 128h256v40H384z\" ></path></symbol><symbol id=\"icon-expand\" viewBox=\"0 0 1024 1024\"><path d=\"M731.093333 128c82.346667 0 158.08 20.906667 218.88 56.32 6.4 3.626667 10.026667 10.88 10.026667 18.346667v667.306666c0 12.16-9.386667 20.906667-19.84 20.906667-2.986667 0-5.76-0.64-8.746667-2.133333-57.386667-29.226667-126.08-46.08-200.32-46.08s-141.866667 17.066667-199.04 45.653333c-2.986667 1.493333-5.973333 2.986667-8.96 4.693333-0.426667 0.213333-0.853333 0.64-1.493333 0.853334-5.973333 3.2-13.226667 3.2-19.2 0-3.413333-1.92-6.826667-3.626667-10.453333-5.546667-56.96-28.586667-125.44-45.653333-199.04-45.653333s-143.146667 16.853333-200.32 46.08c-2.773333 1.493333-5.76 2.133333-8.746667 2.133333-10.453333 0-19.84-8.746667-19.84-20.906667V202.453333c0-7.68 3.84-14.72 10.026667-18.346666C134.826667 148.693333 210.56 128 292.906667 128S451.2 149.333333 512 184.746667C572.8 149.333333 648.746667 128 731.093333 128zM701.866667 187.733333c-71.466667 0-137.386667 17.92-189.866667 47.786667-52.693333-29.866667-118.613333-47.786667-189.866667-47.786667s-136.96 17.493333-189.653333 47.36c-5.546667 3.2-8.746667 9.173333-8.746667 15.573334v563.626666c0 10.24 8.106667 17.493333 17.066667 17.493334 2.56 0 5.12-0.64 7.466667-1.92 49.706667-24.533333 109.44-38.826667 173.653333-38.826667s123.093333 14.293333 172.373333 38.4c3.2 1.493333 6.186667 2.986667 9.173334 4.693333 5.12 2.773333 11.52 2.773333 16.64 0 0.64-0.213333 0.853333-0.426667 1.493333-0.853333l7.68-3.84c49.493333-24.106667 108.8-38.4 172.373333-38.4s123.946667 14.293333 173.653334 38.826667c2.56 1.28 5.12 1.92 7.466666 1.92 8.96 0 17.066667-7.466667 17.066667-17.493334V250.666667c0-6.4-3.2-12.373333-8.746667-15.573334-52.693333-29.866667-118.186667-47.573333-189.653333-47.573333z\" ></path><path d=\"M949.333333 771.84c-123.306667-71.68-260.266667-80.64-407.466666-26.666667V221.866667c0-16.426667-13.44-29.866667-29.866667-29.866667s-29.866667 13.44-29.866667 29.866667v529.066666c-120.533333-55.466667-253.226667-53.973333-395.093333 5.12-10.88 4.48-16 17.066667-11.52 27.946667 4.48 10.88 17.066667 16 27.946667 11.52 139.306667-58.026667 263.253333-57.173333 378.666666 2.773333v46.506667c0 16.426667 13.44 29.866667 29.866667 29.866667s29.866667-13.44 29.866667-29.866667v-53.973333c142.08-56.32 268.586667-50.56 386.133333 17.706666 3.413333 1.92 7.04 2.986667 10.666667 2.986667 7.253333 0 14.506667-3.84 18.56-10.666667a21.290667 21.290667 0 0 0-7.68-29.226666z\"></path></symbol></svg></div>'\n );\n\n const elements = wrapper.querySelectorAll('p,h1,h2,h3,h4,h5,h6');\n for (let i = 0; i < elements.length; i++) {\n element = elements[i];\n if (!firstHeadOne && element.tagName.toLowerCase() == 'h1') {\n firstHeadOne = true;\n }\n // Match the element text is [toc].\n // And replace this element with out list that classname is 'showdown-toc'.\n if (element.textContent.trim().toLowerCase() == '[toc]') {\n // New table of contents container.\n let showdownToc = null;\n if (!firstHeadOne) {\n // Filter duplicate definitions\n if (totalToc) {\n element.parentNode.removeChild(element);\n continue;\n }\n\n showdownToc = wrapper.ownerDocument.createElement('div');\n showdownToc.classList.add('showdown-toc');\n totalToc = showdownToc;\n config.extraDocs.push('<div id=\"divider\" class=\"divider\"></div>');\n const swtichToc = wrapper.ownerDocument.createElement('div');\n swtichToc.id = 'toc-switch-button';\n swtichToc.classList.add('toc-switch', 'hidden');\n swtichToc.innerHTML = '<svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-chapter-l\"></use></svg>';\n element.parentNode.insertBefore(swtichToc, element);\n\n let tocTitle = 'Table Of Contents'\n let locale = document.children[0].lang;\n if (locale) {\n locale = locale.toLowerCase();\n if (locale === 'zh-cn' || locale === 'zh-hans') {\n tocTitle = '目录';\n }\n }\n\n showdownToc.id = 'total-showdown-toc';\n showdownToc.classList.add('total-toc');\n showdownToc.innerHTML =\n `<div class=\"toc-pin\"><span class=\"toc-pin-text\">${tocTitle}</span><div class=\"toc-fold-wrap\"><div id=\"toc-fold-icon\" class=\"toc-fold toc-icon\" data-name=\"toc-expand\"><svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-toc\"></use></svg></div><div id=\"toc-close-icon\" class=\"toc-close toc-icon\"><svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-chapter-s\"></use></svg></div></div></div>`;\n } else {\n showdownToc = wrapper.ownerDocument.createElement('div');\n showdownToc.classList.add('showdown-toc');\n }\n let tocView = wrapper.ownerDocument.createElement('div');\n tocView.className = 'toc-view';\n // let toc = wrapper.ownerDocument.createElement('ul');\n // tocView.appendChild(toc);\n showdownToc.appendChild(tocView);\n let tocNode = {\n parentNode: null,\n toc: tocView,\n headingLevel: headingLevel,\n preLevel: headingLevel,\n standalone: false,\n };\n if (currTocNode) {\n // If the heading level of the TOC node is higher than\n // that of the previous TOC node,\n // the TOC node is a child of the previous TOC node.\n // Otherwise, look up the TOC node in the node list\n // whose heading level is not greater than the TOC node.\n if (headingLevel > currTocNode.headingLevel) {\n tocNode.parentNode = currTocNode;\n } else {\n // The code will never be executed, just to prevent logic loss.\n // Because invalid nodes have been cleared in appendTocElement method.\n let prev = currTocNode;\n while (headingLevel < prev.headingLevel) {\n prev = prev.parentNode;\n }\n if (prev) {\n if (headingLevel === prev.headingLevel) {\n tocNode.parentNode = prev.parentNode;\n } else {\n tocNode.parentNode = prev;\n }\n }\n }\n }\n currTocNode = tocNode;\n result = true;\n currTocNode.standalone = !firstHeadOne;\n if (!firstHeadOne) {\n element.parentNode.removeChild(element);\n } else {\n element.parentNode.replaceChild(showdownToc, element);\n }\n continue;\n }\n\n // That's going to be what we use as contents entries\n // for this table of contents.\n if (element['tagName']) {\n switch (element['tagName']) {\n case 'H1':\n case 'H2':\n case 'H3':\n case 'H4':\n case 'H5':\n case 'H6':\n headingLevel = parseInt(element['tagName'].substr(1));\n if (currTocNode) {\n // if (!currTocNode.preLevel) {\n // currTocNode.preLevel = headingLevel;\n // }\n\n currTocNode = appendTocElement(wrapper, element, currTocNode, headingLevel);\n }\n break;\n }\n }\n }\n\n if (totalToc) {\n config.extraDocs.push(totalToc.outerHTML);\n }\n\n // Final, clear all toc node in node list.\n while (currTocNode) {\n let tempTocNode = currTocNode;\n currTocNode = tempTocNode.parentNode;\n // Clean toc node.\n tempTocNode.parentNode = null;\n tempTocNode.toc = null;\n tempTocNode.headingLevel = null;\n tempTocNode.preLevel = null;\n }\n return result;\n}\n\nfunction loadTocEvent() {\n const totalToc = document.querySelector('#total-showdown-toc');\n if (!totalToc) return;\n\n // 分隔条事件\n const divider = document.getElementById('divider');\n if (divider) {\n // 初始宽度\n let startX = 0;\n let startWidth = 0;\n function onDrag(e) {\n if (startX > 0) {\n // 计算移动的距离\n const moveX = e.clientX - startX;\n if (moveX != 0) {\n // 计算新的宽度\n const newWidth = startWidth - moveX;\n // 确保分割条宽度在合理范围内\n if (newWidth >= 5 && newWidth <= document.documentElement.clientWidth - 5) {\n // 调整右侧分割栏的flex值以保持比例\n totalToc.style.width = `${newWidth}px`;\n }\n }\n }\n }\n\n function stopDragging() {\n // 移除鼠标移动事件监听器\n document.removeEventListener('mousemove', onDrag);\n // 移除鼠标释放事件监听器\n document.removeEventListener('mouseup', stopDragging);\n // 恢复文本选中\n document.body.style.userSelect = '';\n startX = 0;\n }\n\n function startDragging(e) {\n // 鼠标按下时的位置\n startX = e.clientX;\n // 分割条的初始宽度\n startWidth = totalToc.clientWidth;\n // 防止文本选中\n document.body.style.userSelect = 'none';\n // 添加鼠标移动事件监听器\n document.addEventListener('mousemove', onDrag);\n // 添加鼠标释放事件监听器\n document.addEventListener('mouseup', stopDragging);\n }\n\n divider.addEventListener('mousedown', startDragging);\n }\n\n // if (totalShowdownToc.parentNode)\n // totalShowdownToc.parentNode.classList.add('main-toc-row');\n\n const tocFoldIcon = document.querySelector('#toc-fold-icon');\n if (tocFoldIcon) {\n tocFoldIcon.onclick = (e) => {\n const chapters = document.querySelectorAll('.total-toc ul');\n const icons = document.querySelectorAll('.total-toc ul:not(.toc-main) .toc-multi-chapter use');\n if (tocFoldIcon.dataset.name === 'toc-expand') {\n chapters.forEach((element) => {\n if (!element.classList.contains('toc-main') && !element.classList.contains('toc-level-2')) {\n element.classList.add('hidden');\n }\n });\n icons.forEach((icon) => {\n icon.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#icon-collapse');\n });\n tocFoldIcon.dataset.name = 'toc-fold';\n return;\n }\n\n chapters.forEach((element) => {\n element.classList.remove('hidden');\n });\n icons.forEach((icon) => {\n icon.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#icon-expand');\n });\n tocFoldIcon.dataset.name = 'toc-expand';\n };\n }\n\n const tocCloseIcon = document.querySelector('#toc-close-icon');\n if (tocCloseIcon) {\n tocCloseIcon.onclick = (e) => {\n const totalToc = document.querySelector('#total-showdown-toc');\n if (totalToc) totalToc.classList.add('hidden');\n const switchToc = document.querySelector('#toc-switch-button');\n if (switchToc) switchToc.classList.remove('hidden');\n };\n }\n\n const tocSwitch = document.querySelector('#toc-switch-button');\n if (tocSwitch) {\n tocSwitch.onclick = (e) => {\n e.currentTarget.classList.add('hidden');\n const totalToc = document.querySelector('#total-showdown-toc');\n if (totalToc) totalToc.classList.remove('hidden');\n };\n }\n\n const chapterIcons = document.querySelectorAll('.total-toc .toc-multi-chapter');\n chapterIcons.forEach((icon) => {\n icon.onclick = (e) => {\n let parent = e.currentTarget.parentNode;\n if (!parent) return;\n parent = parent.parentNode;\n if (!parent) return;\n\n const chapters = parent.querySelectorAll('ul');\n const icons = parent.querySelectorAll('.toc-multi-chapter use');\n const iconUse = e.currentTarget.querySelector('use');\n if (iconUse) {\n const href = iconUse.getAttributeNS('http://www.w3.org/1999/xlink', 'href');\n if (href === '#icon-expand') {\n chapters.forEach((element) => {\n element.classList.add('hidden');\n });\n icons.forEach((icon) => {\n icon.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#icon-collapse');\n });\n return;\n }\n\n chapters.forEach((element) => {\n element.classList.remove('hidden');\n });\n icons.forEach((icon) => {\n icon.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#icon-expand');\n });\n }\n };\n });\n}\n\nfunction showdownToc() {\n return [\n {\n type: 'output',\n config: {},\n filter: function (html) {\n if (typeof html === 'string') {\n // parse html\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n if (!renderTocElements(wrapper, this.config)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n\n if (typeof html !== 'object' || !html || !this.config.extraDocs || !Array.isArray(this.config.extraDocs)) {\n return false;\n }\n\n const obj = html;\n this.config.extraDocs.forEach((doc) => {\n utils.addExtra(obj, doc);\n });\n // 附加动态脚本\n const script = {\n inner: [\n {\n id: 'showdown-toc',\n code: loadTocEvent,\n host: '#total-showdown-toc',\n },\n ],\n };\n utils.addScript(obj, script);\n return obj;\n },\n },\n ];\n}\n\nexport default showdownToc;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown checktype extension for markdown\n */\n'use strict';\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nfunction showdownCss() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const prefix = 'css-ex-';\n utils.removeAllStylesheet(prefix);\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n const elements = wrapper.querySelectorAll('a');\n if (!elements.length) {\n return false;\n }\n\n elements.forEach((e)=>{\n try {\n if (e.href && typeof e.href === 'string' && e.href.substr(0, 4) === 'css:') {\n let cssLink = e.href.substr(4).trim();\n const hash = `${utils.hashString(cssLink)}`;\n utils.addCssLink(obj, cssLink, prefix + hash); \n if (e.parentNode && e.parentNode.tagName === 'P' && e.parentNode.parentNode) {\n e.parentNode.parentNode.removeChild(e.parentNode);\n } else {\n e.parentNode.removeChild(e);\n }\n cssLink = cdnjs.getUrl(cssLink);\n utils.loadStylesheet(cssLink, prefix + hash);\n }\n } catch {\n console.log('Error: href of <a> tag is not exist');\n }\n });\n return obj;\n }\n }\n ];\n}\n\nexport default showdownCss;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown viz extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown viz extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Viz === 'undefined') {\n var Viz = window.Viz || undefined;\n}\n\nconst engines = ['circo', 'dot', 'neato', 'osage', 'twopi'];\n\nfunction hasViz() {\n return typeof Viz !== 'undefined' && Viz && typeof Viz.instance !== 'undefined'\n ? true\n : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasViz();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadScript('Viz').then(name => {\n Viz = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasViz()) return;\n cdnjs.unloadScript('Viz');\n Viz = null;\n window.Viz = null;\n dync = false; \n}\n\nfunction onRenderViz(resolve, res) {\n if (hasViz()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const el = res.element;\n const langattr = res.element.dataset.lang;\n let engine = 'dot';\n if (langattr) {\n const obj = JSON.parse(langattr);\n if (obj && obj.engine && engines.indexOf(obj.engine) != -1) {\n engine = obj.engine;\n }\n }\n Viz.instance().then(viz => {\n const svg = viz.renderString(data, { format: 'svg', engine: engine });\n el.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svg}</div>`;\n resolve(true)\n });\n return;\n }\n\n setTimeout(() => {\n onRenderViz(resolve, res);\n }, 10);\n}\n\n/**\n * render Viz graphs\n */\nfunction renderViz(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(\"viz\", element);\n if (!meta) {\n return resolve(false);\n }\n \n onRenderViz(resolve, meta);\n });\n}\n\n// <div class=\"dot\"></div>\nfunction renderVizElements(elements) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderViz(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownViz() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the Viz in code blocks\n const elements = wrapper.querySelectorAll('code.dot.language-dot');\n if (!elements.length) {\n return false;\n }\n console.log(format(`Begin render dot elements.`));\n return renderVizElements(elements).then(() => {\n console.log(format(`End render dot elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownViz;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown vega extension for markdown\n */\n'use strict';\n\nconst extName = 'vega';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown vega extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof vegaEmbed === 'undefined') {\n var vegaEmbed = window.vegaEmbed || undefined;\n}\n\nfunction hasVegaEmbed() {\n return typeof vegaEmbed !== 'undefined' && vegaEmbed ? true : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasVegaEmbed();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs\n .loadScript(extName)\n .then(() => {\n return cdnjs.loadScript('vegaLite');\n })\n .then(() => {\n return cdnjs.loadScript('vegaEmbed');\n })\n .then((name) => {\n vegaEmbed = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasVegaEmbed()) return;\n cdnjs.unloadScript('vegaEmbed');\n cdnjs.unloadScript('vegaLite');\n cdnjs.unloadScript(extName);\n const vegaStyle = document.getElementById('vega-embed-style');\n if (vegaStyle && vegaStyle.tagName.toLowerCase() === 'style') {\n const head = document.head || document.getElementsByTagName('head')[0];\n head.removeChild(vegaStyle);\n }\n vegaEmbed = null;\n window.vegaEmbed = null;\n dync = false;\n}\n\n/**\n * render VegaEmbed graphs\n */\nfunction renderVega(element, options, scripts, isVegaLite) {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return Promise.resolve(false);\n }\n\n const container = meta.container;\n const vegaRenderer = (meta, config) => {\n const result = () => {\n const wval = eval;\n let el = document.getElementById(meta.id);\n if (el) {\n if (\n meta.lang &&\n meta.lang.type &&\n typeof meta.lang.type === 'string' &&\n meta.lang.type.toLowerCase() == 'javascript'\n ) {\n const option = wval(`(function(){${meta.data}; return option;})();`);\n vegaEmbed(el, option, config);\n } else {\n // JSON string\n const option = JSON.parse(meta.data);\n vegaEmbed(el, option, config);\n }\n }\n };\n\n result.toString = () => {\n if (\n meta.lang &&\n meta.lang.type &&\n typeof meta.lang.type === 'string' &&\n meta.lang.type.toLowerCase() == 'javascript'\n ) {\n return `function(){\n let el = document.getElementById('${meta.id}');\n if (el) {\n ${meta.data};\n const config = ${JSON.stringify(config)};\n vegaEmbed(el, option, config);\n }\n }`;\n }\n\n return `function(){\n let el = document.getElementById('${meta.id}');\n if (el) {\n const option = ${meta.data};\n const config = ${JSON.stringify(config)};\n vegaEmbed(el, option, config);\n }\n }`;\n };\n return result;\n };\n const script = {\n id: container,\n code: vegaRenderer(meta, options),\n host: `#${container}`,\n };\n scripts.push(script);\n return new Promise((resolve) => {\n onRenderVega(resolve, meta);\n });\n}\n\n// <div class=\"vegaembed || flow\"></div>\nfunction renderVegaElements(vegaElements, vegaLiteElements, scripts, options) {\n const script = {\n outer: [\n {\n name: extName,\n src: cdnjs.getSrc(false, extName, 'jsdelivr'),\n },\n {\n name: 'vegaLite',\n src: cdnjs.getSrc(false, 'vegaLite', 'jsdelivr'),\n },\n {\n name: 'vegaEmbed',\n src: cdnjs.getSrc(false, 'vegaEmbed', 'jsdelivr'),\n },\n ],\n inner: [],\n };\n scripts.push(script);\n dyncLoadScript();\n return new Promise((resolve) => {\n const promiseArray = [];\n vegaElements.forEach((element) => {\n promiseArray.push(renderVega(element, options, script.inner, false));\n });\n vegaLiteElements.forEach((element) => {\n promiseArray.push(renderVega(element, options, script.inner, true));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// theme: 'excel' | 'ggplot2' | 'quartz' | 'vox' | 'dark'\nconst getOptions = (userOptions = {}) => ({\n actions: { editor: false },\n theme: 'vox',\n tooltip: false,\n renderer: 'svg',\n ...userOptions,\n});\n\nfunction onRenderVega(resolve, meta) {\n if (hasVegaEmbed()) {\n const id = meta.id;\n const name = meta.className;\n const container = meta.container;\n const node = meta.element.parentNode;\n node.outerHTML = `<div id=\"${container}\" class=\"${name}\"><div id=\"${id}\"></div></div>`;\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderVega(resolve, meta);\n }, 10);\n}\n\nfunction showdownVega(userOptions) {\n const options = getOptions(userOptions);\n\n return [\n {\n type: 'output',\n config: options,\n filter: function (obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the VegaEmbed in code blocks\n const vegaElements = wrapper.querySelectorAll('code.vega.language-vega');\n const vegaLiteElements = wrapper.querySelectorAll('code.vega-lite.language-vega-lite');\n if (!vegaElements.length && !vegaLiteElements.length) {\n return false;\n }\n\n console.log(format(`Begin render vega elements.`));\n return renderVegaElements(vegaElements, vegaLiteElements, obj.scripts, this.config).then(() => {\n console.log(format(`End render vega elements.`));\n return obj;\n });\n },\n },\n ];\n}\n\nexport default showdownVega;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown align extension for markdown\n */\n'use strict';\n\nfunction renderAlignElements(wrapper) {\n let element = null;\n let childNode = null;\n let result = false;\n const elements = wrapper.querySelectorAll('p, li, h1, h2, h3, h4, h5, h6, div.paragraph');\n for (let i = 0; i < elements.length; i++) {\n element = elements[i];\n childNode = element.firstChild;\n while (childNode) {\n // Text node type is 3.\n if (childNode.nodeType === 3) {\n // Does the element consist of ':-:' or '--:'\n let results = childNode.nodeValue.match(/^([\\s\\S]*?)([:-]-:)(?:[\\s]?)([\\s\\S]*)$/);\n if (results) {\n if (results[2] === ':-:') {\n // align-center\n childNode.nodeValue = results[3];\n if (element.className) {\n element.className += ` align-center`;\n } else {\n element.className = `align-center`;\n }\n result = true;\n } else if (results[2] === '--:') {\n //align-right\n childNode.nodeValue = results[3];\n if (element.className) {\n element.className += ` align-right`;\n } else {\n element.className = `align-right`;\n }\n result = true;\n }\n //default algin-left\n }\n break;\n }\n childNode = childNode.nextSibling;\n }\n }\n return result;\n}\n\nfunction showdownAlign() {\n const parser = new DOMParser();\n return [\n {\n type: 'output',\n filter: function(html) {\n // parse html\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n if (!renderAlignElements(wrapper)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n }\n ];\n}\n\nexport default showdownAlign;\n","/*\nBased on ASCIIMathTeXImg.js but now part of https://github.com/jhuix/showdowns.git\n\nBased on ASCIIMathML, Version 1.4.7 Aug 30, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen\nModified with TeX conversion for IMG rendering Sept 6, 2006 (c) David Lippman http://www.pierce.ctc.edu/dlippman\n Updated to match ver 2.2 Mar 3, 2014\n Latest at https://github.com/mathjax/asciimathml\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nvar config = {\n decimalsign: \".\" // change to \",\" if you like, beware of `(1,2)`!\n};\n\nvar CONST = 0,\n UNARY = 1,\n BINARY = 2,\n INFIX = 3,\n LEFTBRACKET = 4,\n RIGHTBRACKET = 5,\n SPACE = 6,\n UNDEROVER = 7,\n DEFINITION = 8,\n LEFTRIGHT = 9,\n TEXT = 10; // token types\n\nvar AMsqrt = { input: 'sqrt', tag: 'msqrt', output: 'sqrt', tex: null, ttype: UNARY },\n AMroot = { input: 'root', tag: 'mroot', output: 'root', tex: null, ttype: BINARY },\n AMfrac = { input: 'frac', tag: 'mfrac', output: '/', tex: null, ttype: BINARY },\n AMdiv = { input: '/', tag: 'mfrac', output: '/', tex: null, ttype: INFIX },\n AMover = { input: 'stackrel', tag: 'mover', output: 'stackrel', tex: null, ttype: BINARY },\n AMsub = { input: '_', tag: 'msub', output: '_', tex: null, ttype: INFIX },\n AMsup = { input: '^', tag: 'msup', output: '^', tex: null, ttype: INFIX },\n AMtext = { input: 'text', tag: 'mtext', output: 'text', tex: null, ttype: TEXT },\n AMmbox = { input: 'mbox', tag: 'mtext', output: 'mbox', tex: null, ttype: TEXT },\n AMquote = { input: '\"', tag: 'mtext', output: 'mbox', tex: null, ttype: TEXT };\n\nvar AMsymbols = [\n //some greek symbols\n { input: 'alpha', tag: 'mi', output: '\\u03B1', tex: null, ttype: CONST },\n { input: 'beta', tag: 'mi', output: '\\u03B2', tex: null, ttype: CONST },\n { input: 'chi', tag: 'mi', output: '\\u03C7', tex: null, ttype: CONST },\n { input: 'delta', tag: 'mi', output: '\\u03B4', tex: null, ttype: CONST },\n { input: 'Delta', tag: 'mo', output: '\\u0394', tex: null, ttype: CONST },\n { input: 'epsi', tag: 'mi', output: '\\u03B5', tex: 'epsilon', ttype: CONST },\n { input: 'varepsilon', tag: 'mi', output: '\\u025B', tex: null, ttype: CONST },\n { input: 'eta', tag: 'mi', output: '\\u03B7', tex: null, ttype: CONST },\n { input: 'gamma', tag: 'mi', output: '\\u03B3', tex: null, ttype: CONST },\n { input: 'Gamma', tag: 'mo', output: '\\u0393', tex: null, ttype: CONST },\n { input: 'iota', tag: 'mi', output: '\\u03B9', tex: null, ttype: CONST },\n { input: 'kappa', tag: 'mi', output: '\\u03BA', tex: null, ttype: CONST },\n { input: 'lambda', tag: 'mi', output: '\\u03BB', tex: null, ttype: CONST },\n { input: 'Lambda', tag: 'mo', output: '\\u039B', tex: null, ttype: CONST },\n { input: 'lamda', tag: 'mi', output: 'lambda', tex: null, ttype: DEFINITION },\n { input: 'Lamda', tag: 'mi', output: 'Lambda', tex: null, ttype: DEFINITION },\n { input: 'mu', tag: 'mi', output: '\\u03BC', tex: null, ttype: CONST },\n { input: 'nu', tag: 'mi', output: '\\u03BD', tex: null, ttype: CONST },\n { input: 'omega', tag: 'mi', output: '\\u03C9', tex: null, ttype: CONST },\n { input: 'Omega', tag: 'mo', output: '\\u03A9', tex: null, ttype: CONST },\n { input: 'phi', tag: 'mi', output: '\\u03C6', tex: null, ttype: CONST },\n { input: 'varphi', tag: 'mi', output: '\\u03D5', tex: null, ttype: CONST },\n { input: 'Phi', tag: 'mo', output: '\\u03A6', tex: null, ttype: CONST },\n { input: 'pi', tag: 'mi', output: '\\u03C0', tex: null, ttype: CONST },\n { input: 'Pi', tag: 'mo', output: '\\u03A0', tex: null, ttype: CONST },\n { input: 'psi', tag: 'mi', output: '\\u03C8', tex: null, ttype: CONST },\n { input: 'Psi', tag: 'mi', output: '\\u03A8', tex: null, ttype: CONST },\n { input: 'rho', tag: 'mi', output: '\\u03C1', tex: null, ttype: CONST },\n { input: 'sigma', tag: 'mi', output: '\\u03C3', tex: null, ttype: CONST },\n { input: 'Sigma', tag: 'mo', output: '\\u03A3', tex: null, ttype: CONST },\n { input: 'tau', tag: 'mi', output: '\\u03C4', tex: null, ttype: CONST },\n { input: 'theta', tag: 'mi', output: '\\u03B8', tex: null, ttype: CONST },\n { input: 'vartheta', tag: 'mi', output: '\\u03D1', tex: null, ttype: CONST },\n { input: 'Theta', tag: 'mo', output: '\\u0398', tex: null, ttype: CONST },\n { input: 'upsilon', tag: 'mi', output: '\\u03C5', tex: null, ttype: CONST },\n { input: 'xi', tag: 'mi', output: '\\u03BE', tex: null, ttype: CONST },\n { input: 'Xi', tag: 'mo', output: '\\u039E', tex: null, ttype: CONST },\n { input: 'zeta', tag: 'mi', output: '\\u03B6', tex: null, ttype: CONST },\n\n //binary operation symbols\n { input: '*', tag: 'mo', output: '\\u22C5', tex: 'cdot', ttype: CONST },\n { input: '**', tag: 'mo', output: '\\u2217', tex: 'ast', ttype: CONST },\n { input: '***', tag: 'mo', output: '\\u22C6', tex: 'star', ttype: CONST },\n { input: '//', tag: 'mo', output: '/', tex: '/', ttype: CONST, val: true, notexcopy: true },\n { input: '\\\\\\\\', tag: 'mo', output: '\\\\', tex: 'backslash', ttype: CONST },\n { input: 'setminus', tag: 'mo', output: '\\\\', tex: null, ttype: CONST },\n { input: 'xx', tag: 'mo', output: '\\u00D7', tex: 'times', ttype: CONST },\n { input: '|><', tag: 'mo', output: '\\u22C9', tex: 'ltimes', ttype: CONST },\n { input: '><|', tag: 'mo', output: '\\u22CA', tex: 'rtimes', ttype: CONST },\n { input: '|><|', tag: 'mo', output: '\\u22C8', tex: 'bowtie', ttype: CONST },\n { input: '-:', tag: 'mo', output: '\\u00F7', tex: 'div', ttype: CONST },\n { input: 'divide', tag: 'mo', output: '-:', tex: null, ttype: DEFINITION },\n { input: '@', tag: 'mo', output: '\\u2218', tex: 'circ', ttype: CONST },\n { input: 'o+', tag: 'mo', output: '\\u2295', tex: 'oplus', ttype: CONST },\n { input: 'ox', tag: 'mo', output: '\\u2297', tex: 'otimes', ttype: CONST },\n { input: 'o.', tag: 'mo', output: '\\u2299', tex: 'odot', ttype: CONST },\n { input: 'sum', tag: 'mo', output: '\\u2211', tex: null, ttype: UNDEROVER },\n { input: 'prod', tag: 'mo', output: '\\u220F', tex: null, ttype: UNDEROVER },\n { input: '^^', tag: 'mo', output: '\\u2227', tex: 'wedge', ttype: CONST },\n { input: '^^^', tag: 'mo', output: '\\u22C0', tex: 'bigwedge', ttype: UNDEROVER },\n { input: 'vv', tag: 'mo', output: '\\u2228', tex: 'vee', ttype: CONST },\n { input: 'vvv', tag: 'mo', output: '\\u22C1', tex: 'bigvee', ttype: UNDEROVER },\n { input: 'nn', tag: 'mo', output: '\\u2229', tex: 'cap', ttype: CONST },\n { input: 'nnn', tag: 'mo', output: '\\u22C2', tex: 'bigcap', ttype: UNDEROVER },\n { input: 'uu', tag: 'mo', output: '\\u222A', tex: 'cup', ttype: CONST },\n { input: 'uuu', tag: 'mo', output: '\\u22C3', tex: 'bigcup', ttype: UNDEROVER },\n { input: 'overset', tag: 'mover', output: 'stackrel', tex: null, ttype: BINARY },\n { input: 'underset', tag: 'munder', output: 'stackrel', tex: null, ttype: BINARY },\n\n //binary relation symbols\n { input: '!=', tag: 'mo', output: '\\u2260', tex: 'ne', ttype: CONST },\n { input: ':=', tag: 'mo', output: ':=', tex: null, ttype: CONST },\n { input: 'lt', tag: 'mo', output: '<', tex: null, ttype: CONST },\n { input: 'gt', tag: 'mo', output: '>', tex: null, ttype: CONST },\n { input: '<=', tag: 'mo', output: '\\u2264', tex: 'le', ttype: CONST },\n { input: 'lt=', tag: 'mo', output: '\\u2264', tex: 'leq', ttype: CONST },\n { input: 'gt=', tag: 'mo', output: '\\u2265', tex: 'geq', ttype: CONST },\n { input: '>=', tag: 'mo', output: '\\u2265', tex: 'ge', ttype: CONST },\n { input: '-<', tag: 'mo', output: '\\u227A', tex: 'prec', ttype: CONST },\n { input: '-lt', tag: 'mo', output: '\\u227A', tex: null, ttype: CONST },\n { input: '>-', tag: 'mo', output: '\\u227B', tex: 'succ', ttype: CONST },\n { input: '-<=', tag: 'mo', output: '\\u2AAF', tex: 'preceq', ttype: CONST },\n { input: '>-=', tag: 'mo', output: '\\u2AB0', tex: 'succeq', ttype: CONST },\n { input: 'in', tag: 'mo', output: '\\u2208', tex: null, ttype: CONST },\n { input: '!in', tag: 'mo', output: '\\u2209', tex: 'notin', ttype: CONST },\n { input: 'sub', tag: 'mo', output: '\\u2282', tex: 'subset', ttype: CONST },\n { input: 'sup', tag: 'mo', output: '\\u2283', tex: 'supset', ttype: CONST },\n { input: 'sube', tag: 'mo', output: '\\u2286', tex: 'subseteq', ttype: CONST },\n { input: 'supe', tag: 'mo', output: '\\u2287', tex: 'supseteq', ttype: CONST },\n { input: '-=', tag: 'mo', output: '\\u2261', tex: 'equiv', ttype: CONST },\n { input: '~=', tag: 'mo', output: '\\u2245', tex: 'stackrel{\\\\sim}{=}', notexcopy: true, ttype: CONST }, //back hack b/c mimetex doesn't support /cong\n { input: 'cong', tag: 'mo', output: '~=', tex: null, ttype: DEFINITION },\n { input: '~~', tag: 'mo', output: '\\u2248', tex: 'approx', ttype: CONST },\n { input: 'prop', tag: 'mo', output: '\\u221D', tex: 'propto', ttype: CONST },\n\n //logical symbols\n { input: 'and', tag: 'mtext', output: 'and', tex: null, ttype: SPACE },\n { input: 'or', tag: 'mtext', output: 'or', tex: null, ttype: SPACE },\n { input: 'not', tag: 'mo', output: '\\u00AC', tex: 'neg', ttype: CONST },\n { input: '=>', tag: 'mo', output: '\\u21D2', tex: 'Rightarrow', ttype: CONST },\n { input: 'implies', tag: 'mo', output: '=>', tex: null, ttype: DEFINITION },\n { input: 'if', tag: 'mo', output: 'if', tex: null, ttype: SPACE },\n { input: '<=>', tag: 'mo', output: '\\u21D4', tex: 'Leftrightarrow', ttype: CONST },\n { input: 'iff', tag: 'mo', output: '<=>', tex: null, ttype: DEFINITION },\n { input: 'AA', tag: 'mo', output: '\\u2200', tex: 'forall', ttype: CONST },\n { input: 'EE', tag: 'mo', output: '\\u2203', tex: 'exists', ttype: CONST },\n { input: '_|_', tag: 'mo', output: '\\u22A5', tex: 'bot', ttype: CONST },\n { input: 'TT', tag: 'mo', output: '\\u22A4', tex: 'top', ttype: CONST },\n { input: '|--', tag: 'mo', output: '\\u22A2', tex: 'vdash', ttype: CONST },\n { input: '|==', tag: 'mo', output: '\\u22A8', tex: 'models', ttype: CONST }, //mimetex doesn't support\n\n //grouping brackets\n { input: '(', tag: 'mo', output: '(', tex: null, ttype: LEFTBRACKET, val: true },\n { input: ')', tag: 'mo', output: ')', tex: null, ttype: RIGHTBRACKET, val: true },\n { input: '[', tag: 'mo', output: '[', tex: null, ttype: LEFTBRACKET, val: true },\n { input: ']', tag: 'mo', output: ']', tex: null, ttype: RIGHTBRACKET, val: true },\n { input: 'left(', tag: 'mo', output: '(', tex: '(', notexcopy: true, ttype: LEFTBRACKET, val: true },\n { input: 'right)', tag: 'mo', output: ')', tex: ')', notexcopy: true, ttype: RIGHTBRACKET, val: true },\n { input: 'left[', tag: 'mo', output: '[', tex: '[', notexcopy: true, ttype: LEFTBRACKET, val: true },\n { input: 'right]', tag: 'mo', output: ']', tex: ']', notexcopy: true, ttype: RIGHTBRACKET, val: true },\n { input: '{', tag: 'mo', output: '{', tex: 'lbrace', ttype: LEFTBRACKET },\n { input: '}', tag: 'mo', output: '}', tex: 'rbrace', ttype: RIGHTBRACKET },\n { input: '|', tag: 'mo', output: '|', tex: null, ttype: LEFTRIGHT, val: true },\n { input: '|:', tag: 'mo', output: '|', tex: '|', ttype: LEFTBRACKET, notexcopy: true, val: true },\n { input: ':|', tag: 'mo', output: '|', tex: '|', ttype: RIGHTBRACKET, notexcopy: true, val: true },\n { input: ':|:', tag: 'mo', output: '|', tex: '|', ttype: CONST, notexcopy: true, val: true },\n //{input:\"||\", tag:\"mo\", output:\"||\", tex:null, ttype:LEFTRIGHT},\n { input: '(:', tag: 'mo', output: '\\u2329', tex: 'langle', ttype: LEFTBRACKET },\n { input: ':)', tag: 'mo', output: '\\u232A', tex: 'rangle', ttype: RIGHTBRACKET },\n { input: '<<', tag: 'mo', output: '\\u2329', tex: 'langle', ttype: LEFTBRACKET },\n { input: '>>', tag: 'mo', output: '\\u232A', tex: 'rangle', ttype: RIGHTBRACKET },\n { input: '{:', tag: 'mo', output: '{:', tex: null, ttype: LEFTBRACKET, invisible: true },\n { input: ':}', tag: 'mo', output: ':}', tex: null, ttype: RIGHTBRACKET, invisible: true },\n\n //miscellaneous symbols\n { input: 'int', tag: 'mo', output: '\\u222B', tex: null, ttype: CONST },\n { input: 'dx', tag: 'mi', output: '{:d x:}', tex: null, ttype: DEFINITION },\n { input: 'dy', tag: 'mi', output: '{:d y:}', tex: null, ttype: DEFINITION },\n { input: 'dz', tag: 'mi', output: '{:d z:}', tex: null, ttype: DEFINITION },\n { input: 'dt', tag: 'mi', output: '{:d t:}', tex: null, ttype: DEFINITION },\n { input: 'oint', tag: 'mo', output: '\\u222E', tex: null, ttype: CONST },\n { input: 'del', tag: 'mo', output: '\\u2202', tex: 'partial', ttype: CONST },\n { input: 'grad', tag: 'mo', output: '\\u2207', tex: 'nabla', ttype: CONST },\n { input: '+-', tag: 'mo', output: '\\u00B1', tex: 'pm', ttype: CONST },\n { input: 'O/', tag: 'mo', output: '\\u2205', tex: 'emptyset', ttype: CONST },\n { input: 'oo', tag: 'mo', output: '\\u221E', tex: 'infty', ttype: CONST },\n { input: 'aleph', tag: 'mo', output: '\\u2135', tex: null, ttype: CONST },\n { input: '...', tag: 'mo', output: '...', tex: 'ldots', ttype: CONST },\n { input: ':.', tag: 'mo', output: '\\u2234', tex: 'therefore', ttype: CONST },\n { input: \":'\", tag: 'mo', output: '\\u2235', tex: 'because', ttype: CONST },\n { input: '/_', tag: 'mo', output: '\\u2220', tex: 'angle', ttype: CONST },\n { input: '/_\\\\', tag: 'mo', output: '\\u25B3', tex: 'triangle', ttype: CONST },\n { input: '\\\\ ', tag: 'mo', output: '\\u00A0', tex: null, ttype: CONST, val: true },\n { input: 'frown', tag: 'mo', output: '\\u2322', tex: null, ttype: CONST },\n { input: '%', tag: 'mo', output: '%', tex: '%', ttype: CONST, notexcopy: true },\n { input: 'quad', tag: 'mo', output: '\\u00A0\\u00A0', tex: null, ttype: CONST },\n { input: 'qquad', tag: 'mo', output: '\\u00A0\\u00A0\\u00A0\\u00A0', tex: null, ttype: CONST },\n { input: 'cdots', tag: 'mo', output: '\\u22EF', tex: null, ttype: CONST },\n { input: 'vdots', tag: 'mo', output: '\\u22EE', tex: null, ttype: CONST },\n { input: 'ddots', tag: 'mo', output: '\\u22F1', tex: null, ttype: CONST },\n { input: 'diamond', tag: 'mo', output: '\\u22C4', tex: null, ttype: CONST },\n { input: 'square', tag: 'mo', output: '\\u25A1', tex: 'boxempty', ttype: CONST },\n { input: '|__', tag: 'mo', output: '\\u230A', tex: 'lfloor', ttype: CONST },\n { input: '__|', tag: 'mo', output: '\\u230B', tex: 'rfloor', ttype: CONST },\n { input: '|~', tag: 'mo', output: '\\u2308', tex: 'lceil', ttype: CONST },\n { input: 'lceiling', tag: 'mo', output: '|~', tex: null, ttype: DEFINITION },\n { input: '~|', tag: 'mo', output: '\\u2309', tex: 'rceil', ttype: CONST },\n { input: 'rceiling', tag: 'mo', output: '~|', tex: null, ttype: DEFINITION },\n { input: 'CC', tag: 'mo', output: '\\u2102', tex: 'mathbb{C}', ttype: CONST, notexcopy: true },\n { input: 'NN', tag: 'mo', output: '\\u2115', tex: 'mathbb{N}', ttype: CONST, notexcopy: true },\n { input: 'QQ', tag: 'mo', output: '\\u211A', tex: 'mathbb{Q}', ttype: CONST, notexcopy: true },\n { input: 'RR', tag: 'mo', output: '\\u211D', tex: 'mathbb{R}', ttype: CONST, notexcopy: true },\n { input: 'ZZ', tag: 'mo', output: '\\u2124', tex: 'mathbb{Z}', ttype: CONST, notexcopy: true },\n { input: 'f', tag: 'mi', output: 'f', tex: null, ttype: UNARY, func: true, val: true },\n { input: 'g', tag: 'mi', output: 'g', tex: null, ttype: UNARY, func: true, val: true },\n { input: \"''\", tag: 'mo', output: \"''\", tex: null, val: true },\n { input: \"'''\", tag: 'mo', output: \"'''\", tex: null, val: true },\n { input: \"''''\", tag: 'mo', output: \"''''\", tex: null, val: true },\n\n //standard functions\n { input: 'lim', tag: 'mo', output: 'lim', tex: null, ttype: UNDEROVER },\n { input: 'Lim', tag: 'mo', output: 'Lim', tex: null, ttype: UNDEROVER },\n { input: 'sin', tag: 'mo', output: 'sin', tex: null, ttype: UNARY, func: true },\n { input: 'cos', tag: 'mo', output: 'cos', tex: null, ttype: UNARY, func: true },\n { input: 'tan', tag: 'mo', output: 'tan', tex: null, ttype: UNARY, func: true },\n { input: 'arcsin', tag: 'mo', output: 'arcsin', tex: null, ttype: UNARY, func: true },\n { input: 'arccos', tag: 'mo', output: 'arccos', tex: null, ttype: UNARY, func: true },\n { input: 'arctan', tag: 'mo', output: 'arctan', tex: null, ttype: UNARY, func: true },\n { input: 'sinh', tag: 'mo', output: 'sinh', tex: null, ttype: UNARY, func: true },\n { input: 'cosh', tag: 'mo', output: 'cosh', tex: null, ttype: UNARY, func: true },\n { input: 'tanh', tag: 'mo', output: 'tanh', tex: null, ttype: UNARY, func: true },\n { input: 'cot', tag: 'mo', output: 'cot', tex: null, ttype: UNARY, func: true },\n { input: 'coth', tag: 'mo', output: 'coth', tex: null, ttype: UNARY, func: true },\n { input: 'sech', tag: 'mo', output: 'sech', tex: null, ttype: UNARY, func: true },\n { input: 'csch', tag: 'mo', output: 'csch', tex: null, ttype: UNARY, func: true },\n { input: 'sec', tag: 'mo', output: 'sec', tex: null, ttype: UNARY, func: true },\n { input: 'csc', tag: 'mo', output: 'csc', tex: null, ttype: UNARY, func: true },\n { input: 'log', tag: 'mo', output: 'log', tex: null, ttype: UNARY, func: true },\n { input: 'ln', tag: 'mo', output: 'ln', tex: null, ttype: UNARY, func: true },\n { input: 'abs', tag: 'mo', output: 'abs', tex: null, ttype: UNARY, notexcopy: true, rewriteleftright: ['|', '|'] },\n {\n input: 'norm',\n tag: 'mo',\n output: 'norm',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\|', '\\\\|']\n },\n {\n input: 'floor',\n tag: 'mo',\n output: 'floor',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\lfloor', '\\\\rfloor']\n },\n {\n input: 'ceil',\n tag: 'mo',\n output: 'ceil',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\lceil', '\\\\rceil']\n },\n { input: 'Sin', tag: 'mo', output: 'Sin', tex: null, ttype: UNARY, func: true },\n { input: 'Cos', tag: 'mo', output: 'Cos', tex: null, ttype: UNARY, func: true },\n { input: 'Tan', tag: 'mo', output: 'Tan', tex: null, ttype: UNARY, func: true },\n { input: 'Arcsin', tag: 'mo', output: 'Arcsin', tex: null, ttype: UNARY, func: true },\n { input: 'Arccos', tag: 'mo', output: 'Arccos', tex: null, ttype: UNARY, func: true },\n { input: 'Arctan', tag: 'mo', output: 'Arctan', tex: null, ttype: UNARY, func: true },\n { input: 'Sinh', tag: 'mo', output: 'Sinh', tex: null, ttype: UNARY, func: true },\n { input: 'Cosh', tag: 'mo', output: 'Cosh', tex: null, ttype: UNARY, func: true },\n { input: 'Tanh', tag: 'mo', output: 'Tanh', tex: null, ttype: UNARY, func: true },\n { input: 'Cot', tag: 'mo', output: 'Cot', tex: null, ttype: UNARY, func: true },\n { input: 'Sec', tag: 'mo', output: 'Sec', tex: null, ttype: UNARY, func: true },\n { input: 'Csc', tag: 'mo', output: 'Csc', tex: null, ttype: UNARY, func: true },\n { input: 'Log', tag: 'mo', output: 'Log', tex: null, ttype: UNARY, func: true },\n { input: 'Ln', tag: 'mo', output: 'Ln', tex: null, ttype: UNARY, func: true },\n { input: 'Abs', tag: 'mo', output: 'abs', tex: null, ttype: UNARY, notexcopy: true, rewriteleftright: ['|', '|'] },\n\n { input: 'det', tag: 'mo', output: 'det', tex: null, ttype: UNARY, func: true },\n { input: 'exp', tag: 'mo', output: 'exp', tex: null, ttype: UNARY, func: true },\n { input: 'dim', tag: 'mo', output: 'dim', tex: null, ttype: CONST },\n { input: 'mod', tag: 'mo', output: 'mod', tex: 'text{mod}', ttype: CONST, notexcopy: true },\n { input: 'gcd', tag: 'mo', output: 'gcd', tex: null, ttype: UNARY, func: true },\n { input: 'lcm', tag: 'mo', output: 'lcm', tex: 'text{lcm}', ttype: UNARY, func: true, notexcopy: true },\n { input: 'lub', tag: 'mo', output: 'lub', tex: null, ttype: CONST },\n { input: 'glb', tag: 'mo', output: 'glb', tex: null, ttype: CONST },\n { input: 'min', tag: 'mo', output: 'min', tex: null, ttype: UNDEROVER },\n { input: 'max', tag: 'mo', output: 'max', tex: null, ttype: UNDEROVER },\n\n //arrows\n { input: 'uarr', tag: 'mo', output: '\\u2191', tex: 'uparrow', ttype: CONST },\n { input: 'darr', tag: 'mo', output: '\\u2193', tex: 'downarrow', ttype: CONST },\n { input: 'rarr', tag: 'mo', output: '\\u2192', tex: 'rightarrow', ttype: CONST },\n { input: '->', tag: 'mo', output: '\\u2192', tex: 'to', ttype: CONST },\n { input: '>->', tag: 'mo', output: '\\u21A3', tex: 'rightarrowtail', ttype: CONST },\n { input: '->>', tag: 'mo', output: '\\u21A0', tex: 'twoheadrightarrow', ttype: CONST },\n { input: '>->>', tag: 'mo', output: '\\u2916', tex: 'twoheadrightarrowtail', ttype: CONST },\n { input: '|->', tag: 'mo', output: '\\u21A6', tex: 'mapsto', ttype: CONST },\n { input: 'larr', tag: 'mo', output: '\\u2190', tex: 'leftarrow', ttype: CONST },\n { input: 'harr', tag: 'mo', output: '\\u2194', tex: 'leftrightarrow', ttype: CONST },\n { input: 'rArr', tag: 'mo', output: '\\u21D2', tex: 'Rightarrow', ttype: CONST },\n { input: 'lArr', tag: 'mo', output: '\\u21D0', tex: 'Leftarrow', ttype: CONST },\n { input: 'hArr', tag: 'mo', output: '\\u21D4', tex: 'Leftrightarrow', ttype: CONST },\n\n //commands with argument\n AMsqrt,\n AMroot,\n AMfrac,\n AMdiv,\n AMover,\n AMsub,\n AMsup,\n { input: 'cancel', tag: 'menclose', output: 'cancel', tex: null, ttype: UNARY },\n { input: 'Sqrt', tag: 'msqrt', output: 'sqrt', tex: null, ttype: UNARY },\n { input: 'hat', tag: 'mover', output: '\\u005E', tex: null, ttype: UNARY, acc: true },\n { input: 'bar', tag: 'mover', output: '\\u00AF', tex: 'overline', ttype: UNARY, acc: true },\n { input: 'vec', tag: 'mover', output: '\\u2192', tex: null, ttype: UNARY, acc: true },\n { input: 'tilde', tag: 'mover', output: '~', tex: null, ttype: UNARY, acc: true },\n { input: 'dot', tag: 'mover', output: '.', tex: null, ttype: UNARY, acc: true },\n { input: 'ddot', tag: 'mover', output: '..', tex: null, ttype: UNARY, acc: true },\n {\n input: 'overarc',\n tag: 'mover',\n output: '\\u23DC',\n tex: 'stackrel{\\\\frown}',\n notexcopy: true,\n ttype: UNARY,\n acc: true\n },\n {\n input: 'overparen',\n tag: 'mover',\n output: '\\u23DC',\n tex: 'stackrel{\\\\frown}',\n notexcopy: true,\n ttype: UNARY,\n acc: true\n },\n { input: 'ul', tag: 'munder', output: '\\u0332', tex: 'underline', ttype: UNARY, acc: true },\n { input: 'ubrace', tag: 'munder', output: '\\u23DF', tex: 'underbrace', ttype: UNARY, acc: true },\n { input: 'obrace', tag: 'mover', output: '\\u23DE', tex: 'overbrace', ttype: UNARY, acc: true },\n AMtext,\n AMmbox,\n AMquote,\n //{input:\"var\", tag:\"mstyle\", atname:\"fontstyle\", atval:\"italic\", output:\"var\", tex:null, ttype:UNARY},\n { input: 'color', tag: 'mstyle', ttype: BINARY },\n {\n input: 'bb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'bold',\n output: 'bb',\n tex: 'mathbf',\n ttype: UNARY,\n notexcopy: true\n },\n { input: 'mathbf', tag: 'mstyle', atname: 'mathvariant', atval: 'bold', output: 'mathbf', tex: null, ttype: UNARY },\n {\n input: 'sf',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'sans-serif',\n output: 'sf',\n tex: 'mathsf',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathsf',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'sans-serif',\n output: 'mathsf',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'bbb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'double-struck',\n output: 'bbb',\n tex: 'mathbb',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathbb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'double-struck',\n output: 'mathbb',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'cc',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'script',\n output: 'cc',\n tex: 'mathcal',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathcal',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'script',\n output: 'mathcal',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'tt',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'monospace',\n output: 'tt',\n tex: 'mathtt',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathtt',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'monospace',\n output: 'mathtt',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'fr',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'fraktur',\n output: 'fr',\n tex: 'mathfrak',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathfrak',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'fraktur',\n output: 'mathfrak',\n tex: null,\n ttype: UNARY\n }\n];\n\nfunction compareNames(s1, s2) {\n if (s1.input > s2.input) return 1;\n else return -1;\n}\n\nvar AMnames = []; //list of input symbols\n\nfunction AMinitSymbols() {\n var i;\n var symlen = AMsymbols.length;\n for (i = 0; i < symlen; i++) {\n if (AMsymbols[i].tex && !(typeof AMsymbols[i].notexcopy == 'boolean' && AMsymbols[i].notexcopy)) {\n AMsymbols.push({\n input: AMsymbols[i].tex,\n tag: AMsymbols[i].tag,\n output: AMsymbols[i].output,\n ttype: AMsymbols[i].ttype,\n acc: AMsymbols[i].acc || false\n });\n }\n }\n refreshSymbols();\n}\n\nfunction refreshSymbols() {\n var i;\n AMsymbols.sort(compareNames);\n for (i = 0; i < AMsymbols.length; i++) AMnames[i] = AMsymbols[i].input;\n}\n\nfunction AMremoveCharsAndBlanks(str, n) {\n //remove n characters and any following blanks\n var st;\n if (str.charAt(n) == '\\\\' && str.charAt(n + 1) != '\\\\' && str.charAt(n + 1) != ' ') st = str.slice(n + 1);\n else st = str.slice(n);\n for (var i = 0; i < st.length && st.charCodeAt(i) <= 32; i = i + 1);\n return st.slice(i);\n}\n\nfunction AMposition(arr, str, n) {\n // return position >=n where str appears or would be inserted\n // assumes arr is sorted\n if (n == 0) {\n var h, m;\n n = -1;\n h = arr.length;\n while (n + 1 < h) {\n m = (n + h) >> 1;\n if (arr[m] < str) n = m;\n else h = m;\n }\n return h;\n } else for (var i = n; i < arr.length && arr[i] < str; i++);\n return i; // i=arr.length || arr[i]>=str\n}\n\nfunction AMgetSymbol(str) {\n //return maximal initial substring of str that appears in names\n //return null if there is none\n var k = 0; //new pos\n var j = 0; //old pos\n var mk; //match pos\n var st;\n var tagst;\n var match = '';\n var more = true;\n for (var i = 1; i <= str.length && more; i++) {\n st = str.slice(0, i); //initial substring of length i\n j = k;\n k = AMposition(AMnames, st, j);\n if (k < AMnames.length && str.slice(0, AMnames[k].length) == AMnames[k]) {\n match = AMnames[k];\n mk = k;\n i = match.length;\n }\n more = k < AMnames.length && str.slice(0, AMnames[k].length) >= AMnames[k];\n }\n AMpreviousSymbol = AMcurrentSymbol;\n if (match != '') {\n AMcurrentSymbol = AMsymbols[mk].ttype;\n return AMsymbols[mk];\n }\n // if str[0] is a digit or - return maxsubstring of digits.digits\n AMcurrentSymbol = CONST;\n k = 1;\n st = str.slice(0, 1);\n var integ = true;\n\n while ('0' <= st && st <= '9' && k <= str.length) {\n st = str.slice(k, k + 1);\n k++;\n }\n if (st == config.decimalsign) {\n st = str.slice(k, k + 1);\n if ('0' <= st && st <= '9') {\n integ = false;\n k++;\n while ('0' <= st && st <= '9' && k <= str.length) {\n st = str.slice(k, k + 1);\n k++;\n }\n }\n }\n if ((integ && k > 1) || k > 2) {\n st = str.slice(0, k - 1);\n tagst = 'mn';\n } else {\n k = 2;\n st = str.slice(0, 1); //take 1 character\n tagst = ('A' > st || st > 'Z') && ('a' > st || st > 'z') ? 'mo' : 'mi';\n }\n if (st == '-' && AMpreviousSymbol == INFIX) {\n AMcurrentSymbol = INFIX;\n return { input: st, tag: tagst, output: st, ttype: UNARY, func: true, val: true };\n }\n return { input: st, tag: tagst, output: st, ttype: CONST, val: true }; //added val bit\n}\n\nfunction AMTremoveBrackets(node) {\n var st;\n if (node.charAt(0) == '{' && node.charAt(node.length - 1) == '}') {\n var leftchop = 0;\n\n st = node.substr(1, 5);\n if (st == '\\\\left') {\n st = node.charAt(6);\n if (st == '(' || st == '[' || st == '{') {\n leftchop = 7;\n } else {\n st = node.substr(6, 7);\n if (st == '\\\\lbrace') {\n leftchop = 13;\n }\n }\n } else {\n st = node.charAt(1);\n if (st == '(' || st == '[') {\n leftchop = 2;\n }\n }\n if (leftchop > 0) {\n //st = node.charAt(node.length-7);\n st = node.substr(node.length - 8);\n if (st == '\\\\right)}' || st == '\\\\right]}' || st == '\\\\right.}') {\n node = '{' + node.substr(leftchop);\n node = node.substr(0, node.length - 8) + '}';\n } else if (st == '\\\\rbrace}') {\n node = '{' + node.substr(leftchop);\n node = node.substr(0, node.length - 14) + '}';\n }\n }\n }\n return node;\n}\n\n/*Parsing ASCII math expressions with the following grammar\nv ::= [A-Za-z] | greek letters | numbers | other constant symbols\nu ::= sqrt | text | bb | other unary symbols for font commands\nb ::= frac | root | stackrel binary symbols\nl ::= ( | [ | { | (: | {: left brackets\nr ::= ) | ] | } | :) | :} right brackets\nS ::= v | lEr | uS | bSS Simple expression\nI ::= S_S | S^S | S_S^S | S Intermediate expression\nE ::= IE | I/I Expression\nEach terminal symbol is translated into a corresponding mathml node.*/\n\nvar AMnestingDepth, AMpreviousSymbol, AMcurrentSymbol;\n\nfunction AMTgetTeXsymbol(symb) {\n var pre;\n if (typeof symb.val == 'boolean' && symb.val) {\n pre = '';\n } else {\n pre = '\\\\';\n }\n if (symb.tex == null) {\n //can't remember why this was here. Breaks /delta /Delta to removed\n //return (pre+(pre==''?symb.input:symb.input.toLowerCase()));\n return pre + symb.input;\n } else {\n return pre + symb.tex;\n }\n}\n\nfunction AMTparseSexpr(str) {\n //parses str and returns [node,tailstr]\n var symbol,\n node,\n result,\n i,\n st, // rightvert = false,\n newFrag = '';\n str = AMremoveCharsAndBlanks(str, 0);\n symbol = AMgetSymbol(str); //either a token or a bracket or empty\n if (symbol == null || (symbol.ttype == RIGHTBRACKET && AMnestingDepth > 0)) {\n return [null, str];\n }\n if (symbol.ttype == DEFINITION) {\n str = symbol.output + AMremoveCharsAndBlanks(str, symbol.input.length);\n symbol = AMgetSymbol(str);\n }\n switch (symbol.ttype) {\n case UNDEROVER:\n case CONST:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n var texsymbol = AMTgetTeXsymbol(symbol);\n if (texsymbol.charAt(0) == '\\\\' || symbol.tag == 'mo') return [texsymbol, str];\n else return ['{' + texsymbol + '}', str];\n\n case LEFTBRACKET: //read (expr+)\n AMnestingDepth++;\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n\n result = AMTparseExpr(str, true);\n AMnestingDepth--;\n var leftchop = 0;\n if (result[0].substr(0, 6) == '\\\\right') {\n st = result[0].charAt(6);\n if (st == ')' || st == ']' || st == '}') {\n leftchop = 6;\n } else if (st == '.') {\n leftchop = 7;\n } else {\n st = result[0].substr(6, 7);\n if (st == '\\\\rbrace') {\n leftchop = 13;\n }\n }\n }\n if (leftchop > 0) {\n result[0] = result[0].substr(leftchop);\n if (typeof symbol.invisible == 'boolean' && symbol.invisible) node = '{' + result[0] + '}';\n else {\n node = '{' + AMTgetTeXsymbol(symbol) + result[0] + '}';\n }\n } else {\n if (typeof symbol.invisible == 'boolean' && symbol.invisible) node = '{\\\\left.' + result[0] + '}';\n else {\n node = '{\\\\left' + AMTgetTeXsymbol(symbol) + result[0] + '}';\n }\n }\n return [node, result[1]];\n case TEXT:\n if (symbol != AMquote) str = AMremoveCharsAndBlanks(str, symbol.input.length);\n if (str.charAt(0) == '{') i = str.indexOf('}');\n else if (str.charAt(0) == '(') i = str.indexOf(')');\n else if (str.charAt(0) == '[') i = str.indexOf(']');\n else if (symbol == AMquote) i = str.slice(1).indexOf('\"') + 1;\n else i = 0;\n if (i == -1) i = str.length;\n st = str.slice(1, i);\n if (st.charAt(0) == ' ') {\n newFrag = '\\\\ ';\n }\n newFrag += '\\\\text{' + st + '}';\n if (st.charAt(st.length - 1) == ' ') {\n newFrag += '\\\\ ';\n }\n str = AMremoveCharsAndBlanks(str, i + 1);\n return [newFrag, str];\n case UNARY:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseSexpr(str);\n if (result[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n if (typeof symbol.func == 'boolean' && symbol.func) {\n // functions hack\n st = str.charAt(0);\n if (\n st == '^' ||\n st == '_' ||\n st == '/' ||\n st == '|' ||\n st == ',' ||\n (symbol.input.length == 1 && symbol.input.match(/\\w/) && st != '(')\n ) {\n return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n } else {\n node = '{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}}';\n return [node, result[1]];\n }\n }\n result[0] = AMTremoveBrackets(result[0]);\n if (symbol.input == 'sqrt') {\n // sqrt\n return ['\\\\sqrt{' + result[0] + '}', result[1]];\n } else if (symbol.input == 'cancel') {\n // cancel\n return ['\\\\cancel{' + result[0] + '}', result[1]];\n } else if (typeof symbol.rewriteleftright != 'undefined') {\n // abs, floor, ceil\n return [\n '{\\\\left' + symbol.rewriteleftright[0] + result[0] + '\\\\right' + symbol.rewriteleftright[1] + '}',\n result[1]\n ];\n } else if (typeof symbol.acc == 'boolean' && symbol.acc) {\n // accent\n //return ['{'+AMTgetTeXsymbol(symbol)+'{'+result[0]+'}}',result[1]];\n return [AMTgetTeXsymbol(symbol) + '{' + result[0] + '}', result[1]];\n } else {\n // font change command\n return ['{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}}', result[1]];\n }\n case BINARY:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseSexpr(str);\n if (result[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n result[0] = AMTremoveBrackets(result[0]);\n var result2 = AMTparseSexpr(result[1]);\n if (result2[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n result2[0] = AMTremoveBrackets(result2[0]);\n if (symbol.input == 'color') {\n newFrag = '{\\\\color{' + result[0].replace(/[\\{\\}]/g, '') + '}' + result2[0] + '}';\n } else if (symbol.input == 'root') {\n newFrag = '{\\\\sqrt[' + result[0] + ']{' + result2[0] + '}}';\n } else {\n newFrag = '{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}{' + result2[0] + '}}';\n }\n return [newFrag, result2[1]];\n case INFIX:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return [symbol.output, str];\n case SPACE:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return ['{\\\\quad\\\\text{' + symbol.input + '}\\\\quad}', str];\n case LEFTRIGHT:\n // if (rightvert) return [null,str]; else rightvert = true;\n AMnestingDepth++;\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseExpr(str, false);\n AMnestingDepth--;\n var st = '';\n st = result[0].charAt(result[0].length - 1);\n //alert(result[0].lastChild+\"***\"+st);\n if (st == '|' && str.charAt(0) !== ',') {\n // its an absolute value subterm\n node = '{\\\\left|' + result[0] + '}';\n return [node, result[1]];\n } else {\n // the \"|\" is a \\mid\n node = '{\\\\mid}';\n return [node, str];\n }\n\n default:\n //alert(\"default\");\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n }\n}\n\nfunction AMTparseIexpr(str) {\n var symbol, sym1, sym2, node, result;\n str = AMremoveCharsAndBlanks(str, 0);\n sym1 = AMgetSymbol(str);\n result = AMTparseSexpr(str);\n node = result[0];\n str = result[1];\n symbol = AMgetSymbol(str);\n if (symbol.ttype == INFIX && symbol.input != '/') {\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n // if (symbol.input == \"/\") result = AMTparseIexpr(str); else\n result = AMTparseSexpr(str);\n if (result[0] == null)\n // show box in place of missing argument\n result[0] = '{}';\n else result[0] = AMTremoveBrackets(result[0]);\n str = result[1];\n // if (symbol.input == \"/\") AMTremoveBrackets(node);\n if (symbol.input == '_') {\n sym2 = AMgetSymbol(str);\n if (sym2.input == '^') {\n str = AMremoveCharsAndBlanks(str, sym2.input.length);\n var res2 = AMTparseSexpr(str);\n res2[0] = AMTremoveBrackets(res2[0]);\n str = res2[1];\n node = '{' + node;\n node += '_{' + result[0] + '}';\n node += '^{' + res2[0] + '}';\n node += '}';\n } else {\n node += '_{' + result[0] + '}';\n }\n } else {\n //must be ^\n //node = '{'+node+'}^{'+result[0]+'}';\n node = node + '^{' + result[0] + '}';\n }\n if (typeof sym1.func != 'undefined' && sym1.func) {\n sym2 = AMgetSymbol(str);\n if (sym2.ttype != INFIX && sym2.ttype != RIGHTBRACKET && (sym1.input.length > 1 || sym2.ttype == LEFTBRACKET)) {\n result = AMTparseIexpr(str);\n node = '{' + node + result[0] + '}';\n str = result[1];\n }\n }\n }\n\n return [node, str];\n}\n\nfunction AMTparseExpr(str, rightbracket) {\n var symbol,\n node,\n result,\n i,\n nodeList = [],\n newFrag = '';\n var addedright = false;\n do {\n str = AMremoveCharsAndBlanks(str, 0);\n result = AMTparseIexpr(str);\n node = result[0];\n str = result[1];\n symbol = AMgetSymbol(str);\n if (symbol.ttype == INFIX && symbol.input == '/') {\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseIexpr(str);\n\n if (result[0] == null)\n // show box in place of missing argument\n result[0] = '{}';\n else result[0] = AMTremoveBrackets(result[0]);\n str = result[1];\n node = AMTremoveBrackets(node);\n node = '\\\\frac' + '{' + node + '}';\n node += '{' + result[0] + '}';\n newFrag += node;\n symbol = AMgetSymbol(str);\n } else if (node != undefined) newFrag += node;\n } while (\n ((symbol.ttype != RIGHTBRACKET && (symbol.ttype != LEFTRIGHT || rightbracket)) || AMnestingDepth == 0) &&\n symbol != null &&\n symbol.output != ''\n );\n if (symbol.ttype == RIGHTBRACKET || symbol.ttype == LEFTRIGHT) {\n // if (AMnestingDepth > 0) AMnestingDepth--;\n var len = newFrag.length;\n if (len > 2 && newFrag.charAt(0) == '{' && newFrag.indexOf(',') > 0) {\n //could be matrix (total rewrite from .js)\n var right = newFrag.charAt(len - 2);\n if (right == ')' || right == ']') {\n var left = newFrag.charAt(6);\n if ((left == '(' && right == ')' && symbol.output != '}') || (left == '[' && right == ']')) {\n var mxout = '';\n var pos = new Array(); //position of commas\n pos.push(0);\n var matrix = true;\n var mxnestingd = 0;\n var subpos = [];\n subpos[0] = [0];\n var lastsubposstart = 0;\n var mxanynestingd = 0;\n var columnaligns = '';\n for (i = 1; i < len - 1; i++) {\n if (newFrag.charAt(i) == left) mxnestingd++;\n if (newFrag.charAt(i) == right) {\n mxnestingd--;\n if (mxnestingd == 0 && newFrag.charAt(i + 2) == ',' && newFrag.charAt(i + 3) == '{') {\n pos.push(i + 2);\n lastsubposstart = i + 2;\n subpos[lastsubposstart] = [i + 2];\n }\n }\n if (newFrag.charAt(i) == '[' || newFrag.charAt(i) == '(' || newFrag.charAt(i) == '{') {\n mxanynestingd++;\n }\n if (newFrag.charAt(i) == ']' || newFrag.charAt(i) == ')' || newFrag.charAt(i) == '}') {\n mxanynestingd--;\n }\n if (newFrag.charAt(i) == ',' && mxanynestingd == 1) {\n subpos[lastsubposstart].push(i);\n }\n if (mxanynestingd < 0) {\n //happens at the end of the row\n if (lastsubposstart == i + 1) {\n //if at end of row, skip to next row\n i++;\n } else {\n //misformed something - abandon treating as a matrix\n matrix = false;\n }\n }\n }\n\n pos.push(len);\n var lastmxsubcnt = -1;\n if (mxnestingd == 0 && pos.length > 0 && matrix) {\n for (i = 0; i < pos.length - 1; i++) {\n if (i > 0) mxout += '\\\\\\\\';\n if (i == 0) {\n //var subarr = newFrag.substr(pos[i]+7,pos[i+1]-pos[i]-15).split(',');\n if (subpos[pos[i]].length == 1) {\n var subarr = [newFrag.substr(pos[i] + 7, pos[i + 1] - pos[i] - 15)];\n } else {\n var subarr = [newFrag.substring(pos[i] + 7, subpos[pos[i]][1])];\n for (var j = 2; j < subpos[pos[i]].length; j++) {\n subarr.push(newFrag.substring(subpos[pos[i]][j - 1] + 1, subpos[pos[i]][j]));\n }\n subarr.push(newFrag.substring(subpos[pos[i]][subpos[pos[i]].length - 1] + 1, pos[i + 1] - 8));\n }\n } else {\n //var subarr = newFrag.substr(pos[i]+8,pos[i+1]-pos[i]-16).split(',');\n if (subpos[pos[i]].length == 1) {\n var subarr = [newFrag.substr(pos[i] + 8, pos[i + 1] - pos[i] - 16)];\n } else {\n var subarr = [newFrag.substring(pos[i] + 8, subpos[pos[i]][1])];\n for (var j = 2; j < subpos[pos[i]].length; j++) {\n subarr.push(newFrag.substring(subpos[pos[i]][j - 1] + 1, subpos[pos[i]][j]));\n }\n subarr.push(newFrag.substring(subpos[pos[i]][subpos[pos[i]].length - 1] + 1, pos[i + 1] - 8));\n }\n }\n for (j = subarr.length - 1; j >= 0; j--) {\n if (subarr[j] == '{\\\\mid}') {\n if (i == 0) {\n columnaligns = '|' + columnaligns;\n }\n subarr.splice(j, 1);\n } else if (i == 0) {\n columnaligns = 'c' + columnaligns;\n }\n }\n if (lastmxsubcnt > 0 && subarr.length != lastmxsubcnt) {\n matrix = false;\n } else if (lastmxsubcnt == -1) {\n lastmxsubcnt = subarr.length;\n }\n mxout += subarr.join('&');\n }\n }\n mxout = '\\\\begin{array}{' + columnaligns + '} ' + mxout + '\\\\end{array}';\n\n if (matrix) {\n newFrag = mxout;\n }\n }\n }\n }\n\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n if (typeof symbol.invisible != 'boolean' || !symbol.invisible) {\n node = '\\\\right' + AMTgetTeXsymbol(symbol); //AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));\n newFrag += node;\n addedright = true;\n } else {\n newFrag += '\\\\right.';\n addedright = true;\n }\n }\n if (AMnestingDepth > 0 && !addedright) {\n newFrag += '\\\\right.'; //adjust for non-matching left brackets\n //todo: adjust for non-matching right brackets\n }\n\n return [newFrag, str];\n}\n\nexport default function AMTparseAMtoTeX(str) {\n AMnestingDepth = 0;\n str = str.replace(/(&nbsp;|\\u00a0|&#160;)/g, '');\n str = str.replace(/&gt;/g, '>');\n str = str.replace(/&lt;/g, '<');\n if (str.match(/\\S/) == null) {\n return '';\n }\n return AMTparseExpr(str.replace(/^\\s+/g, ''), false)[0];\n}\n\nAMinitSymbols();\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown katex extension for markdown\n */\n\nif (typeof window === 'undefined') {\n throw Error('The showdown katex extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport asciimathToTex from './asciimath2tex';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof katex === 'undefined') {\n var katex = window.katex || undefined;\n}\n\nif (typeof renderMathInElement === 'undefined') {\n var RenderMathInElement = window.renderMathInElement || undefined;\n}\n\nlet katexElementCount = 0;\nfunction hasKatex() {\n return typeof RenderMathInElement !== 'undefined' && RenderMathInElement && typeof katex !== 'undefined' && katex\n ? true\n : false;\n}\n\nlet dync = false;\nconst cssCdnName = 'katexCSS';\nfunction dyncLoadScript(callback) {\n const sync = hasKatex();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs\n .loadScript('katex')\n .then(name => {\n katex = utils.interopDefault(window[name]);\n return cdnjs.loadScript('renderMathInElement');\n })\n .then(name => {\n RenderMathInElement = utils.interopDefault(window[name]);\n if (typeof callback === 'function' && callback) {\n callback(RenderMathInElement);\n }\n })\n .catch(e => {\n console.log('load script error: ' + e);\n });\n return sync;\n }\n }\n\n if (typeof callback === 'function' && callback) {\n callback(RenderMathInElement);\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasKatex()) return;\n cdnjs.unloadScript('renderMathInElement');\n cdnjs.unloadScript('katex');\n cdnjs.unloadStyleSheet(cssCdnName);\n katex = null;\n window.katex = null;\n RenderMathInElement = null;\n window.renderMathInElement = null; \n dync = false; \n}\n\nfunction onRenderKatex(resolve, res) {\n if (hasKatex()) {\n const id = res.id;\n const name = res.className;\n const input = res.input;\n const data = res.data;\n const cssLink = res.cssLink;\n const config = res.options;\n const doc = res.element.ownerDocument;\n let html = '';\n if (data instanceof Array) {\n data.forEach(code => {\n if (code === '') {\n html += '<br>';\n } else {\n const math = katex.renderToString(code, config);\n html += cssLink\n ? `<div title=\"${input}\" class=\"${name} css-katex\" data-css=\"${cssLink}\">${math}</div>`\n : `<div title=\"${input}\" class=\"${name}\">${math}</div>`;\n }\n });\n } else {\n const math = katex.renderToString(data, config);\n html = cssLink\n ? `<div title=\"${input}\" class=\"${name} css-katex\" data-css=\"${cssLink}\">${math}</div>`\n : `<div title=\"${input}\" class=\"${name}\">${math}</div>`;\n }\n res.element.parentNode.outerHTML = html;\n --katexElementCount;\n if (!katexElementCount) {\n RenderMathInElement(doc.body, config);\n }\n resolve(true);\n } else {\n setTimeout(() => {\n onRenderKatex(resolve, res);\n }, 10);\n }\n}\n\nfunction renderKatex(element, config, isAsciimath) {\n return new Promise(resolve => {\n let latex;\n const meta = utils.createElementMeta('katex', element, code => {\n let data;\n latex = code;\n const codes = code.split(/\\n[ \\f\\r\\t\\v]*\\n/);\n if (codes.length > 1) {\n data = new Array();\n codes.forEach(code => {\n code = code.trim();\n if (code !== '') {\n code = isAsciimath ? asciimathToTex(code) : code;\n }\n data.push(code);\n });\n } else {\n data = isAsciimath ? asciimathToTex(latex) : latex;\n }\n return data;\n });\n if (!meta) {\n return resolve(false);\n }\n\n meta.cssLink = cdnjs.getSrc(true, cssCdnName);\n meta.input = latex;\n meta.options = config;\n onRenderKatex(resolve, meta);\n });\n}\n\nfunction renderBlockElements(latex, asciimath, config) {\n katexElementCount = latex.length + asciimath.length;\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n latex.forEach(element => {\n promiseArray.push(renderKatex(element, config, false));\n });\n asciimath.forEach(element => {\n promiseArray.push(renderKatex(element, config, true));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n/**\n * https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n * @param {string} str\n * @returns {string} regexp escaped string\n */\nfunction escapeRegExp(str) {\n return str.replace(/[-[\\]/{}()*+?.\\\\$^|]/g, '\\\\$&');\n}\n\n// katex config\nconst getConfig = (userConfig = {}) => {\n let config = {\n displayMode: true,\n throwOnError: false, // fail silently\n errorColor: '#ff0000',\n delimiters: null,\n ...userConfig\n };\n\n function _isEmptyArray(a) {\n if (!Array.isArray(a) || !a.length) {\n return false;\n }\n\n return true;\n }\n\n function _isObjectProperty(obj, prop) {\n if (!obj || typeof obj !== 'object' || !obj.hasOwnProperty(prop)) {\n return false;\n }\n return true;\n }\n\n function _getDelimiter(obj, style, type) {\n if (!_isObjectProperty(obj, style) || !_isObjectProperty(obj[style], type) || !_isEmptyArray(obj[style][type])) {\n return false;\n }\n\n obj[style][type].forEach(delimiter => {\n delimiter.display = type === 'inline' ? false : true;\n if (style === 'asciimath') {\n delimiter.asciimath = true;\n }\n });\n return obj[style][type];\n }\n\n if (!Array.isArray(config.delimiters)) {\n config.delimiters = []\n .concat(\n _getDelimiter(config.delimiters, 'texmath', 'display') || [\n { left: '$$', right: '$$', display: true },\n { left: '\\\\[', right: '\\\\]', display: true },\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true } \n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'texmath', 'inline') || [\n { left: '\\\\(', right: '\\\\)', display: false }\n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'asciimath', 'display') || [\n { left: '@@', right: '@@', display: true, asciimath: true }\n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'asciimath', 'inline') || [\n { left: \"\\\\$\", right: \"\\\\$\", display: false, asciimath: true }\n ]\n );\n } else if (!config.delimiters.length) {\n config.delimiters = [\n { left: '$$', right: '$$', display: true },\n { left: '\\\\[', right: '\\\\]', display: true },\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true }, \n { left: '\\\\(', right: '\\\\)', display: false },\n { left: '@@', right: '@@', display: true, asciimath: true },\n { left: \"\\\\$\", right: \"\\\\$\", display: false, asciimath: true }\n ];\n }\n return config;\n};\n\nfunction showdownKatex(userConfig) {\n let inlineMathCount = 0;\n const config = getConfig(userConfig);\n const mathDelimiters = config.delimiters.map(({ left, right, display, asciimath }) => {\n const test = new RegExp(`${escapeRegExp(left)}(.+?)${escapeRegExp(right)}`, 'g');\n const replacer = (match, math) => {\n ++inlineMathCount;\n if (asciimath) {\n math = asciimathToTex(math);\n }\n if (display) {\n return `\\\\[${math}\\\\]`;\n }\n return `\\\\(${math}\\\\)`;\n };\n return { test, replacer };\n });\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n inlineMathCount = 0;\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n if (mathDelimiters.length) {\n // convert inline math to inline latex\n // ignore anything in code and pre elements\n wrapper.querySelectorAll(':not(code):not(pre)').forEach(el => {\n /** @type Text[] */\n const textNodes = [...el.childNodes].filter(\n // skip \"empty\" text nodes\n node => node.nodeName === '#text' && node.nodeValue.trim()\n );\n\n textNodes.forEach(node => {\n const newText = mathDelimiters.reduce(\n (acc, { test, replacer }) => acc.replace(test, replacer),\n node.nodeValue\n );\n node.nodeValue = newText;\n });\n });\n }\n\n // find the math in code blocks\n const latex = wrapper.querySelectorAll('code.latex.language-latex');\n const asciimath = wrapper.querySelectorAll('code.asciimath.language-asciimath');\n\n if (!latex.length && !asciimath.length) {\n if (inlineMathCount > 0) {\n this.config.cssLink = cdnjs.getSrc(true, cssCdnName);\n const that = this;\n function asyncRenderKatex(resolve, render) {\n if (hasKatex()) {\n render(wrapper.ownerDocument.body, that.config);\n resolve(true);\n } else {\n setTimeout(() => {\n asyncRenderKatex(resolve, render);\n }, 10);\n }\n }\n console.log(format(`Begin render inline katex elements.`));\n return new Promise(resolve => {\n dyncLoadScript(render => {\n asyncRenderKatex(resolve, render);\n });\n }).then(() => {\n console.log(format(`End render inline katex elements.`));\n return obj;\n });\n }\n\n return false;\n }\n\n this.config.cssLink = cdnjs.getSrc(true, cssCdnName);\n utils.addCssLink(obj, this.config.cssLink, 'css-katex');\n console.log(format(`Begin render katex elements.`));\n return renderBlockElements(latex, asciimath, this.config).then(() => {\n console.log(format(`End render katex elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownKatex;\n","/*\n * Copyright (c) 2024-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown echarts extension for markdown\n */\n'use strict';\n\nconst extName = 'echarts';\n\nif (typeof window === 'undefined') {\n throw Error(`The showdown ${extName} extension can only be used in browser environment!`);\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof echarts === 'undefined') {\n var echarts = window.echarts || undefined;\n}\n\nfunction hasEcharts() {\n return !!echarts;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasEcharts();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadScript(extName).then((name) => {\n echarts = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasEcharts()) return;\n cdnjs.unloadScript(extName);\n echarts = null;\n window.echarts = null;\n dync = false;\n}\n\nfunction onRenderEcharts(resolve, meta) {\n if (hasEcharts()) {\n const id = meta.id;\n const container = meta.container;\n const name = meta.className;\n const node = meta.element.parentNode;\n // // 在 SSR 模式下第一个参数不需要再传入 DOM 对象\n // let chart = echarts.init(null, null, {\n // renderer: 'svg', // 必须使用 SVG 模式\n // ssr: true,\n // width: res.config.width, // 需要指明高和宽\n // height: res.config.height\n // });\n // // 像正常使用一样 setOption\n // const option = JSON.parse(data);\n // chart.setOption(option);\n // // 输出字符串\n // const svg = chart.renderToSVGString();\n // // 如果不再需要图表,调用 dispose 以释放内存\n // chart.dispose();\n // chart = null;\n if (!meta.lang) {\n meta.lang = { width: '400px', height: '300px' };\n } else {\n if (!meta.lang.width) meta.lang.width = '400px';\n if (!meta.lang.height) meta.lang.height = '300px';\n }\n const style = `width:${meta.lang.width}; height:${meta.lang.height};`;\n node.outerHTML = `<div id=\"${container}\" class=\"${name}\" style=\"${style}\"><div id=\"${id}\" style=\"width:100%;height:100%;display:inline-block\"></div></div>`;\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderEcharts(resolve, meta);\n }, 20);\n}\n\n/**\n * render echarts graphs\n */\nfunction renderEcharts(element, scripts, config) {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return Promise.resolve(false);\n }\n\n config = { ...config, ssr: false, width: meta.lang.width, height: meta.lang.height };\n const echartRenderer = (meta, config) => {\n const result = () => {\n const wval = eval;\n let el = document.getElementById(meta.id);\n if (el) {\n let chart = echarts.getInstanceByDom(el);\n if (!chart) {\n el.innerHTML = '';\n }\n chart = echarts.init(el, null, config);\n if (\n meta.lang &&\n meta.lang.type &&\n typeof meta.lang.type === 'string' &&\n meta.lang.type.toLowerCase() == 'javascript'\n ) {\n const option = wval(`(function(){${meta.data}; return option;})();`);\n chart.setOption(option);\n } else {\n // JSON string\n const option = JSON.parse(meta.data);\n chart.setOption(option);\n }\n }\n };\n\n result.toString = () => {\n if (\n meta.lang &&\n meta.lang.type &&\n typeof meta.lang.type === 'string' &&\n meta.lang.type.toLowerCase() == 'javascript'\n ) {\n return `function(){\n const config = ${JSON.stringify(config)};\n let el = document.getElementById('${meta.id}');\n if (el) {\n let chart = echarts.getInstanceByDom(el);\n if (!chart) {\n el.innerHTML = '';\n }\n chart = echarts.init(el, null, config);\n ${meta.data}\n chart.setOption(option); \n }\n }`;\n }\n\n return `function(){\n const config = ${JSON.stringify(config)};\n let el = document.getElementById('${meta.id}');\n if (el) {\n let chart = echarts.getInstanceByDom(el);\n if (!chart) {\n el.innerHTML = '';\n }\n chart = echarts.init(el, null, config);\n const option = ${meta.data};\n chart.setOption(option);\n }\n }`;\n };\n return result;\n };\n const script = {\n id: meta.container,\n code: echartRenderer(meta, config),\n host: `#${meta.container}`,\n };\n scripts.push(script);\n return new Promise((resolve) => {\n onRenderEcharts(resolve, meta);\n });\n}\n\n// <div class=\"echarts\"></div>\nfunction renderEchartsElements(elements, scripts, config) {\n const script = {\n outer: [\n {\n name: extName,\n src: cdnjs.getSrc(false, extName, 'jsdelivr'),\n },\n ],\n inner: [],\n };\n scripts.push(script);\n dyncLoadScript();\n return new Promise((resolve) => {\n const promiseArray = [];\n elements.forEach((element) => {\n promiseArray.push(renderEcharts(element, script.inner, config));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// echarts default config\nconst getConfig = (config = {}) => ({\n renderer: 'svg',\n ssr: false,\n tooltip: {\n show: true,\n },\n animation: true,\n useDirtyRect: false,\n ...config,\n});\n\nfunction showdownEcharts(userConfig) {\n const config = getConfig(userConfig);\n return [\n {\n type: 'output',\n config: config,\n filter: function (obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the echarts in code blocks\n const elements = wrapper.querySelectorAll(`code.${extName}.language-${extName}`);\n if (!elements.length) {\n return false;\n }\n\n console.log(format(`Begin render ${extName} elements.`));\n return renderEchartsElements(elements, obj.scripts, this.config).then(() => {\n console.log(format(`End render ${extName} elements.`));\n return obj;\n });\n },\n },\n ];\n}\n\nexport default showdownEcharts;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown mermaid extension for markdown\n */\n'use strict';\n\nconst extName = \"mermaid\";\n\nif (typeof window === 'undefined') {\n throw Error('The showdown mermaid extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof mermaid === 'undefined') {\n var mermaid = window.mermaid || undefined;\n}\n\nfunction hasMermaid() {\n return typeof mermaid !== 'undefined' && mermaid ? true : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript(config) {\n // When window object exists,\n // it means browser environment, otherwise node.js environment.\n // In browser environment, html need to be rendered asynchronously.\n const sync = hasMermaid();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadScript(extName).then(name => {\n mermaid = utils.interopDefault(window[name]);\n mermaid.initialize(config);\n });\n return sync\n }\n }\n\n mermaid.initialize(config);\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasMermaid()) return;\n cdnjs.unloadScript(extName);\n katex = null;\n window.mermaid = null;\n mermaid = null; \n dync = false; \n}\n\n\nfunction onRenderMermaid(resolve, res) {\n if (hasMermaid()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const node = res.element.parentNode;\n mermaid.render(id, data).then(m =>{\n node.outerHTML = `<div class=\"${name}\">${m.svg}</div>`;\n resolve(true);\n });\n return;\n }\n\n setTimeout(() => {\n onRenderMermaid(resolve, res);\n }, 10);\n}\n\n/**\n * render mermaid graphs\n */\nfunction renderMermaid(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n onRenderMermaid(resolve, meta);\n });\n}\n\n// <div class=\"mermaid\"></div>\nfunction renderMermaidElements(elements, config) {\n dyncLoadScript(config);\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderMermaid(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// mermaid default config\nconst getConfig = (config = {}) => ({\n theme: 'forest',\n logLevel: 4,\n startOnLoad: false,\n arrowMarkerAbsolute: false,\n flowchart: {\n curve: 'basis'\n },\n gantt: {\n axisFormat: '%m/%d/%Y'\n },\n sequence: {\n actorMargin: 50\n },\n ...config\n});\n\nfunction showdownMermaid(userConfig) {\n const config = getConfig(userConfig);\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the mermaid in code blocks\n const elements = wrapper.querySelectorAll('code.mermaid.language-mermaid');\n if (!elements.length) {\n return false;\n }\n\n console.log(format(`Begin render mermaid elements.`));\n return renderMermaidElements(elements, this.config).then(() => {\n console.log(format(`End render mermaid elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownMermaid;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: zlib codec for PlantUML website\n * Encode/Decode code taken from the PlantUML website:\n * http://plantuml.sourceforge.net/codejavascript2.html\n */\n'use strict';\n\nimport zlib from 'zlib';\n\nfunction encode64(data) {\n var r = '';\n for (var i = 0; i < data.length; i += 3) {\n if (i + 2 == data.length) {\n r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), 0);\n } else if (i + 1 == data.length) {\n r += append3bytes(data.charCodeAt(i), 0, 0);\n } else {\n r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), data.charCodeAt(i + 2));\n }\n }\n return r;\n}\n\nfunction append3bytes(b1, b2, b3) {\n var c1 = b1 >> 2;\n var c2 = ((b1 & 0x3) << 4) | (b2 >> 4);\n var c3 = ((b2 & 0xf) << 2) | (b3 >> 6);\n var c4 = b3 & 0x3f;\n var r = '';\n r += encode6bit(c1 & 0x3f);\n r += encode6bit(c2 & 0x3f);\n r += encode6bit(c3 & 0x3f);\n r += encode6bit(c4 & 0x3f);\n return r;\n}\n\nfunction encode6bit(b) {\n if (b < 10) {\n return String.fromCharCode(48 + b);\n }\n b -= 10;\n if (b < 26) {\n return String.fromCharCode(65 + b);\n }\n b -= 26;\n if (b < 26) {\n return String.fromCharCode(97 + b);\n }\n b -= 26;\n if (b == 0) {\n return '-';\n }\n if (b == 1) {\n return '_';\n }\n return '?';\n}\n\nfunction decode6bit(cc) {\n var c = cc.charCodeAt(0);\n if (cc === '_') return 63;\n if (cc === '-') return 62;\n if (c >= 97) return c - 61; // - 97 + 26 + 10\n if (c >= 65) return c - 55; // - 65 + 10\n if (c >= 48) return c - 48;\n return '?';\n}\n\nfunction extract3bytes(data) {\n var c1 = decode6bit(data[0]);\n var c2 = decode6bit(data[1]);\n var c3 = decode6bit(data[2]);\n var c4 = decode6bit(data[3]);\n var b1 = (c1 << 2) | ((c2 >> 4) & 0x3f);\n var b2 = ((c2 << 4) & 0xf0) | ((c3 >> 2) & 0xf);\n var b3 = ((c3 << 6) & 0xc0) | (c4 & 0x3f);\n return [b1, b2, b3];\n}\n\nfunction decode64(data) {\n var r = '';\n var i = 0;\n for (i = 0; i < data.length; i += 4) {\n var t = extract3bytes(data.substring(i, i + 4));\n r = r + String.fromCharCode(t[0]);\n r = r + String.fromCharCode(t[1]);\n r = r + String.fromCharCode(t[2]);\n }\n return r;\n}\n\nfunction encode(data) {\n return encode64(\n zlib\n .deflateRawSync(data, {\n level: 9\n })\n .toString('binary')\n );\n}\n\nfunction decode(data) {\n return zlib.inflateRawSync(Buffer.from(decode64(data), 'binary')).toString();\n}\n\nfunction zEncode(data) {\n return zlib\n .deflateRawSync(data, {\n level: 9\n })\n .toString('base64');\n}\n\nfunction zDecode(data) {\n return zlib.inflateRawSync(Buffer.from(data, 'base64')).toString();\n}\n\nconst brEncode =\n typeof zlib.brotliCompressSync === 'undefined'\n ? undefined\n : function(data) {\n return zlib\n .brotliCompressSync(Buffer.from(data), {\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 11\n }\n })\n .toString('base64');\n };\n\nconst brDecode =\n typeof zlib.brotliDecompressSync === 'undefined'\n ? undefined\n : function(data) {\n return zlib.brotliDecompressSync(Buffer.from(data, 'base64')).toString();\n };\n\nconst zlibcodec = { encode, decode, brEncode, brDecode };\nexport { zlibcodec as default, encode, decode, zEncode, zDecode, brEncode, brDecode };\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: plantuml codec for PlantUML website\n * Encode/Decode code taken from the PlantUML website:\n * http://plantuml.sourceforge.net/codejavascript2.html\n */\n\n'use strict';\n\nimport * as zlibcodec from './zlib-codec.js';\n\nfunction encodeuml(data) {\n const startuml = '@startuml';\n const enduml = '@enduml';\n const s = `${startuml}${String(data.split(startuml)[1]).split(enduml)[0] || ''}${enduml}`;\n return zlibcodec.encode(s);\n}\n\nfunction decodeuml(data) {\n return zlibcodec.decode(data);\n}\n\nconst plantumlcodec = {\n encodeuml,\n decodeuml\n};\n\nexport { plantumlcodec as default, encodeuml, decodeuml };\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown plantuml extension for markdown\n */\n'use strict';\n\nimport format from './log';\nimport plantumlcodec from '../utils/plantuml-codec.js';\n\nconst defaultUmlWebsite = 'www.plantuml.com/plantuml';\nconst defaultImageFormat = 'img';\n\nlet umlElementCount = 0;\nfunction renderPlantumlElement(element, config) {\n return new Promise(resolve => {\n const langattr = element.dataset.lang;\n let langobj = null;\n if (langattr) {\n try {\n langobj = JSON.parse(langattr);\n } catch {\n console.log(`Error: parse plantuml data-lang ${langattr} failed.`);\n }\n }\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return resolve(false);\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const code = element.textContent.trim();\n const name =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const imageFormat = config.imageFormat;\n if (imageFormat === 'svg') {\n const id = 'plantuml-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n if (typeof config.svgRender === 'function' && config.svgRender) {\n config.svgRender(id, name, code, umlElementCount).then(svgData => {\n element.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svgData}</div>`;\n resolve(true);\n });\n } else if (typeof window !== 'undefined' && window.fetch && window.dispatchEvent) {\n const protocol = window && window.location.protocol;\n const website = (protocol === 'http:' || protocol === 'https:' ? '//' : 'https://') + config.umlWebSite;\n const imageExtension = imageFormat !== defaultImageFormat ? `.${imageFormat}` : '';\n const uml = plantumlcodec.encodeuml(code);\n const src = `${website}/${imageFormat}/${uml}${imageExtension}`;\n window\n .fetch(src)\n .then(response => {\n if (response.ok) {\n return response.text();\n }\n })\n .then(svgData => {\n element.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svgData}</div>`;\n resolve(true);\n });\n }\n } else {\n const protocol = window && window.location.protocol;\n const website = (protocol === 'http:' || protocol === 'https:' ? '//' : 'https://') + config.umlWebSite;\n const imageExtension = imageFormat !== defaultImageFormat ? `.${imageFormat}` : '';\n const uml = plantumlcodec.encodeuml(code);\n const src = `${website}/${imageFormat}/${uml}${imageExtension}`;\n element.parentNode.outerHTML = `<div class=\"${name}\"><img src='${src}' alt=''></img></div>`;\n return resolve(true);\n }\n });\n}\n\n// <div class=\"plantuml\"></div>\nfunction renderPlantumlElements(elements, config) {\n umlElementCount = elements.length;\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderPlantumlElement(element, config));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// Plantuml default config\nconst getConfig = (config = {}) => ({\n umlWebSite: defaultUmlWebsite,\n imageFormat: defaultImageFormat,\n svgRender: null,\n ...config\n});\n\nfunction showdownPlantuml(userConfig) {\n const config = getConfig(userConfig);\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the plantuml in code blocks\n const elements = wrapper.querySelectorAll('code.plantuml.language-plantuml');\n if (!elements.length) {\n return false;\n }\n\n console.log(format(`Begin render plantuml elements.`));\n return renderPlantumlElements(elements, this.config).then(() => {\n console.log(format(`End render plantuml elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownPlantuml;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown railroad extension for markdown\n */\n'use strict';\n\nconst extName = \"railroad\";\nconst cssCdnName = 'railroadCSS';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown railroad extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nlet railroad = false;\nfunction hasRailroad() {\n return railroad;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasRailroad();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs.loadScript(extName).then(() => {\n railroad = true;\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasRailroad()) return;\n cdnjs.unloadScript(extName);\n cdnjs.unloadStyleSheet(cssCdnName);\n railroad = false;\n dync = false; \n}\n\nfunction onRenderRailroad(resolve, res) {\n if (hasRailroad()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const cssLink = res.cssLink;\n const railroadElement = window.eval(data).format();\n const doc = res.element.ownerDocument;\n res.element.parentNode.outerHTML = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-railroad\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n railroadElement.addTo(doc.getElementById(id));\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderRailroad(resolve, res);\n }, 10);\n}\n\n/**\n * render railroad graphs\n */\nfunction renderRailroad(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n\n meta.cssLink = cdnjs.getSrc(true, cssCdnName);\n onRenderRailroad(resolve, meta);\n });\n}\n\n// <div class=\"railroad\"></div>\nfunction renderRailroadElements(elements) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderRailroad(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownRailroad() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the railroad in code blocks\n const elements = wrapper.querySelectorAll('code.railroad.language-railroad');\n if (!elements.length) {\n return false;\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(true, cssCdnName)\n };\n utils.addCssLink(obj, this.config.cssLink, 'css-railroad');\n console.log(format(`Begin render railroad elements.`));\n return renderRailroadElements(elements).then(() => {\n console.log(format(`End render railroad elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownRailroad;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown sequence extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown sequence extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Raphael === 'undefined') {\n var Raphael = window.Raphael || undefined;\n}\n\n// js-sequence-diagrams can create a global object named Diagrams of window,\n// To be compatible with railroad diagrams extension that also has window.Diagram object,\n// You need to save the original Diagrams object of railroad diagrams extension here.\nlet diagram;\nif (typeof window !== 'undefined') {\n if (window.Diagram) {\n diagram = window.Diagram;\n if (window.Diagram['Signal']) {\n var sequence = window.Diagram;\n }\n }\n}\n\nconst themes = ['simple', 'hand'];\nif (typeof sequence === 'undefined' && typeof window !== 'undefined') {\n var sequence = window.SequenceJS;\n}\n\nfunction hasRaphael() {\n return !!Raphael;\n}\n\nfunction hasSequence() {\n return hasRaphael() && !!sequence;\n}\n\nfunction hasFlowchart() {\n return hasRaphael() && !!window.flowchart;\n}\n\nlet dync = false;\nconst cssCdnName = 'sequenceCSS';\nfunction dyncLoadScript() {\n const sync = hasSequence();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs\n .loadScript('WebFont')\n .then(() => {\n if (!hasRaphael()) {\n return cdnjs.loadScript('Raphael');\n }\n\n return 'Raphael';\n })\n .then((name) => {\n Raphael = utils.interopDefault(window[name]);\n return cdnjs.loadScript('Snap');\n })\n .then(() => {\n return cdnjs.loadScript('underscore');\n })\n .then(() => {\n // You need to save the original Diagrams object of sequence diagrams extension here.\n if (!diagram && window['Diagram']) {\n diagram = window['Diagram'];\n }\n return cdnjs.loadScript('sequence');\n })\n .then(() => {\n sequence = window['Diagram'];\n window.SequenceJS = sequence;\n // You need to replace the original Diagrams object of sequence diagrams extension here.\n if (diagram) {\n window['Diagram'] = diagram;\n }\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasSequence()) return;\n cdnjs.unloadScript('sequence');\n cdnjs.unloadScript('underscore');\n cdnjs.unloadScript('Snap');\n cdnjs.unloadScript('WebFont');\n cdnjs.unloadStyleSheet(cssCdnName);\n diagram = null;\n sequence = null;\n window.Diagram = null;\n window.SequenceJS = null;\n if (!hasFlowchart()) {\n cdnjs.unloadScript('Raphael');\n const es = document.getElementsByTagName('i');\n if (es && es.length > 0) {\n const body = document.body;\n for (let i = 0; i < es.length; i++) {\n const e = es[i];\n if (e.title && e.title === 'Raphaël Colour Picker') {\n body.removeChild(e);\n }\n }\n }\n Raphael = null;\n window.Raphael = null;\n }\n dync = false;\n}\n\n/**\n * render sequence graphs\n */\nfunction renderSequence(element) {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const sync = dyncLoadScript();\n const cssLink = cdnjs.getSrc(true, cssCdnName);\n const code = element.textContent.trim();\n const name = 'js-sequence' + (!diagramClass ? '' : ' ') + diagramClass;\n const id = 'sequence-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n element.id = id;\n if (cssLink) {\n element.className = element.className + (!element.className ? '' : ' ') + 'css-sequence';\n element.dataset.css = cssLink;\n }\n if (!sync && typeof window !== 'undefined' && window.dispatchEvent) {\n Promise.resolve(id).then((elementid) => {\n // dispatch sequence custom event\n window.dispatchEvent(\n new CustomEvent('sequence', {\n detail: {\n id: elementid,\n className: name,\n data: code,\n langattr: langattr,\n cssLink: cssLink,\n },\n })\n );\n });\n } else {\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n // dispatch sequence custom event\n window.dispatchEvent(\n new CustomEvent('sequence', {\n detail: {\n id: id,\n className: name,\n data: code,\n langattr: langattr,\n cssLink: cssLink\n }\n })\n );\n }\n }\n}\n\n// <div class=\"sequence\"></div>\nfunction renderSequenceElements(elements) {\n if (!elements.length) {\n return false;\n }\n elements.forEach((element) => {\n renderSequence(element);\n });\n return true;\n}\n\nfunction onRenderSequence(element) {\n if (hasSequence()) {\n const id = element.id;\n const name = element.className;\n const data = element.data;\n const cssLink = element.cssLink;\n let theme = 'hand';\n const langattr = element.langattr;\n if (langattr) {\n const obj = JSON.parse(langattr);\n if (obj && obj.theme && themes.indexOf(obj.theme) != -1) {\n theme = obj.theme;\n }\n }\n let el = window.document.getElementById(id);\n if (el) {\n el.parentNode.outerHTML = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-sequence\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n el = window.document.getElementById(id);\n const d = sequence.parse(data);\n const options = { theme: theme };\n d.drawSVG(el ? el : id, options);\n return;\n }\n }\n setTimeout(() => {\n onRenderSequence(element);\n }, 10);\n}\n\nfunction showdownSequence() {\n let hasEvent = false;\n return [\n {\n type: 'output',\n filter: function (html) {\n if (typeof html === 'string') {\n // parse html\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n\n // find the sequence in code blocks\n const elements = wrapper.querySelectorAll('code.sequence.language-sequence');\n if (elements.length) {\n if (!hasEvent) {\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n hasEvent = true;\n // Listen sequence custom event\n window.addEventListener('sequence', (event) => {\n if (event.detail) {\n onRenderSequence(event.detail);\n }\n });\n }\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(true, cssCdnName),\n };\n }\n if (!renderSequenceElements(elements)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n\n if (!html || !html.wrapper) {\n return false;\n }\n\n const obj = html;\n const wrapper = obj.wrapper;\n const elements = wrapper.querySelectorAll('code.sequence.language-sequence');\n if (elements.length > 0) {\n utils.addCssLink(obj, cdnjs.getSrc(true, cssCdnName), 'css-sequence');\n }\n return obj;\n },\n },\n ];\n}\n\nexport default showdownSequence;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown wavedrom extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown wavedrom extension can only be used in browser environment!');\n}\n\nimport log from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof WaveDrom === 'undefined') {\n var WaveDrom = window.WaveDrom || undefined;\n}\n\nlet wdCount = 0;\nlet indexWD = 0;\nfunction hasWavedrom() {\n return !!WaveDrom;\n}\n\nlet dync = false;\nfunction dyncLoadScript(skin) {\n const sync = hasWavedrom();\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n if (typeof window !== 'undefined') {\n cdnjs\n .loadScript({ WaveDromSkin: skin })\n .then(() => {\n return cdnjs.loadScript('WaveDrom');\n })\n .then(name => {\n WaveDrom = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript(skin) {\n if (!hasWavedrom()) return;\n cdnjs.unloadScript('WaveDrom');\n cdnjs.unloadScript({ WaveDromSkin: skin });\n WaveDrom = null;\n window.WaveDrom = null;\n dync = false; \n}\n\nfunction onRenderWavedrom(resolve, res) {\n if (hasWavedrom()) {\n const index = res.index;\n const id = res.id;\n const name = res.className;\n const data = res.data;\n let element = res.element;\n const doc = element.ownerDocument;\n element.parentNode.outerHTML = utils.renderCacheElement(doc, id + index, name, el => {\n const obj = window.eval(`(${data})`);\n WaveDrom.RenderWaveForm(index, obj, id);\n // Replace the created cache element with the original element with the same id.\n const wdel = document.getElementById('WaveDrom_Display_' + index);\n if (el != wdel) {\n while (wdel.childNodes.length) {\n el.appendChild(wdel.removeChild(wdel.childNodes[0]));\n }\n }\n });\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderWavedrom(resolve, res);\n }, 10);\n}\n/**\n * render wavedrom graphs\n */\nfunction renderWavedrom(element) {\n return new Promise(resolve => {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const code = element.textContent.trim();\n const name =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const index = indexWD;\n ++indexWD;\n // When index of wavwdrom is 0, there will be some special logic in the WaveDrom lib.\n // So the index needs to be cleared after all WavwDrom element are rendered.\n --wdCount;\n if (!wdCount) {\n indexWD = 0;\n }\n\n //const id = 'wavedrom-' + Date.now() + '-' + Math.floor(Math.random() * 10000) + '-';\n const id = 'WaveDrom_Display_';\n element.id = id + index;\n const res = {\n element: element,\n index: index,\n id: id,\n className: name,\n data: code\n };\n onRenderWavedrom(resolve, res);\n // const id = 'WaveDrom_Display_' + index;\n // element.parentNode.outerHTML = cdnjs.renderCacheElement(element.ownerDocument, id, name, el => {\n // const obj = window.eval(`(${code})`);\n // WaveDrom.RenderWaveForm(index, obj, 'WaveDrom_Display_');\n // // Replace the created cache element with the original element with the same id.\n // const wdel = document.getElementById('WaveDrom_Display_' + index);\n // if (el != wdel) {\n // while (wdel.childNodes.length) {\n // el.appendChild(wdel.removeChild(wdel.childNodes[0]));\n // }\n // }\n // });\n });\n}\n\n// <div class=\"wavedrom\"></div>\nfunction renderWavedromElements(elements, skin) {\n dyncLoadScript(skin);\n return new Promise(resolve => {\n const promiseArray = [];\n wdCount = elements.length;\n elements.forEach(element => {\n promiseArray.push(renderWavedrom(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// wavedrom default config\nconst getConfig = (config = {}) => ({\n skin: 'default',\n ...config\n});\n\nfunction showdownWavedrom(skinConfig) {\n const config = getConfig(skinConfig)\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the wavedrom in code blocks\n const elements = wrapper.querySelectorAll('code.wavedrom.language-wavedrom');\n if (!elements.length) {\n return false;\n }\n\n log(`Begin render wavedrom elements.`);\n return renderWavedromElements(elements, this.config.skin).then(() => {\n log(`End render wavedrom elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownWavedrom;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown footnotes extension for markdown\n */\n'use strict';\n\nfunction showdownFootnotes() {\n return [\n {\n type: 'lang',\n filter: (text, converter) =>\n text.replace(/^\\[\\^([\\d\\w]+)\\]:\\s*((\\n+(\\s{2,4}|\\t).+)+)$/gm, (str, name, rawContent, _, padding) => {\n const content = converter.makeHtml(rawContent.replace(new RegExp(`^${padding}`, 'gm'), ''));\n return `<div class=\"footnote\" id=\"footnote-${name}\"><a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>:${content}</div>`;\n })\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(\n /^\\[\\^([\\d\\w]+)\\]:( |\\n)((.+\\n)*.+)$/gm,\n (str, name, _, content) =>\n `<small class=\"footnote\" id=\"footnote-${name}\"><a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>: ${content}</small>`\n )\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(/([^\\\\])\\[\\^([\\d\\w]+)\\]/gm, (str, preContent, name) => `${preContent}<a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>`)\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(/\\\\\\[\\^([\\d\\w]+)\\]/gm, (str, name) => `[^${name}]`)\n }\n ];\n}\n\nexport default showdownFootnotes;\n","/*\n * Copyright (c) 2020-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown container extension for markdown\n */\n'use strict';\n\nfunction showdownContainer() {\n return [\n {\n type: 'lang',\n filter: (text, converter) =>\n text.replace(\n /(?:^|\\n)(?: {0,3})(:::+)(?: *)([\\S]+)(?:[ \\t]*)([^\\s][\\S\\t ]*)?\\n([\\s\\S]*?)\\n(?: {0,3})\\1(?:[ \\t]*)\\n/g,\n function (wholeMatch, delim, classname, title, content) {\n if (classname) {\n let classes = classname.split('-');\n if (classes.length > 1) {\n classes.forEach(function (name, index, arr) {\n if (index > 0) {\n arr[index] = arr[index - 1] + '-' + name;\n }\n });\n } else {\n classes.unshift('container');\n }\n classname = classes.join(' ');\n }\n if (content) {\n content = converter.makeHtml(content);\n }\n if (title) {\n title = `<p class=\"container-title\">${title}</p>`;\n } else {\n title = ''\n }\n return `<div class=\"showdown-container ${classname}\">${title}${content}</div>`;\n }\n ),\n },\n ];\n}\n\nexport default showdownContainer;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown flowchart extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown flowchart extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Raphael === 'undefined') {\n var Raphael = window.Raphael || undefined;\n}\n\nif (typeof flowchart === 'undefined') {\n var flowchart = window.flowchart || undefined;\n}\n\nfunction hasRaphael() {\n return !!Raphael\n}\n\nfunction hasFlowchart() {\n return typeof Raphael !== 'undefined' && Raphael && typeof flowchart !== 'undefined' && flowchart ? true : false;\n}\n\nfunction hasSequence() {\n return hasRaphael() && !!window.SequenceJS;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasFlowchart();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n if (!hasRaphael()) {\n cdnjs\n .loadScript('Raphael')\n .then(name => {\n Raphael = utils.interopDefault(window[name]);\n return cdnjs.loadScript('flowchart');\n })\n .then(name => {\n flowchart = utils.interopDefault(window[name]);\n });\n return sync\n }\n\n cdnjs\n .loadScript('flowchart')\n .then(name => {\n flowchart = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasFlowchart()) return;\n cdnjs.unloadScript('flowchart');\n flowchart = null;\n window.flowchart = null;\n if (!hasSequence()) {\n cdnjs.unloadScript('Raphael');\n const es = document.getElementsByTagName('i');\n if (es && es.length > 0) {\n const body = document.body;\n for (let i = 0; i < es.length; i++) {\n const e = es[i];\n if (e.title && e.title === 'Raphaël Colour Picker') {\n body.removeChild(e);\n }\n }\n }\n Raphael = null;\n window.Raphael = null;\n }\n dync = false;\n}\n\nfunction onRenderFlowchart(resolve, res) {\n if (hasFlowchart()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const options = res.options;\n const doc = res.element.ownerDocument;\n res.element.parentNode.outerHTML = utils.renderCacheElement(doc, id, name, el => {\n flowchart.parse(data).drawSVG(el, options);\n });\n resolve(true);\n return;\n }\n \n setTimeout(() => {\n onRenderFlowchart(resolve, res);\n }, 10);\n}\n\n/**\n * render flowchart graphs\n */\nfunction renderFlowchart(element, options) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta('flowchart', element);\n if (!meta) {\n return resolve(false);\n }\n\n meta.options = options;\n onRenderFlowchart(resolve, meta);\n });\n}\n\n// <div class=\"flowchart || flow\"></div>\nfunction renderFlowchartElements(flowchartElements, flowElements, options) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n flowchartElements.forEach(element => {\n promiseArray.push(renderFlowchart(element, options));\n });\n flowElements.forEach(element => {\n promiseArray.push(renderFlowchart(element, options));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// Flowchart default options:\n// 'x': 0,\n// 'y': 0,\n// 'line-width': 3,\n// 'line-length': 50,\n// 'text-margin': 10,\n// 'font-size': 14,\n// 'font-color': 'black',\n// 'font': 'normal',\n// 'font-family': 'calibri',\n// 'font-weight': 'normal',\n// 'line-color': 'black',\n// 'element-color': 'black',\n// 'fill': 'white',\n// 'yes-text': 'yes',\n// 'no-text': 'no',\n// 'arrow-end': 'block',\n// 'class': 'flowchart',\n// 'scale': 1,\n// 'symbols': {\n// 'start': {},\n// 'end': {},\n// 'condition': {},\n// 'inputoutput': {},\n// 'operation': {},\n// 'subroutine': {},\n// 'parallel': {}\n// },\n// 'flowstate' : {\n// 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n// 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n// 'future' : { 'fill': '#FFFF99'},\n// 'invalid': {'fill': '#444444'}\n// }\nconst getOptions = (userOptions = {}) => ({\n 'line-width': 3,\n maxWidth: 3, //ensures the flowcharts fits within a certian width\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n font: 'normal',\n 'font-family': 'Helvetica',\n 'font-weight': 'normal',\n 'font-color': 'black',\n 'line-color': 'black',\n 'element-color': 'black',\n fill: 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n scale: 1,\n symbols: {\n start: {\n 'font-color': 'red',\n 'element-color': 'green',\n fill: 'yellow'\n },\n end: {\n class: 'end-element'\n }\n },\n flowstate: {\n past: { fill: '#CCCCCC', 'font-size': 12 },\n current: { fill: 'yellow', 'font-color': 'red', 'font-weight': 'bold' },\n future: { fill: '#FFFF99' },\n request: { fill: 'blue' },\n invalid: { fill: '#444444' },\n approved: {\n fill: '#58C4A3',\n 'font-size': 12,\n 'yes-text': 'APPROVED',\n 'no-text': 'n/a'\n },\n rejected: {\n fill: '#C45879',\n 'font-size': 12,\n 'yes-text': 'n/a',\n 'no-text': 'REJECTED'\n }\n },\n ...userOptions\n});\n\nfunction showdownFlowchart(userOptions) {\n const options = getOptions(userOptions);\n\n return [\n {\n type: 'output',\n config: options,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the Flowchart in code blocks\n const flowchartElements = wrapper.querySelectorAll('code.flowchart.language-flowchart');\n const flowElements = wrapper.querySelectorAll('code.flow.language-flow');\n if (!flowchartElements.length && !flowElements.length) {\n return false;\n }\n console.log(format(`Begin render flowchart elements.`));\n return renderFlowchartElements(flowchartElements, flowElements, this.config).then(() => {\n console.log(format(`End render flowchart elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownFlowchart;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport './less/preview.less';\nimport './less/container.less';\nimport './less/toc.less';\n\nimport showdown from './parser/showdown.js';\nimport showdownAbc from './extensions/showdown-abc.js';\nimport showdownToc from './extensions/showdown-toc.js';\nimport showdownCss from './extensions/showdown-css.js';\nimport showdownViz from './extensions/showdown-viz.js';\nimport showdownVega from './extensions/showdown-vega.js';\nimport showdownAlign from './extensions/showdown-align.js';\nimport showdownKatex from './extensions/showdown-katex.js';\nimport showdownEcharts from './extensions/showdown-echarts.js';\nimport showdownMermaid from './extensions/showdown-mermaid.js';\nimport showdownPlantuml from './extensions/showdown-plantuml.js';\nimport showdownRailroad from './extensions/showdown-railroad.js';\nimport showdownSequence from './extensions/showdown-sequence.js';\nimport showdownWavedrom from './extensions/showdown-wavedrom.js';\nimport showdownFootnotes from './extensions/showdown-footnotes.js';\nimport showdownContainer from './extensions/showdown-container.js';\nimport showdownFlowchart from './extensions/showdown-flowchart.js';\n\nimport * as zlibcodec from './utils/zlib-codec.js';\nimport cdnjs from './extensions/cdn';\nimport format from './extensions/log';\n\n//////////////////////////////////////////////////////////////////////\nconst getOptions = (options = {}) => {\n return {\n flavor: 'github',\n ...options,\n };\n};\n\nconst getAsyncExtensions = (options, extensions = {}) => {\n const mermaidOptions = options ? options.mermaid || {} : {};\n const plantumlOptions = options ? options.plantuml || {} : {};\n const katexOptions = options ? options.katex || {} : {};\n const vegaOptions = options ? options.vega || {} : {};\n\n const getExtension = (name, def) => {\n let obj = null;\n try {\n obj = showdown.extension(name);\n } catch {\n console.log(`Warning: not found ${name} extension.`);\n }\n return obj ? obj : def;\n };\n\n const asyncExtensions = {\n 'showdown-toc': getExtension('showdown-toc', showdownToc),\n 'showdown-plantuml': showdownPlantuml(plantumlOptions),\n 'showdown-mermaid': showdownMermaid(mermaidOptions),\n 'showdown-katex': showdownKatex(katexOptions),\n 'showdown-flowchart': showdownFlowchart,\n 'showdown-viz': showdownViz,\n 'showdown-vega': showdownVega(vegaOptions),\n 'showdown-wavedrom': showdownWavedrom,\n 'showdown-railroad': showdownRailroad,\n 'showdown-abc': showdownAbc,\n 'showdown-echarts': showdownEcharts,\n 'showdown-sequence': getExtension('showdown-sequence', showdownSequence),\n ...extensions,\n 'showdow-css': showdownCss,\n };\n\n let extnames = [];\n for (let prop in asyncExtensions) {\n if (asyncExtensions.hasOwnProperty(prop)) {\n showdown.asyncExtension(prop, asyncExtensions[prop]);\n extnames.push(prop);\n }\n }\n return extnames;\n};\n\nconst getExtensions = (options, extensions = {}) => {\n const nativeExtensions = {\n 'showdown-toc': showdownToc,\n 'showdown-align': showdownAlign,\n 'showdown-footnotes': showdownFootnotes,\n 'showdown-container': showdownContainer,\n 'showdown-sequence': showdownSequence,\n ...extensions,\n };\n\n let extnames = [];\n for (let prop in nativeExtensions) {\n if (nativeExtensions.hasOwnProperty(prop)) {\n showdown.extension(prop, nativeExtensions[prop]);\n extnames.push(prop);\n }\n }\n return extnames;\n};\n\nconst loadScript = (id, code, parent) => {\n if (!id || !code || typeof document === 'undefined') {\n return false;\n }\n\n let element = document.getElementById(id);\n if (!element) {\n if (!parent) {\n parent = document.body;\n } else if (typeof parent === 'string') {\n parent = document.querySelector(parent);\n }\n element = parent;\n }\n const tag = element.tagName;\n const scriptID = `script-${id}`;\n let script = document.querySelector(`${tag} > #${scriptID}`);\n if (script) {\n return true;\n }\n\n script = document.createElement('script');\n script.id = scriptID;\n script.type = 'text/javascript';\n script.text = code;\n element.appendChild(script);\n return true;\n};\n\nconst insertScript = (id, code, parent) => {\n if (!id || !code || typeof document === 'undefined') {\n return false;\n }\n\n let element = document.getElementById(id);\n if (!element) {\n if (!parent) {\n parent = document.body;\n } else if (typeof parent === 'string') {\n parent = document.querySelector(parent);\n }\n element = parent;\n }\n const tag = element.tagName;\n const scriptID = `script-${id}`;\n let script = document.querySelector(`${tag} > #${scriptID}`);\n if (script) {\n return true;\n }\n\n script = document.createElement('script');\n script.id = scriptID;\n script.type = 'text/javascript';\n script.text = code;\n element.insertBefore(script, element.children[0]);\n return true;\n};\n\nfunction appendScript(name, src) {\n return new Promise((resovle, reject) => {\n if (!name || !src || typeof document === 'undefined') {\n reject('Args is invaild!');\n }\n\n const id = 'script-' + name.toLowerCase();\n let script = document.getElementById(id);\n if (script) {\n return resovle(name);\n }\n\n const head = document.head || document.getElementsByTagName('head')[0];\n script = document.createElement('script');\n script.src = src;\n script.id = id;\n script.onload = () => {\n resovle(name);\n };\n head.appendChild(script);\n });\n}\n\nfunction addCssLink(obj, link, id) {\n if (!obj.cssLinks) {\n obj.cssLinks = [];\n } else {\n if (!Array.isArray(obj.cssLinks)) {\n obj.cssLinks = [obj.cssLinks];\n }\n }\n obj.cssLinks.push({\n id: id,\n link: link,\n });\n return obj;\n}\n\nconst opScript = function (script, root, promise) {\n let host = root;\n if (script.host && typeof script.host === 'string') {\n host = document.querySelector(script.host);\n }\n if (!script.inner) {\n if (!script.code) {\n return false;\n }\n\n if (typeof script.code === 'function') {\n const method = script.code;\n if (promise) {\n promise.then(() => {\n method();\n });\n return true;\n }\n\n method();\n return true;\n }\n\n if (promise) {\n promise.then(() => {\n loadScript(script.id, script.code, host);\n });\n return true;\n }\n return loadScript(script.id, script.code, host);\n }\n\n if (!showdown.helper.isArray(script.inner)) {\n script.inner = [script.inner];\n }\n if (script.code) {\n if (typeof script.code === 'function') {\n const method = script.code;\n if (promise) {\n promise.then(() => {\n method();\n });\n } else {\n method();\n }\n } else {\n if (promise) {\n promise.then(() => {\n if (!insertScript(script.id, script.code, host)) {\n console.log(format('Args is invaild with insert script!'), script);\n }\n });\n } else if (!insertScript(script.id, script.code, host)) {\n console.log(format('Args is invaild with insert script!'), script);\n }\n }\n }\n if (script.inner.length > 0) {\n for (let j = 0; j < script.inner.length; ++j) {\n const s = script.inner[j];\n if (!s.code) continue;\n\n if (typeof s.code === 'function') {\n const method = s.code;\n if (promise) {\n promise.then(() => {\n method();\n });\n } else {\n method();\n }\n continue;\n }\n\n let innerHost = host;\n if (s.host && typeof s.host === 'string') {\n innerHost = document.querySelector(s.host);\n }\n if (promise) {\n promise.then(() => {\n loadScript(s.id, s.code, innerHost);\n });\n continue;\n }\n loadScript(s.id, s.code, innerHost);\n }\n }\n return true;\n};\n\nconst showdownFlavors = ['github', 'ghost', 'vanilla', 'original', 'allon'];\nconst mermaidThemes = ['default', 'forest', 'dark', 'neutral'];\nconst vegaThemes = ['excel', 'ggplot2', 'quartz', 'vox', 'dark'];\nconst vegaRenderers = ['canvas', 'svg'];\nconst plantumlImgFmts = ['svg', 'png', 'jpg'];\n\n// defaultOptions.vega is embedOptions of vega-embed;\n// defaultOptions.katex is config of katex,\n// format is { delimiters: [ { left: '$$', right: '$$', display: true | false | undefined, asciimath: true | undefined }] };\n// defaultOptions.mermaid is config of mermaidAPI;\n// defaultOptions.plantuml is {umlWebSite: string, imageFormat: string};\n// defaultOptions.showdown is flavor and ShowdownOptions of showdown\nconst showdowns = {\n showdown: showdown,\n converter: null,\n defaultOptions: {\n showdown: getOptions(),\n plantuml: { imageFormat: 'svg' },\n mermaid: { theme: 'default' },\n katex: {},\n vega: { theme: 'vox' },\n },\n defaultExtensions: {},\n defaultAsyncExtensions: {},\n markdownDecodeFilter: function (doc) {\n return '';\n },\n initDefaultOptions: function () {\n if (!this.defaultOptions) {\n this.defaultOptions = {\n showdown: {},\n plantuml: {},\n mermaid: {},\n katex: {},\n vega: {},\n };\n }\n },\n setFlavor: function (name) {\n this.showdown.setFlavor(name);\n if (this.converter) {\n this.converter.setFlavor(name);\n }\n },\n addOptions: function (options) {\n for (const key in options) {\n if (key !== 'flavor') {\n this.showdown.setOption(key, options[key]);\n if (this.converter) {\n this.converter.setOption(key, options[key]);\n }\n }\n }\n },\n addExtension: function (name, extension) {\n this.removeExtension(name);\n if (typeof name === 'string') {\n try {\n showdown.extension(name, extension);\n if (this.converter) {\n this.converter.addExtension(name);\n }\n } catch (err) {\n console.log(err);\n }\n }\n },\n removeExtension: function (name) {\n if (typeof name !== 'string') return;\n if (this.converter) {\n let ext = null;\n try {\n ext = showdown.extension(name);\n } catch (err) {\n console.log(err);\n }\n if (!ext) return;\n this.converter.removeExtension(ext);\n }\n showdown.removeExtension(name);\n },\n addAsyncExtension: function (name, extension) {\n this.removeAsyncExtension(name);\n if (typeof name === 'string') {\n try {\n showdown.asyncExtension(name, extension);\n if (this.converter) {\n this.converter.addAsyncExtension(name);\n }\n } catch (err) {\n console.log(err);\n }\n }\n },\n removeAsyncExtension: function (name) {\n if (typeof name !== 'string') return;\n if (this.converter) {\n let ext = null;\n try {\n ext = showdown.asyncExtension(name);\n } catch (err) {\n console.log(err);\n }\n if (!ext) return;\n this.converter.removeAsyncExtension(ext);\n }\n showdown.removeAsyncExtension(name);\n },\n setCDN: function (cdnname, defScheme, distScheme, uriPath) {\n if (typeof cdnname === 'string' && cdnname) {\n cdnjs.setCDN(cdnname, defScheme, distScheme, uriPath);\n }\n },\n setShowdownFlavor: function (name) {\n this.initDefaultOptions();\n if (name) {\n if (showdownFlavors.indexOf(name) === -1) {\n name = 'github';\n }\n this.defaultOptions.showdown.flavor = name;\n this.setFlavor(name);\n }\n },\n setShowdownOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.showdown = Object.assign(this.defaultOptions.showdown || {}, options);\n this.setShowdownFlavor(this.defaultOptions.showdown.flavor);\n this.addOptions(this.defaultOptions.showdown);\n return this.defaultOptions.showdown;\n },\n setPlantumlOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.plantuml = Object.assign(this.defaultOptions.plantuml || {}, options);\n const imageFormat = this.defaultOptions.plantuml.imageFormat;\n if (imageFormat && plantumlImgFmts.indexOf(imageFormat) === -1) {\n this.defaultOptions.plantuml.imageFormat = 'png';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-plantuml', showdownPlantuml(this.defaultOptions.plantuml));\n }\n return this.defaultOptions.plantuml;\n },\n setMermaidOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.mermaid = Object.assign(this.defaultOptions.mermaid || {}, options);\n const theme = this.defaultOptions.mermaid.theme;\n if (theme && mermaidThemes.indexOf(theme) === -1) {\n this.defaultOptions.mermaid.theme = 'default';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-mermaid', showdownMermaid(this.defaultOptions.mermaid));\n }\n return this.defaultOptions.mermaid;\n },\n setKatexOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.katex = Object.assign(this.defaultOptions.katex || {}, options);\n if (this.converter) {\n this.addAsyncExtension('showdown-katex', showdownKatex(this.defaultOptions.katex));\n }\n return this.defaultOptions.katex;\n },\n setVegaOptions: function (options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.vega = Object.assign(this.defaultOptions.vega || {}, options);\n const theme = this.defaultOptions.vega.theme;\n if (theme && vegaThemes.indexOf(theme) === -1) {\n this.defaultOptions.vega.theme = 'vox';\n }\n const renderer = this.defaultOptions.vega.renderer;\n if (renderer && vegaRenderers.indexOf(renderer) === -1) {\n this.defaultOptions.vega.renderer = 'canvas';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-vega', showdownVega(this.defaultOptions.vega));\n }\n return this.defaultOptions.vega;\n },\n init: function (reset) {\n if (!this.converter) {\n const showdownOptions = this.defaultOptions ? this.defaultOptions.showdown || {} : {};\n const options = getOptions(showdownOptions);\n const extensions = getExtensions(this.defaultOptions, this.defaultExtensions);\n const asyncExtensions = getAsyncExtensions(this.defaultOptions, this.defaultAsyncExtensions);\n this.setFlavor(options.flavor);\n // converter instance of showdown\n this.converter = new showdown.Converter({\n extensions: extensions,\n }).initConvertExtObj(options.flavor, asyncExtensions);\n this.addOptions(options);\n } else {\n let resetOptions = {};\n if (typeof reset === 'boolean' && reset) {\n resetOptions = { option: true, extension: true };\n } else {\n resetOptions = reset;\n }\n if (typeof resetOptions === 'object') {\n if (resetOptions.hasOwnProperty('option') && resetOptions.option) {\n const showdownOptions = this.defaultOptions ? this.defaultOptions.showdown || {} : {};\n const options = getOptions(showdownOptions);\n this.addOptions(options);\n }\n if (resetOptions.hasOwnProperty('extension') && resetOptions.extension) {\n this.addAsyncExtension('showdown-plantuml', showdownPlantuml(this.defaultOptions.plantuml));\n this.addAsyncExtension('showdown-mermaid', showdownMermaid(this.defaultOptions.mermaid));\n this.addAsyncExtension('showdown-vega', showdownVega(this.defaultOptions.vega));\n }\n }\n }\n return this;\n },\n makeHtml: function (doc, callback) {\n let content = '';\n if (typeof doc === 'object') {\n if (typeof doc.content === 'string') {\n if (typeof doc.type === 'string') {\n switch (doc.type) {\n case 'zip':\n content = this.zDecode(doc.content);\n break;\n default:\n content = this.markdownDecodeFilter(doc) || doc.content;\n break;\n }\n } else {\n content = doc.content;\n }\n }\n } else {\n content = doc;\n }\n\n if (this.converter && content) {\n // Compatible with old versions, be deprecated in the future.\n function _checkCssTypes(obj) {\n return new Promise((resolve) => {\n if (obj.cssLinks && Array.isArray(obj.cssLinks)) {\n obj.cssTypes = { css: {} };\n obj.cssLinks.forEach((css) => {\n if (css.id === 'css-abc') {\n obj.cssTypes.hasAbc = true;\n obj.cssTypes.css.abc = css.link;\n return;\n }\n\n if (css.id === 'css-katex') {\n obj.cssTypes.hasKatex = true;\n obj.cssTypes.css.katex = css.link;\n return;\n }\n\n if (css.id === 'css-railroad') {\n obj.cssTypes.hasRailroad = true;\n obj.cssTypes.css.railroad = css.link;\n return;\n }\n\n if (css.id === 'css-sequence') {\n obj.cssTypes.hasSequence = true;\n obj.cssTypes.css.sequence = css.link;\n }\n });\n if (typeof callback === 'function' && callback) {\n callback(obj.cssTypes);\n }\n }\n return resolve(obj);\n });\n }\n\n return this.converter.asyncMakeHtml(content, _checkCssTypes).then((obj) => {\n content = `<div class='showdowns'>${obj.html}</div>`;\n if (obj.extras) {\n let extras = obj.extras;\n if (!showdown.helper.isArray(extras)) {\n extras = [extras];\n }\n for (let i = 0; i < extras.length; ++i) {\n if (typeof extras[i] !== 'string') continue;\n content += extras[i];\n }\n }\n return { html: content, scripts: obj.scripts, cssLinks: obj.cssLinks };\n });\n }\n return Promise.reject(!content ? 'Content is empty.' : 'Converter is invaild.');\n },\n completedHtml: function (scripts, element) {\n if (!showdown.helper.isArray(scripts)) {\n scripts = [scripts];\n }\n\n return new Promise((revole, reject) => {\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n for (let i = 0; i < scripts.length; ++i) {\n const script = scripts[i];\n if (script.outer) {\n if (!showdown.helper.isArray(script.outer)) {\n script.outer = [script.outer];\n }\n let o = script.outer[0];\n let result = appendScript(o.name, o.src);\n for (let k = 1; k < script.outer.length; ++k) {\n o = script.outer[k];\n result = result.then(() => {\n return appendScript(o.name, o.src);\n });\n }\n\n opScript(script, element, result);\n continue;\n }\n\n if (!opScript(script, element)) {\n return reject('Args is invaild!');\n }\n }\n revole(true);\n });\n },\n zDecode: function (zContent) {\n return zlibcodec.zDecode(zContent);\n },\n zEncode: function (content) {\n return zlibcodec.zEncode(content);\n },\n};\n\nexport default showdowns;\n"],"names":["showdown","ConverterExtObj","flavor","asyncExtensions","outputAsyncModifiers","currConvFlavor","_parseAsyncExtension","ext","name","helper","isString","stdExtName","asyncExtension","isUndefined","Error","isArray","validateExtension","i","length","type","push","forEach","this","addAsyncExtension","extension","removeAsyncExtension","a","j","splice","getAsyncExtensions","getCurrFlavor","setCurrFlavor","Converter","prototype","initConvertExtObj","extObj","resetOptions","converterOptions","globalOptions","getOptions","options","gOpt","hasOwnProperty","opt","setFlavor","preset","getFlavorOptions","defaultOptions","getDefaultOptions","option","getFlavor","removeExtension","exts","getAllExtensions","langExtensions","language","outputModifiers","output","asyncMakeHtml","text","callback","content","makeHtml","outputs","Promise","resolve","html","globals","converter","doc","DOMParser","parseFromString","wrapper","body","result","scripts","cssLinks","then","obj","filter","promise","innerHTML","extras","subParser","ghCodeBlocks","_dispatch","replace","wholeMatch","delim","langattr","codeblock","end","omitExtraWLInCodeBlocks","tables","parseStyles","sLine","test","parseHeaders","header","style","id","trim","tablesHeaderId","tableHeaderId","toLowerCase","parseCells","cells","row","col","cell","tablesMerge","direct","tablesRowspan","str","left","right","ii","mergeCells","parseTableContent","rawTable","headerless","tableLines","split","rawStyles","rawCells","headers","styles","map","s","shift","rawHeaders","tb","tblLgn","buildTable","parseTable","parseHeaderlessTable","escapeCharactersCallback","tablesHeaderless","currFlavor","flavors","github","ghCompatibleHeaderId","underline","rawHeaderId","ghost","allOn","_asyncExtensions","resetAsyncExtensions","orgSetFlavor","orgGetFlavorOptions","format","Date","Format","setFlavorOptions","Object","assign","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","S","getMilliseconds","matches","exec","getFullYear","substring","k","m","RegExp","n","cdnName","scheme","document","location","protocol","defScheme","distScheme","uriPath","cdnSrc","local","ABCJS","ABCJSCSS","echarts","Viz","Raphael","flowchart","mermaid","katex","katexCSS","renderMathInElement","railroad","railroadCSS","Snap","WebFont","underscore","sequence","sequenceCSS","WaveDrom","WaveDromSkin","default","lowkey","narrow","vega","vegaLite","vegaEmbed","cdnjs","jsdelivr","getCDN","getName","key","keys","val","getSrc","native","src","def","cdn","url","setCDN","scheme_default","scheme_dist","uri_path","at","getUrl","uri","URL","origin","prefix","loadScript","resovle","reject","script","getElementById","head","getElementsByTagName","createElement","onload","appendChild","unloadScript","e","removeChild","loadStyleSheet","css","link","rel","href","unloadStyleSheet","utils","interopDefault","ex","loadStyle","innerText","loadStylesheet","cssLink","stylesheet","code","element","res","rej","querySelector","removeAllStylesheet","querySelectorAll","renderCacheElement","window","el","className","display","outerHTML","renderElement","createElementMeta","dataset","lang","langobj","JSON","parse","diagramClass","align","width","height","textContent","classList","now","random","container","data","addCssLink","Array","addScript","addExtra","extra","hashString","hash","char","charCodeAt","imul","extName","cssCdnName","undefined","hasAbc","dync","abcCreateEnv","cursorControl","self","onReady","onStart","svg","cursor","createElementNS","setAttribute","setAttributeNS","beatSubdivisions","onBeat","beatNumber","totalBeats","totalTime","onEvent","ev","measureStart","lastSelection","remove","elements","note","add","top","onFinished","els","abcEnv","abcOptions","add_classes","responsive","setTune","render","userAction","synthControl","abc","renderAbc","disable","visualObj","synth","CreateSynth","init","response","catch","error","load","audio","supportsAudio","SynthController","displayLoop","displayRestart","displayPlay","displayProgress","displayWarp","loadABC","toString","stringify","onRenderAbc","meta","ownerDocument","parentNode","class","host","setTimeout","renderAbcElements","outer","inner","sync","dyncLoadScript","promiseArray","all","showdownAbc","config","createHeadingElement","toc","headingLevel","nexthead","parent","tagName","title","icon","child","createTextNode","appendTocElement","currTocNode","tempTocNode","preLevel","loadTocEvent","totalToc","divider","startX","startWidth","onDrag","moveX","clientX","newWidth","documentElement","clientWidth","stopDragging","removeEventListener","userSelect","startDragging","addEventListener","tocFoldIcon","onclick","chapters","icons","contains","tocCloseIcon","switchToc","tocSwitch","currentTarget","iconUse","getAttributeNS","showdownToc","firstHeadOne","extraDocs","swtichToc","insertBefore","tocTitle","locale","children","tocView","tocNode","standalone","prev","replaceChild","parseInt","substr","renderTocElements","showdownCss","engines","hasViz","instance","onRenderViz","engine","indexOf","viz","renderString","renderViz","renderVizElements","showdownViz","hasVegaEmbed","renderVega","isVegaLite","wval","eval","vegaRenderer","onRenderVega","renderVegaElements","vegaElements","vegaLiteElements","showdownVega","userOptions","actions","editor","theme","tooltip","renderer","showdownAlign","parser","childNode","firstChild","nodeType","results","nodeValue","match","nextSibling","renderAlignElements","AMquote","input","tag","tex","ttype","AMsymbols","notexcopy","invisible","func","rewriteleftright","acc","atname","atval","compareNames","s1","s2","AMnestingDepth","AMpreviousSymbol","AMcurrentSymbol","AMnames","AMremoveCharsAndBlanks","st","charAt","slice","AMposition","arr","h","AMgetSymbol","mk","tagst","more","integ","AMTremoveBrackets","node","leftchop","AMTgetTeXsymbol","symb","pre","AMTparseSexpr","symbol","newFrag","texsymbol","AMTparseExpr","result2","AMTparseIexpr","sym1","sym2","res2","rightbracket","addedright","len","mxout","pos","matrix","mxnestingd","subpos","lastsubposstart","mxanynestingd","columnaligns","lastmxsubcnt","subarr","join","AMTparseAMtoTeX","symlen","sort","refreshSymbols","AMinitSymbols","RenderMathInElement","katexElementCount","hasKatex","onRenderKatex","math","renderToString","renderKatex","isAsciimath","latex","codes","asciimathToTex","escapeRegExp","getConfig","userConfig","displayMode","throwOnError","errorColor","delimiters","_isObjectProperty","prop","_getDelimiter","delimiter","asciimath","concat","showdownKatex","inlineMathCount","mathDelimiters","replacer","childNodes","nodeName","newText","reduce","that","asyncRenderKatex","renderBlockElements","hasEcharts","onRenderEcharts","renderEcharts","ssr","chart","getInstanceByDom","setOption","echartRenderer","renderEchartsElements","showdownEcharts","show","animation","useDirtyRect","hasMermaid","onRenderMermaid","renderMermaid","renderMermaidElements","initialize","showdownMermaid","logLevel","startOnLoad","arrowMarkerAbsolute","curve","gantt","axisFormat","actorMargin","append3bytes","b1","b2","b3","c2","c3","c4","r","encode6bit","b","String","fromCharCode","decode6bit","cc","c","extract3bytes","c1","encode","encode64","zlib","deflateRawSync","level","decode","inflateRawSync","Buffer","from","t","decode64","plantumlcodec","encodeuml","startuml","enduml","zlibcodec.encode","decodeuml","zlibcodec.decode","defaultImageFormat","umlElementCount","renderPlantumlElements","imageFormat","website","umlWebSite","imageExtension","uml","svgRender","svgData","fetch","dispatchEvent","ok","renderPlantumlElement","showdownPlantuml","hasRailroad","diagram","onRenderRailroad","railroadElement","addTo","renderRailroad","renderRailroadElements","showdownRailroad","Diagram","themes","SequenceJS","hasRaphael","hasSequence","renderSequence","elementid","CustomEvent","detail","onRenderSequence","drawSVG","showdownSequence","hasEvent","event","renderSequenceElements","wdCount","indexWD","hasWavedrom","onRenderWavedrom","index","RenderWaveForm","wdel","renderWavedrom","renderWavedromElements","skin","showdownWavedrom","skinConfig","log","showdownFootnotes","rawContent","_","padding","preContent","showdownContainer","classname","classes","unshift","hasFlowchart","onRenderFlowchart","renderFlowchart","showdownFlowchart","maxWidth","font","fill","scale","symbols","start","flowstate","past","current","future","request","invalid","approved","rejected","flowchartElements","flowElements","renderFlowchartElements","scriptID","insertScript","appendScript","opScript","root","method","innerHost","showdownFlavors","mermaidThemes","vegaThemes","vegaRenderers","plantumlImgFmts","showdowns","plantuml","defaultExtensions","defaultAsyncExtensions","markdownDecodeFilter","initDefaultOptions","addOptions","addExtension","err","cdnname","setShowdownFlavor","setShowdownOptions","setPlantumlOptions","setMermaidOptions","setKatexOptions","setVegaOptions","reset","extensions","nativeExtensions","extnames","getExtensions","mermaidOptions","plantumlOptions","katexOptions","vegaOptions","getExtension","zDecode","_checkCssTypes","cssTypes","completedHtml","revole","zContent","zEncode"],"mappings":"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"}