' + _exp + '
'\n }\n return String(value)\n })\n return text\n }\n\n _renderGithubGist(gist) {\n const srcScript = \"https://gist.github.com/\" + gist.trim() + \".js\"\n const srcIframe = \"data:text/html;charset=utf-8,<head><base target='_blank' /></head><body><script src='\" + srcScript + \"'></script></body>\"\n const result = ''\n return result\n .replaceAll('{css-class}', 'ratio ratio-21x9 mb-4')\n .replaceAll('{src-iframe}', srcIframe)\n }\n\n _renderBootstrapAlert(paramsStr, text) {\n const params = _parseParams(paramsStr, 1)\n const style = ['secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark'].indexOf(params['$0']) >= 0 ? params['$0'] : 'primary'\n const flex = params['flex'] ? true : false\n let result = '' + text + ''\n\n const lines = text.replaceAll(/^ {4}/gms, '').split(/\\n/)\n let incard = false\n let cardHeader = ''\n let cardImg = ''\n let cardTitle = ''\n let cardSubtitle = ''\n let cardText = ''\n let cardFooter = ''\n let cardParams = {}\n for (let i = 0; i < lines.length; i++) {\n if (lines[i] == '[[bs-card' || lines[i].startsWith('[[bs-card ')) {\n if (incard) {\n //error\n return errorResult\n }\n incard = true\n cardParams = _parseParams(lines[i].slice('[[bs-card'.length).trim())\n } else if (lines[i] == ']]') {\n if (!incard) {\n //error\n return errorResult\n }\n incard = false\n bsCardArr.push({\n header: cardHeader,\n img: cardImg,\n title: cardTitle,\n subtitle: cardSubtitle,\n text: cardText,\n footer: cardFooter,\n params: cardParams,\n })\n cardHeader = cardImg = cardTitle = cardSubtitle = cardText = cardFooter = ''\n } else {\n if (incard) {\n if (lines[i].toLowerCase().startsWith(\"-header:\")) {\n cardHeader = lines[i].slice('-header:'.length).trim()\n } else if (lines[i].toLowerCase().startsWith(\"-img:\")) {\n cardImg = lines[i].slice('-img:'.length).trim()\n cardImg = this._fixMediaUrl(cardImg)\n } else if (lines[i].toLowerCase().startsWith(\"-title:\")) {\n cardTitle = lines[i].slice('-title:'.length).trim()\n } else if (lines[i].toLowerCase().startsWith(\"-subtitle:\")) {\n cardSubtitle = lines[i].slice('-subtitle:'.length).trim()\n } else if (lines[i].toLowerCase().startsWith(\"-footer:\")) {\n cardFooter = lines[i].slice('-footer:'.length).trim()\n } else {\n cardText += lines[i] + '\\n'\n }\n } else if (lines[i].trim() != '') {\n //error\n return errorResult\n }\n }\n }\n\n const cardsEqual = params['equals'] ? true : (params['equal'] ? true : false)\n const lightbox = params['lightbox'] ? params['lightbox'] : false\n let cardsContent = ''\n for (let i = 0; i < bsCardArr.length; i++) {\n const cardData = bsCardArr[i]\n const noMute = cardData.params['no-muted'] ? true : (cardData.params['no-mute'] ? true : false)\n const cssClassText = cardData.params['text'] ? ' text-' + cardData.params['text'] : ''\n const cssClassBorder = cardData.params['border'] ? ' border-' + cardData.params['border'] : ''\n const cssClassBg = cardData.params['bg'] ? ' bg-' + cardData.params['bg'] : (cardData.params['background'] ? ' bg-' + cardData.params['background'] : '')\n const card = '
' + text + ''\n bsTabsGroupArr.push([])\n\n const lines = text.replaceAll(/^ {4}/gms, '').split(/\\n/)\n let intab = false\n let tabTitle = ''\n let tabBody = ''\n for (let i = 0; i < lines.length; i++) {\n if (lines[i] == '[[bs-tab' || lines[i].startsWith('[[bs-tab ')) {\n if (intab) {\n //error\n return errorResult\n }\n intab = true\n tabTitle = lines[i].slice('[[bs-tab'.length).trim()\n } else if (lines[i] == ']]') {\n if (!intab) {\n //error\n return errorResult\n }\n intab = false\n bsTabsGroupArr[bsTabsGroupId].push({title: tabTitle, body: tabBody})\n tabTitle = tabBody = ''\n } else {\n if (intab) {\n tabBody += lines[i] + '\\n'\n } else if (lines[i].trim() != '') {\n //error\n return errorResult\n }\n }\n }\n bsTabsGroupId++\n\n let tabHeader = '
' + code + ''\n }\n if (infoString.startsWith('gh-gist ')) {\n return this._renderGithubGist(_infoString.slice('gh-gist'.length))\n }\n if (infoString.startsWith('video ')) {\n return this._renderVideo(_infoString.slice('video'.length))\n }\n if (infoString == 'bs-alert' || infoString.startsWith('bs-alert ')) {\n return this._renderBootstrapAlert(_infoString.slice('bs-alert'.length), code)\n }\n if (infoString == 'bs-tabs' || infoString.startsWith('bs-tabs ')) {\n return this._renderBootstrapTabs(_infoString.slice('bs-tabs'.length), code)\n }\n if (infoString == 'bs-cards' || infoString.startsWith('bs-cards ')) {\n return this._renderBootstrapCards(_infoString.slice('bs-cards'.length), code)\n }\n const htmlCode = super.code(code, infoString, escaped)\n return '
/gi, '
')\n }\n return output\n }\n\n text(text) {\n return super.text(this.processInlineElements(text))\n }\n\n image(href, title, text) {\n const imgHtml = super.image(this._fixMediaUrl(href), title, text)\n return imgHtml.replaceAll(/^', '