// ==UserScript==
// @name 思源再提醒
// @namespace npm/vite-plugin-monkey
// @version 0.0.3
// @author monkey
// @description 为思源笔记添加再提醒功能
// @license MIT
// @icon https://vitejs.dev/logo.svg
// @homepage https://github.com/2234839/siyuan-reminder
// @match *://*
// @match *://*/*
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js
// @grant GM.registerMenuCommand
// @grant GM.xmlHttpRequest
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
(o=>{if(typeof GM_addStyle=="function"){GM_addStyle(o);return}const t=document.createElement("style");t.textContent=o,document.head.append(t)})(" .c-block[data-v-5fd0fecb]{border-bottom:solid #ccc 1px;display:flex}.c[data-v-c3481be8]{position:fixed;top:0;left:50vw;background-color:#faebd7;transform:translate(-50%);padding:0 10px;border-radius:0 0 10px 10px;color:#333}.c-list[data-v-c3481be8]{position:absolute;transform:translate(-50%);background-color:#faebd7;max-height:80vh;min-width:400px;overflow-y:auto;padding:5px 10px;border-radius:10px}.c-list[data-v-89518ebf]{position:absolute;transform:translate(-50%);background-color:#faebd7;max-height:80vh;min-width:400px;overflow-y:auto;padding:5px 10px;border-radius:10px;color:#333;z-index:9999} ");
(function (vue) {
'use strict';
var _GM = /* @__PURE__ */ (() => typeof GM != "undefined" ? GM : void 0)();
var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)();
var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)();
const gm_ref = (store_key2, value) => {
const _value = _GM_getValue(store_key2, value);
const _ref = vue.ref(_value);
vue.watchEffect(() => {
_GM_setValue(store_key2, _ref.value);
});
return _ref;
};
const store_key = "gm_reminder";
const server = gm_ref(store_key + "server", "http://127.0.0.1:6806");
const token$1 = gm_ref(store_key + "token", "");
const config$1 = vue.reactive({
server,
token: token$1
});
async function sql(stmt) {
return new Promise((resolve, reject) => {
_GM.xmlHttpRequest({
method: "POST",
url: `${config$1.server}/api/query/sql`,
data: JSON.stringify({ stmt }),
headers: {
"Content-Type": "application/json;charset=UTF-8",
Authorization: `Token ${config$1.token}`
},
onload(event) {
resolve(JSON.parse(event.responseText));
},
onerror(event) {
reject(event);
}
});
});
}
const pageUrl = new URL(location.href);
const anchorLinks = vue.reactive(/* @__PURE__ */ new Set());
async function 链接再提醒() {
setInterval(() => {
document.querySelectorAll("a").forEach((anchor) => {
anchorLinks.add(anchor.href);
});
}, 1e3);
}
链接再提醒();
vue.watch(
anchorLinks,
(value, oldValue) => {
console.log("[value]", value);
},
{ deep: true }
);
function getDefaultExportFromCjs(x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
}
function getAugmentedNamespace(n) {
if (n.__esModule) return n;
var f = n.default;
if (typeof f == "function") {
var a = function a2() {
if (this instanceof a2) {
return Reflect.construct(f, arguments, this.constructor);
}
return f.apply(this, arguments);
};
a.prototype = f.prototype;
} else a = {};
Object.defineProperty(a, "__esModule", { value: true });
Object.keys(n).forEach(function(k) {
var d = Object.getOwnPropertyDescriptor(n, k);
Object.defineProperty(a, k, d.get ? d : {
enumerable: true,
get: function() {
return n[k];
}
});
});
return a;
}
var utils$1 = {};
const Aacute = "Á";
const aacute = "á";
const Abreve = "Ă";
const abreve = "ă";
const ac = "∾";
const acd = "∿";
const acE = "∾̳";
const Acirc = "Â";
const acirc = "â";
const acute = "´";
const Acy = "А";
const acy = "а";
const AElig = "Æ";
const aelig = "æ";
const af = "";
const Afr = "𝔄";
const afr = "𝔞";
const Agrave = "À";
const agrave = "à";
const alefsym = "ℵ";
const aleph = "ℵ";
const Alpha = "Α";
const alpha = "α";
const Amacr = "Ā";
const amacr = "ā";
const amalg = "⨿";
const amp = "&";
const AMP = "&";
const andand = "⩕";
const And = "⩓";
const and = "∧";
const andd = "⩜";
const andslope = "⩘";
const andv = "⩚";
const ang = "∠";
const ange = "⦤";
const angle = "∠";
const angmsdaa = "⦨";
const angmsdab = "⦩";
const angmsdac = "⦪";
const angmsdad = "⦫";
const angmsdae = "⦬";
const angmsdaf = "⦭";
const angmsdag = "⦮";
const angmsdah = "⦯";
const angmsd = "∡";
const angrt = "∟";
const angrtvb = "⊾";
const angrtvbd = "⦝";
const angsph = "∢";
const angst = "Å";
const angzarr = "⍼";
const Aogon = "Ą";
const aogon = "ą";
const Aopf = "𝔸";
const aopf = "𝕒";
const apacir = "⩯";
const ap = "≈";
const apE = "⩰";
const ape = "≊";
const apid = "≋";
const apos = "'";
const ApplyFunction = "";
const approx = "≈";
const approxeq = "≊";
const Aring = "Å";
const aring = "å";
const Ascr = "𝒜";
const ascr = "𝒶";
const Assign = "≔";
const ast = "*";
const asymp = "≈";
const asympeq = "≍";
const Atilde = "Ã";
const atilde = "ã";
const Auml = "Ä";
const auml = "ä";
const awconint = "∳";
const awint = "⨑";
const backcong = "≌";
const backepsilon = "϶";
const backprime = "‵";
const backsim = "∽";
const backsimeq = "⋍";
const Backslash = "∖";
const Barv = "⫧";
const barvee = "⊽";
const barwed = "⌅";
const Barwed = "⌆";
const barwedge = "⌅";
const bbrk = "⎵";
const bbrktbrk = "⎶";
const bcong = "≌";
const Bcy = "Б";
const bcy = "б";
const bdquo = "„";
const becaus = "∵";
const because = "∵";
const Because = "∵";
const bemptyv = "⦰";
const bepsi = "϶";
const bernou = "ℬ";
const Bernoullis = "ℬ";
const Beta = "Β";
const beta = "β";
const beth = "ℶ";
const between = "≬";
const Bfr = "𝔅";
const bfr = "𝔟";
const bigcap = "⋂";
const bigcirc = "◯";
const bigcup = "⋃";
const bigodot = "⨀";
const bigoplus = "⨁";
const bigotimes = "⨂";
const bigsqcup = "⨆";
const bigstar = "★";
const bigtriangledown = "▽";
const bigtriangleup = "△";
const biguplus = "⨄";
const bigvee = "⋁";
const bigwedge = "⋀";
const bkarow = "⤍";
const blacklozenge = "⧫";
const blacksquare = "▪";
const blacktriangle = "▴";
const blacktriangledown = "▾";
const blacktriangleleft = "◂";
const blacktriangleright = "▸";
const blank = "␣";
const blk12 = "▒";
const blk14 = "░";
const blk34 = "▓";
const block$1 = "█";
const bne = "=⃥";
const bnequiv = "≡⃥";
const bNot = "⫭";
const bnot = "⌐";
const Bopf = "𝔹";
const bopf = "𝕓";
const bot = "⊥";
const bottom = "⊥";
const bowtie = "⋈";
const boxbox = "⧉";
const boxdl = "┐";
const boxdL = "╕";
const boxDl = "╖";
const boxDL = "╗";
const boxdr = "┌";
const boxdR = "╒";
const boxDr = "╓";
const boxDR = "╔";
const boxh = "─";
const boxH = "═";
const boxhd = "┬";
const boxHd = "╤";
const boxhD = "╥";
const boxHD = "╦";
const boxhu = "┴";
const boxHu = "╧";
const boxhU = "╨";
const boxHU = "╩";
const boxminus = "⊟";
const boxplus = "⊞";
const boxtimes = "⊠";
const boxul = "┘";
const boxuL = "╛";
const boxUl = "╜";
const boxUL = "╝";
const boxur = "└";
const boxuR = "╘";
const boxUr = "╙";
const boxUR = "╚";
const boxv = "│";
const boxV = "║";
const boxvh = "┼";
const boxvH = "╪";
const boxVh = "╫";
const boxVH = "╬";
const boxvl = "┤";
const boxvL = "╡";
const boxVl = "╢";
const boxVL = "╣";
const boxvr = "├";
const boxvR = "╞";
const boxVr = "╟";
const boxVR = "╠";
const bprime = "‵";
const breve = "˘";
const Breve = "˘";
const brvbar = "¦";
const bscr = "𝒷";
const Bscr = "ℬ";
const bsemi = "⁏";
const bsim = "∽";
const bsime = "⋍";
const bsolb = "⧅";
const bsol = "\\";
const bsolhsub = "⟈";
const bull = "•";
const bullet = "•";
const bump = "≎";
const bumpE = "⪮";
const bumpe = "≏";
const Bumpeq = "≎";
const bumpeq = "≏";
const Cacute = "Ć";
const cacute = "ć";
const capand = "⩄";
const capbrcup = "⩉";
const capcap = "⩋";
const cap = "∩";
const Cap = "⋒";
const capcup = "⩇";
const capdot = "⩀";
const CapitalDifferentialD = "ⅅ";
const caps = "∩︀";
const caret = "⁁";
const caron = "ˇ";
const Cayleys = "ℭ";
const ccaps = "⩍";
const Ccaron = "Č";
const ccaron = "č";
const Ccedil = "Ç";
const ccedil = "ç";
const Ccirc = "Ĉ";
const ccirc = "ĉ";
const Cconint = "∰";
const ccups = "⩌";
const ccupssm = "⩐";
const Cdot = "Ċ";
const cdot = "ċ";
const cedil = "¸";
const Cedilla = "¸";
const cemptyv = "⦲";
const cent = "¢";
const centerdot = "·";
const CenterDot = "·";
const cfr = "𝔠";
const Cfr = "ℭ";
const CHcy = "Ч";
const chcy = "ч";
const check = "✓";
const checkmark = "✓";
const Chi = "Χ";
const chi = "χ";
const circ = "ˆ";
const circeq = "≗";
const circlearrowleft = "↺";
const circlearrowright = "↻";
const circledast = "⊛";
const circledcirc = "⊚";
const circleddash = "⊝";
const CircleDot = "⊙";
const circledR = "®";
const circledS = "Ⓢ";
const CircleMinus = "⊖";
const CirclePlus = "⊕";
const CircleTimes = "⊗";
const cir = "○";
const cirE = "⧃";
const cire = "≗";
const cirfnint = "⨐";
const cirmid = "⫯";
const cirscir = "⧂";
const ClockwiseContourIntegral = "∲";
const CloseCurlyDoubleQuote = "”";
const CloseCurlyQuote = "’";
const clubs = "♣";
const clubsuit = "♣";
const colon = ":";
const Colon = "∷";
const Colone = "⩴";
const colone = "≔";
const coloneq = "≔";
const comma = ",";
const commat = "@";
const comp = "∁";
const compfn = "∘";
const complement = "∁";
const complexes = "ℂ";
const cong = "≅";
const congdot = "⩭";
const Congruent = "≡";
const conint = "∮";
const Conint = "∯";
const ContourIntegral = "∮";
const copf = "𝕔";
const Copf = "ℂ";
const coprod = "∐";
const Coproduct = "∐";
const copy = "©";
const COPY = "©";
const copysr = "℗";
const CounterClockwiseContourIntegral = "∳";
const crarr = "↵";
const cross = "✗";
const Cross = "⨯";
const Cscr = "𝒞";
const cscr = "𝒸";
const csub = "⫏";
const csube = "⫑";
const csup = "⫐";
const csupe = "⫒";
const ctdot = "⋯";
const cudarrl = "⤸";
const cudarrr = "⤵";
const cuepr = "⋞";
const cuesc = "⋟";
const cularr = "↶";
const cularrp = "⤽";
const cupbrcap = "⩈";
const cupcap = "⩆";
const CupCap = "≍";
const cup = "∪";
const Cup = "⋓";
const cupcup = "⩊";
const cupdot = "⊍";
const cupor = "⩅";
const cups = "∪︀";
const curarr = "↷";
const curarrm = "⤼";
const curlyeqprec = "⋞";
const curlyeqsucc = "⋟";
const curlyvee = "⋎";
const curlywedge = "⋏";
const curren = "¤";
const curvearrowleft = "↶";
const curvearrowright = "↷";
const cuvee = "⋎";
const cuwed = "⋏";
const cwconint = "∲";
const cwint = "∱";
const cylcty = "⌭";
const dagger = "†";
const Dagger = "‡";
const daleth = "ℸ";
const darr = "↓";
const Darr = "↡";
const dArr = "⇓";
const dash = "‐";
const Dashv = "⫤";
const dashv = "⊣";
const dbkarow = "⤏";
const dblac = "˝";
const Dcaron = "Ď";
const dcaron = "ď";
const Dcy = "Д";
const dcy = "д";
const ddagger = "‡";
const ddarr = "⇊";
const DD = "ⅅ";
const dd = "ⅆ";
const DDotrahd = "⤑";
const ddotseq = "⩷";
const deg = "°";
const Del = "∇";
const Delta = "Δ";
const delta = "δ";
const demptyv = "⦱";
const dfisht = "⥿";
const Dfr = "𝔇";
const dfr = "𝔡";
const dHar = "⥥";
const dharl = "⇃";
const dharr = "⇂";
const DiacriticalAcute = "´";
const DiacriticalDot = "˙";
const DiacriticalDoubleAcute = "˝";
const DiacriticalGrave = "`";
const DiacriticalTilde = "˜";
const diam = "⋄";
const diamond = "⋄";
const Diamond = "⋄";
const diamondsuit = "♦";
const diams = "♦";
const die = "¨";
const DifferentialD = "ⅆ";
const digamma = "ϝ";
const disin = "⋲";
const div = "÷";
const divide = "÷";
const divideontimes = "⋇";
const divonx = "⋇";
const DJcy = "Ђ";
const djcy = "ђ";
const dlcorn = "⌞";
const dlcrop = "⌍";
const dollar = "$";
const Dopf = "𝔻";
const dopf = "𝕕";
const Dot = "¨";
const dot = "˙";
const DotDot = "⃜";
const doteq = "≐";
const doteqdot = "≑";
const DotEqual = "≐";
const dotminus = "∸";
const dotplus = "∔";
const dotsquare = "⊡";
const doublebarwedge = "⌆";
const DoubleContourIntegral = "∯";
const DoubleDot = "¨";
const DoubleDownArrow = "⇓";
const DoubleLeftArrow = "⇐";
const DoubleLeftRightArrow = "⇔";
const DoubleLeftTee = "⫤";
const DoubleLongLeftArrow = "⟸";
const DoubleLongLeftRightArrow = "⟺";
const DoubleLongRightArrow = "⟹";
const DoubleRightArrow = "⇒";
const DoubleRightTee = "⊨";
const DoubleUpArrow = "⇑";
const DoubleUpDownArrow = "⇕";
const DoubleVerticalBar = "∥";
const DownArrowBar = "⤓";
const downarrow = "↓";
const DownArrow = "↓";
const Downarrow = "⇓";
const DownArrowUpArrow = "⇵";
const DownBreve = "̑";
const downdownarrows = "⇊";
const downharpoonleft = "⇃";
const downharpoonright = "⇂";
const DownLeftRightVector = "⥐";
const DownLeftTeeVector = "⥞";
const DownLeftVectorBar = "⥖";
const DownLeftVector = "↽";
const DownRightTeeVector = "⥟";
const DownRightVectorBar = "⥗";
const DownRightVector = "⇁";
const DownTeeArrow = "↧";
const DownTee = "⊤";
const drbkarow = "⤐";
const drcorn = "⌟";
const drcrop = "⌌";
const Dscr = "𝒟";
const dscr = "𝒹";
const DScy = "Ѕ";
const dscy = "ѕ";
const dsol = "⧶";
const Dstrok = "Đ";
const dstrok = "đ";
const dtdot = "⋱";
const dtri = "▿";
const dtrif = "▾";
const duarr = "⇵";
const duhar = "⥯";
const dwangle = "⦦";
const DZcy = "Џ";
const dzcy = "џ";
const dzigrarr = "⟿";
const Eacute = "É";
const eacute = "é";
const easter = "⩮";
const Ecaron = "Ě";
const ecaron = "ě";
const Ecirc = "Ê";
const ecirc = "ê";
const ecir = "≖";
const ecolon = "≕";
const Ecy = "Э";
const ecy = "э";
const eDDot = "⩷";
const Edot = "Ė";
const edot = "ė";
const eDot = "≑";
const ee = "ⅇ";
const efDot = "≒";
const Efr = "𝔈";
const efr = "𝔢";
const eg = "⪚";
const Egrave = "È";
const egrave = "è";
const egs = "⪖";
const egsdot = "⪘";
const el = "⪙";
const Element = "∈";
const elinters = "⏧";
const ell = "ℓ";
const els = "⪕";
const elsdot = "⪗";
const Emacr = "Ē";
const emacr = "ē";
const empty = "∅";
const emptyset = "∅";
const EmptySmallSquare = "◻";
const emptyv = "∅";
const EmptyVerySmallSquare = "▫";
const emsp13 = " ";
const emsp14 = " ";
const emsp = " ";
const ENG = "Ŋ";
const eng = "ŋ";
const ensp = " ";
const Eogon = "Ę";
const eogon = "ę";
const Eopf = "𝔼";
const eopf = "𝕖";
const epar = "⋕";
const eparsl = "⧣";
const eplus = "⩱";
const epsi = "ε";
const Epsilon = "Ε";
const epsilon = "ε";
const epsiv = "ϵ";
const eqcirc = "≖";
const eqcolon = "≕";
const eqsim = "≂";
const eqslantgtr = "⪖";
const eqslantless = "⪕";
const Equal = "⩵";
const equals = "=";
const EqualTilde = "≂";
const equest = "≟";
const Equilibrium = "⇌";
const equiv = "≡";
const equivDD = "⩸";
const eqvparsl = "⧥";
const erarr = "⥱";
const erDot = "≓";
const escr = "ℯ";
const Escr = "ℰ";
const esdot = "≐";
const Esim = "⩳";
const esim = "≂";
const Eta = "Η";
const eta = "η";
const ETH = "Ð";
const eth = "ð";
const Euml = "Ë";
const euml = "ë";
const euro = "€";
const excl = "!";
const exist = "∃";
const Exists = "∃";
const expectation = "ℰ";
const exponentiale = "ⅇ";
const ExponentialE = "ⅇ";
const fallingdotseq = "≒";
const Fcy = "Ф";
const fcy = "ф";
const female = "♀";
const ffilig = "ffi";
const fflig = "ff";
const ffllig = "ffl";
const Ffr = "𝔉";
const ffr = "𝔣";
const filig = "fi";
const FilledSmallSquare = "◼";
const FilledVerySmallSquare = "▪";
const fjlig = "fj";
const flat = "♭";
const fllig = "fl";
const fltns = "▱";
const fnof = "ƒ";
const Fopf = "𝔽";
const fopf = "𝕗";
const forall = "∀";
const ForAll = "∀";
const fork = "⋔";
const forkv = "⫙";
const Fouriertrf = "ℱ";
const fpartint = "⨍";
const frac12 = "½";
const frac13 = "⅓";
const frac14 = "¼";
const frac15 = "⅕";
const frac16 = "⅙";
const frac18 = "⅛";
const frac23 = "⅔";
const frac25 = "⅖";
const frac34 = "¾";
const frac35 = "⅗";
const frac38 = "⅜";
const frac45 = "⅘";
const frac56 = "⅚";
const frac58 = "⅝";
const frac78 = "⅞";
const frasl = "⁄";
const frown = "⌢";
const fscr = "𝒻";
const Fscr = "ℱ";
const gacute = "ǵ";
const Gamma = "Γ";
const gamma = "γ";
const Gammad = "Ϝ";
const gammad = "ϝ";
const gap = "⪆";
const Gbreve = "Ğ";
const gbreve = "ğ";
const Gcedil = "Ģ";
const Gcirc = "Ĝ";
const gcirc = "ĝ";
const Gcy = "Г";
const gcy = "г";
const Gdot = "Ġ";
const gdot = "ġ";
const ge = "≥";
const gE = "≧";
const gEl = "⪌";
const gel = "⋛";
const geq = "≥";
const geqq = "≧";
const geqslant = "⩾";
const gescc = "⪩";
const ges = "⩾";
const gesdot = "⪀";
const gesdoto = "⪂";
const gesdotol = "⪄";
const gesl = "⋛︀";
const gesles = "⪔";
const Gfr = "𝔊";
const gfr = "𝔤";
const gg = "≫";
const Gg = "⋙";
const ggg = "⋙";
const gimel = "ℷ";
const GJcy = "Ѓ";
const gjcy = "ѓ";
const gla = "⪥";
const gl = "≷";
const glE = "⪒";
const glj = "⪤";
const gnap = "⪊";
const gnapprox = "⪊";
const gne = "⪈";
const gnE = "≩";
const gneq = "⪈";
const gneqq = "≩";
const gnsim = "⋧";
const Gopf = "𝔾";
const gopf = "𝕘";
const grave = "`";
const GreaterEqual = "≥";
const GreaterEqualLess = "⋛";
const GreaterFullEqual = "≧";
const GreaterGreater = "⪢";
const GreaterLess = "≷";
const GreaterSlantEqual = "⩾";
const GreaterTilde = "≳";
const Gscr = "𝒢";
const gscr = "ℊ";
const gsim = "≳";
const gsime = "⪎";
const gsiml = "⪐";
const gtcc = "⪧";
const gtcir = "⩺";
const gt = ">";
const GT = ">";
const Gt = "≫";
const gtdot = "⋗";
const gtlPar = "⦕";
const gtquest = "⩼";
const gtrapprox = "⪆";
const gtrarr = "⥸";
const gtrdot = "⋗";
const gtreqless = "⋛";
const gtreqqless = "⪌";
const gtrless = "≷";
const gtrsim = "≳";
const gvertneqq = "≩︀";
const gvnE = "≩︀";
const Hacek = "ˇ";
const hairsp = " ";
const half = "½";
const hamilt = "ℋ";
const HARDcy = "Ъ";
const hardcy = "ъ";
const harrcir = "⥈";
const harr = "↔";
const hArr = "⇔";
const harrw = "↭";
const Hat = "^";
const hbar = "ℏ";
const Hcirc = "Ĥ";
const hcirc = "ĥ";
const hearts = "♥";
const heartsuit = "♥";
const hellip = "…";
const hercon = "⊹";
const hfr = "𝔥";
const Hfr = "ℌ";
const HilbertSpace = "ℋ";
const hksearow = "⤥";
const hkswarow = "⤦";
const hoarr = "⇿";
const homtht = "∻";
const hookleftarrow = "↩";
const hookrightarrow = "↪";
const hopf = "𝕙";
const Hopf = "ℍ";
const horbar = "―";
const HorizontalLine = "─";
const hscr = "𝒽";
const Hscr = "ℋ";
const hslash = "ℏ";
const Hstrok = "Ħ";
const hstrok = "ħ";
const HumpDownHump = "≎";
const HumpEqual = "≏";
const hybull = "⁃";
const hyphen = "‐";
const Iacute = "Í";
const iacute = "í";
const ic = "";
const Icirc = "Î";
const icirc = "î";
const Icy = "И";
const icy = "и";
const Idot = "İ";
const IEcy = "Е";
const iecy = "е";
const iexcl = "¡";
const iff = "⇔";
const ifr = "𝔦";
const Ifr = "ℑ";
const Igrave = "Ì";
const igrave = "ì";
const ii = "ⅈ";
const iiiint = "⨌";
const iiint = "∭";
const iinfin = "⧜";
const iiota = "℩";
const IJlig = "IJ";
const ijlig = "ij";
const Imacr = "Ī";
const imacr = "ī";
const image$1 = "ℑ";
const ImaginaryI = "ⅈ";
const imagline = "ℐ";
const imagpart = "ℑ";
const imath = "ı";
const Im = "ℑ";
const imof = "⊷";
const imped = "Ƶ";
const Implies = "⇒";
const incare = "℅";
const infin = "∞";
const infintie = "⧝";
const inodot = "ı";
const intcal = "⊺";
const int = "∫";
const Int = "∬";
const integers = "ℤ";
const Integral = "∫";
const intercal = "⊺";
const Intersection = "⋂";
const intlarhk = "⨗";
const intprod = "⨼";
const InvisibleComma = "";
const InvisibleTimes = "";
const IOcy = "Ё";
const iocy = "ё";
const Iogon = "Į";
const iogon = "į";
const Iopf = "𝕀";
const iopf = "𝕚";
const Iota = "Ι";
const iota = "ι";
const iprod = "⨼";
const iquest = "¿";
const iscr = "𝒾";
const Iscr = "ℐ";
const isin = "∈";
const isindot = "⋵";
const isinE = "⋹";
const isins = "⋴";
const isinsv = "⋳";
const isinv = "∈";
const it = "";
const Itilde = "Ĩ";
const itilde = "ĩ";
const Iukcy = "І";
const iukcy = "і";
const Iuml = "Ï";
const iuml = "ï";
const Jcirc = "Ĵ";
const jcirc = "ĵ";
const Jcy = "Й";
const jcy = "й";
const Jfr = "𝔍";
const jfr = "𝔧";
const jmath = "ȷ";
const Jopf = "𝕁";
const jopf = "𝕛";
const Jscr = "𝒥";
const jscr = "𝒿";
const Jsercy = "Ј";
const jsercy = "ј";
const Jukcy = "Є";
const jukcy = "є";
const Kappa = "Κ";
const kappa = "κ";
const kappav = "ϰ";
const Kcedil = "Ķ";
const kcedil = "ķ";
const Kcy = "К";
const kcy = "к";
const Kfr = "𝔎";
const kfr = "𝔨";
const kgreen = "ĸ";
const KHcy = "Х";
const khcy = "х";
const KJcy = "Ќ";
const kjcy = "ќ";
const Kopf = "𝕂";
const kopf = "𝕜";
const Kscr = "𝒦";
const kscr = "𝓀";
const lAarr = "⇚";
const Lacute = "Ĺ";
const lacute = "ĺ";
const laemptyv = "⦴";
const lagran = "ℒ";
const Lambda = "Λ";
const lambda = "λ";
const lang = "⟨";
const Lang = "⟪";
const langd = "⦑";
const langle = "⟨";
const lap = "⪅";
const Laplacetrf = "ℒ";
const laquo = "«";
const larrb = "⇤";
const larrbfs = "⤟";
const larr = "←";
const Larr = "↞";
const lArr = "⇐";
const larrfs = "⤝";
const larrhk = "↩";
const larrlp = "↫";
const larrpl = "⤹";
const larrsim = "⥳";
const larrtl = "↢";
const latail = "⤙";
const lAtail = "⤛";
const lat = "⪫";
const late = "⪭";
const lates = "⪭︀";
const lbarr = "⤌";
const lBarr = "⤎";
const lbbrk = "❲";
const lbrace = "{";
const lbrack = "[";
const lbrke = "⦋";
const lbrksld = "⦏";
const lbrkslu = "⦍";
const Lcaron = "Ľ";
const lcaron = "ľ";
const Lcedil = "Ļ";
const lcedil = "ļ";
const lceil = "⌈";
const lcub = "{";
const Lcy = "Л";
const lcy = "л";
const ldca = "⤶";
const ldquo = "“";
const ldquor = "„";
const ldrdhar = "⥧";
const ldrushar = "⥋";
const ldsh = "↲";
const le = "≤";
const lE = "≦";
const LeftAngleBracket = "⟨";
const LeftArrowBar = "⇤";
const leftarrow = "←";
const LeftArrow = "←";
const Leftarrow = "⇐";
const LeftArrowRightArrow = "⇆";
const leftarrowtail = "↢";
const LeftCeiling = "⌈";
const LeftDoubleBracket = "⟦";
const LeftDownTeeVector = "⥡";
const LeftDownVectorBar = "⥙";
const LeftDownVector = "⇃";
const LeftFloor = "⌊";
const leftharpoondown = "↽";
const leftharpoonup = "↼";
const leftleftarrows = "⇇";
const leftrightarrow = "↔";
const LeftRightArrow = "↔";
const Leftrightarrow = "⇔";
const leftrightarrows = "⇆";
const leftrightharpoons = "⇋";
const leftrightsquigarrow = "↭";
const LeftRightVector = "⥎";
const LeftTeeArrow = "↤";
const LeftTee = "⊣";
const LeftTeeVector = "⥚";
const leftthreetimes = "⋋";
const LeftTriangleBar = "⧏";
const LeftTriangle = "⊲";
const LeftTriangleEqual = "⊴";
const LeftUpDownVector = "⥑";
const LeftUpTeeVector = "⥠";
const LeftUpVectorBar = "⥘";
const LeftUpVector = "↿";
const LeftVectorBar = "⥒";
const LeftVector = "↼";
const lEg = "⪋";
const leg = "⋚";
const leq = "≤";
const leqq = "≦";
const leqslant = "⩽";
const lescc = "⪨";
const les = "⩽";
const lesdot = "⩿";
const lesdoto = "⪁";
const lesdotor = "⪃";
const lesg = "⋚︀";
const lesges = "⪓";
const lessapprox = "⪅";
const lessdot = "⋖";
const lesseqgtr = "⋚";
const lesseqqgtr = "⪋";
const LessEqualGreater = "⋚";
const LessFullEqual = "≦";
const LessGreater = "≶";
const lessgtr = "≶";
const LessLess = "⪡";
const lesssim = "≲";
const LessSlantEqual = "⩽";
const LessTilde = "≲";
const lfisht = "⥼";
const lfloor = "⌊";
const Lfr = "𝔏";
const lfr = "𝔩";
const lg = "≶";
const lgE = "⪑";
const lHar = "⥢";
const lhard = "↽";
const lharu = "↼";
const lharul = "⥪";
const lhblk = "▄";
const LJcy = "Љ";
const ljcy = "љ";
const llarr = "⇇";
const ll = "≪";
const Ll = "⋘";
const llcorner = "⌞";
const Lleftarrow = "⇚";
const llhard = "⥫";
const lltri = "◺";
const Lmidot = "Ŀ";
const lmidot = "ŀ";
const lmoustache = "⎰";
const lmoust = "⎰";
const lnap = "⪉";
const lnapprox = "⪉";
const lne = "⪇";
const lnE = "≨";
const lneq = "⪇";
const lneqq = "≨";
const lnsim = "⋦";
const loang = "⟬";
const loarr = "⇽";
const lobrk = "⟦";
const longleftarrow = "⟵";
const LongLeftArrow = "⟵";
const Longleftarrow = "⟸";
const longleftrightarrow = "⟷";
const LongLeftRightArrow = "⟷";
const Longleftrightarrow = "⟺";
const longmapsto = "⟼";
const longrightarrow = "⟶";
const LongRightArrow = "⟶";
const Longrightarrow = "⟹";
const looparrowleft = "↫";
const looparrowright = "↬";
const lopar = "⦅";
const Lopf = "𝕃";
const lopf = "𝕝";
const loplus = "⨭";
const lotimes = "⨴";
const lowast = "∗";
const lowbar = "_";
const LowerLeftArrow = "↙";
const LowerRightArrow = "↘";
const loz = "◊";
const lozenge = "◊";
const lozf = "⧫";
const lpar = "(";
const lparlt = "⦓";
const lrarr = "⇆";
const lrcorner = "⌟";
const lrhar = "⇋";
const lrhard = "⥭";
const lrm = "";
const lrtri = "⊿";
const lsaquo = "‹";
const lscr = "𝓁";
const Lscr = "ℒ";
const lsh = "↰";
const Lsh = "↰";
const lsim = "≲";
const lsime = "⪍";
const lsimg = "⪏";
const lsqb = "[";
const lsquo = "‘";
const lsquor = "‚";
const Lstrok = "Ł";
const lstrok = "ł";
const ltcc = "⪦";
const ltcir = "⩹";
const lt = "<";
const LT = "<";
const Lt = "≪";
const ltdot = "⋖";
const lthree = "⋋";
const ltimes = "⋉";
const ltlarr = "⥶";
const ltquest = "⩻";
const ltri = "◃";
const ltrie = "⊴";
const ltrif = "◂";
const ltrPar = "⦖";
const lurdshar = "⥊";
const luruhar = "⥦";
const lvertneqq = "≨︀";
const lvnE = "≨︀";
const macr = "¯";
const male = "♂";
const malt = "✠";
const maltese = "✠";
const map = "↦";
const mapsto = "↦";
const mapstodown = "↧";
const mapstoleft = "↤";
const mapstoup = "↥";
const marker = "▮";
const mcomma = "⨩";
const Mcy = "М";
const mcy = "м";
const mdash = "—";
const mDDot = "∺";
const measuredangle = "∡";
const MediumSpace = " ";
const Mellintrf = "ℳ";
const Mfr = "𝔐";
const mfr = "𝔪";
const mho = "℧";
const micro = "µ";
const midast = "*";
const midcir = "⫰";
const mid = "∣";
const middot = "·";
const minusb = "⊟";
const minus = "−";
const minusd = "∸";
const minusdu = "⨪";
const MinusPlus = "∓";
const mlcp = "⫛";
const mldr = "…";
const mnplus = "∓";
const models = "⊧";
const Mopf = "𝕄";
const mopf = "𝕞";
const mp = "∓";
const mscr = "𝓂";
const Mscr = "ℳ";
const mstpos = "∾";
const Mu = "Μ";
const mu = "μ";
const multimap = "⊸";
const mumap = "⊸";
const nabla = "∇";
const Nacute = "Ń";
const nacute = "ń";
const nang = "∠⃒";
const nap = "≉";
const napE = "⩰̸";
const napid = "≋̸";
const napos = "ʼn";
const napprox = "≉";
const natural = "♮";
const naturals = "ℕ";
const natur = "♮";
const nbsp = " ";
const nbump = "≎̸";
const nbumpe = "≏̸";
const ncap = "⩃";
const Ncaron = "Ň";
const ncaron = "ň";
const Ncedil = "Ņ";
const ncedil = "ņ";
const ncong = "≇";
const ncongdot = "⩭̸";
const ncup = "⩂";
const Ncy = "Н";
const ncy = "н";
const ndash = "–";
const nearhk = "⤤";
const nearr = "↗";
const neArr = "⇗";
const nearrow = "↗";
const ne = "≠";
const nedot = "≐̸";
const NegativeMediumSpace = "";
const NegativeThickSpace = "";
const NegativeThinSpace = "";
const NegativeVeryThinSpace = "";
const nequiv = "≢";
const nesear = "⤨";
const nesim = "≂̸";
const NestedGreaterGreater = "≫";
const NestedLessLess = "≪";
const NewLine = "\n";
const nexist = "∄";
const nexists = "∄";
const Nfr = "𝔑";
const nfr = "𝔫";
const ngE = "≧̸";
const nge = "≱";
const ngeq = "≱";
const ngeqq = "≧̸";
const ngeqslant = "⩾̸";
const nges = "⩾̸";
const nGg = "⋙̸";
const ngsim = "≵";
const nGt = "≫⃒";
const ngt = "≯";
const ngtr = "≯";
const nGtv = "≫̸";
const nharr = "↮";
const nhArr = "⇎";
const nhpar = "⫲";
const ni = "∋";
const nis = "⋼";
const nisd = "⋺";
const niv = "∋";
const NJcy = "Њ";
const njcy = "њ";
const nlarr = "↚";
const nlArr = "⇍";
const nldr = "‥";
const nlE = "≦̸";
const nle = "≰";
const nleftarrow = "↚";
const nLeftarrow = "⇍";
const nleftrightarrow = "↮";
const nLeftrightarrow = "⇎";
const nleq = "≰";
const nleqq = "≦̸";
const nleqslant = "⩽̸";
const nles = "⩽̸";
const nless = "≮";
const nLl = "⋘̸";
const nlsim = "≴";
const nLt = "≪⃒";
const nlt = "≮";
const nltri = "⋪";
const nltrie = "⋬";
const nLtv = "≪̸";
const nmid = "∤";
const NoBreak = "";
const NonBreakingSpace = " ";
const nopf = "𝕟";
const Nopf = "ℕ";
const Not = "⫬";
const not = "¬";
const NotCongruent = "≢";
const NotCupCap = "≭";
const NotDoubleVerticalBar = "∦";
const NotElement = "∉";
const NotEqual = "≠";
const NotEqualTilde = "≂̸";
const NotExists = "∄";
const NotGreater = "≯";
const NotGreaterEqual = "≱";
const NotGreaterFullEqual = "≧̸";
const NotGreaterGreater = "≫̸";
const NotGreaterLess = "≹";
const NotGreaterSlantEqual = "⩾̸";
const NotGreaterTilde = "≵";
const NotHumpDownHump = "≎̸";
const NotHumpEqual = "≏̸";
const notin = "∉";
const notindot = "⋵̸";
const notinE = "⋹̸";
const notinva = "∉";
const notinvb = "⋷";
const notinvc = "⋶";
const NotLeftTriangleBar = "⧏̸";
const NotLeftTriangle = "⋪";
const NotLeftTriangleEqual = "⋬";
const NotLess = "≮";
const NotLessEqual = "≰";
const NotLessGreater = "≸";
const NotLessLess = "≪̸";
const NotLessSlantEqual = "⩽̸";
const NotLessTilde = "≴";
const NotNestedGreaterGreater = "⪢̸";
const NotNestedLessLess = "⪡̸";
const notni = "∌";
const notniva = "∌";
const notnivb = "⋾";
const notnivc = "⋽";
const NotPrecedes = "⊀";
const NotPrecedesEqual = "⪯̸";
const NotPrecedesSlantEqual = "⋠";
const NotReverseElement = "∌";
const NotRightTriangleBar = "⧐̸";
const NotRightTriangle = "⋫";
const NotRightTriangleEqual = "⋭";
const NotSquareSubset = "⊏̸";
const NotSquareSubsetEqual = "⋢";
const NotSquareSuperset = "⊐̸";
const NotSquareSupersetEqual = "⋣";
const NotSubset = "⊂⃒";
const NotSubsetEqual = "⊈";
const NotSucceeds = "⊁";
const NotSucceedsEqual = "⪰̸";
const NotSucceedsSlantEqual = "⋡";
const NotSucceedsTilde = "≿̸";
const NotSuperset = "⊃⃒";
const NotSupersetEqual = "⊉";
const NotTilde = "≁";
const NotTildeEqual = "≄";
const NotTildeFullEqual = "≇";
const NotTildeTilde = "≉";
const NotVerticalBar = "∤";
const nparallel = "∦";
const npar = "∦";
const nparsl = "⫽⃥";
const npart = "∂̸";
const npolint = "⨔";
const npr = "⊀";
const nprcue = "⋠";
const nprec = "⊀";
const npreceq = "⪯̸";
const npre = "⪯̸";
const nrarrc = "⤳̸";
const nrarr = "↛";
const nrArr = "⇏";
const nrarrw = "↝̸";
const nrightarrow = "↛";
const nRightarrow = "⇏";
const nrtri = "⋫";
const nrtrie = "⋭";
const nsc = "⊁";
const nsccue = "⋡";
const nsce = "⪰̸";
const Nscr = "𝒩";
const nscr = "𝓃";
const nshortmid = "∤";
const nshortparallel = "∦";
const nsim = "≁";
const nsime = "≄";
const nsimeq = "≄";
const nsmid = "∤";
const nspar = "∦";
const nsqsube = "⋢";
const nsqsupe = "⋣";
const nsub = "⊄";
const nsubE = "⫅̸";
const nsube = "⊈";
const nsubset = "⊂⃒";
const nsubseteq = "⊈";
const nsubseteqq = "⫅̸";
const nsucc = "⊁";
const nsucceq = "⪰̸";
const nsup = "⊅";
const nsupE = "⫆̸";
const nsupe = "⊉";
const nsupset = "⊃⃒";
const nsupseteq = "⊉";
const nsupseteqq = "⫆̸";
const ntgl = "≹";
const Ntilde = "Ñ";
const ntilde = "ñ";
const ntlg = "≸";
const ntriangleleft = "⋪";
const ntrianglelefteq = "⋬";
const ntriangleright = "⋫";
const ntrianglerighteq = "⋭";
const Nu = "Ν";
const nu = "ν";
const num = "#";
const numero = "№";
const numsp = " ";
const nvap = "≍⃒";
const nvdash = "⊬";
const nvDash = "⊭";
const nVdash = "⊮";
const nVDash = "⊯";
const nvge = "≥⃒";
const nvgt = ">⃒";
const nvHarr = "⤄";
const nvinfin = "⧞";
const nvlArr = "⤂";
const nvle = "≤⃒";
const nvlt = "<⃒";
const nvltrie = "⊴⃒";
const nvrArr = "⤃";
const nvrtrie = "⊵⃒";
const nvsim = "∼⃒";
const nwarhk = "⤣";
const nwarr = "↖";
const nwArr = "⇖";
const nwarrow = "↖";
const nwnear = "⤧";
const Oacute = "Ó";
const oacute = "ó";
const oast = "⊛";
const Ocirc = "Ô";
const ocirc = "ô";
const ocir = "⊚";
const Ocy = "О";
const ocy = "о";
const odash = "⊝";
const Odblac = "Ő";
const odblac = "ő";
const odiv = "⨸";
const odot = "⊙";
const odsold = "⦼";
const OElig = "Œ";
const oelig = "œ";
const ofcir = "⦿";
const Ofr = "𝔒";
const ofr = "𝔬";
const ogon = "˛";
const Ograve = "Ò";
const ograve = "ò";
const ogt = "⧁";
const ohbar = "⦵";
const ohm = "Ω";
const oint = "∮";
const olarr = "↺";
const olcir = "⦾";
const olcross = "⦻";
const oline = "‾";
const olt = "⧀";
const Omacr = "Ō";
const omacr = "ō";
const Omega = "Ω";
const omega = "ω";
const Omicron = "Ο";
const omicron = "ο";
const omid = "⦶";
const ominus = "⊖";
const Oopf = "𝕆";
const oopf = "𝕠";
const opar = "⦷";
const OpenCurlyDoubleQuote = "“";
const OpenCurlyQuote = "‘";
const operp = "⦹";
const oplus = "⊕";
const orarr = "↻";
const Or = "⩔";
const or = "∨";
const ord = "⩝";
const order = "ℴ";
const orderof = "ℴ";
const ordf = "ª";
const ordm = "º";
const origof = "⊶";
const oror = "⩖";
const orslope = "⩗";
const orv = "⩛";
const oS = "Ⓢ";
const Oscr = "𝒪";
const oscr = "ℴ";
const Oslash = "Ø";
const oslash = "ø";
const osol = "⊘";
const Otilde = "Õ";
const otilde = "õ";
const otimesas = "⨶";
const Otimes = "⨷";
const otimes = "⊗";
const Ouml = "Ö";
const ouml = "ö";
const ovbar = "⌽";
const OverBar = "‾";
const OverBrace = "⏞";
const OverBracket = "⎴";
const OverParenthesis = "⏜";
const para = "¶";
const parallel = "∥";
const par = "∥";
const parsim = "⫳";
const parsl = "⫽";
const part = "∂";
const PartialD = "∂";
const Pcy = "П";
const pcy = "п";
const percnt = "%";
const period = ".";
const permil = "‰";
const perp = "⊥";
const pertenk = "‱";
const Pfr = "𝔓";
const pfr = "𝔭";
const Phi = "Φ";
const phi = "φ";
const phiv = "ϕ";
const phmmat = "ℳ";
const phone = "☎";
const Pi = "Π";
const pi = "π";
const pitchfork = "⋔";
const piv = "ϖ";
const planck = "ℏ";
const planckh = "ℎ";
const plankv = "ℏ";
const plusacir = "⨣";
const plusb = "⊞";
const pluscir = "⨢";
const plus = "+";
const plusdo = "∔";
const plusdu = "⨥";
const pluse = "⩲";
const PlusMinus = "±";
const plusmn = "±";
const plussim = "⨦";
const plustwo = "⨧";
const pm = "±";
const Poincareplane = "ℌ";
const pointint = "⨕";
const popf = "𝕡";
const Popf = "ℙ";
const pound = "£";
const prap = "⪷";
const Pr = "⪻";
const pr = "≺";
const prcue = "≼";
const precapprox = "⪷";
const prec = "≺";
const preccurlyeq = "≼";
const Precedes = "≺";
const PrecedesEqual = "⪯";
const PrecedesSlantEqual = "≼";
const PrecedesTilde = "≾";
const preceq = "⪯";
const precnapprox = "⪹";
const precneqq = "⪵";
const precnsim = "⋨";
const pre = "⪯";
const prE = "⪳";
const precsim = "≾";
const prime = "′";
const Prime = "″";
const primes = "ℙ";
const prnap = "⪹";
const prnE = "⪵";
const prnsim = "⋨";
const prod = "∏";
const Product = "∏";
const profalar = "⌮";
const profline = "⌒";
const profsurf = "⌓";
const prop = "∝";
const Proportional = "∝";
const Proportion = "∷";
const propto = "∝";
const prsim = "≾";
const prurel = "⊰";
const Pscr = "𝒫";
const pscr = "𝓅";
const Psi = "Ψ";
const psi = "ψ";
const puncsp = " ";
const Qfr = "𝔔";
const qfr = "𝔮";
const qint = "⨌";
const qopf = "𝕢";
const Qopf = "ℚ";
const qprime = "⁗";
const Qscr = "𝒬";
const qscr = "𝓆";
const quaternions = "ℍ";
const quatint = "⨖";
const quest = "?";
const questeq = "≟";
const quot = '"';
const QUOT = '"';
const rAarr = "⇛";
const race = "∽̱";
const Racute = "Ŕ";
const racute = "ŕ";
const radic = "√";
const raemptyv = "⦳";
const rang = "⟩";
const Rang = "⟫";
const rangd = "⦒";
const range = "⦥";
const rangle = "⟩";
const raquo = "»";
const rarrap = "⥵";
const rarrb = "⇥";
const rarrbfs = "⤠";
const rarrc = "⤳";
const rarr = "→";
const Rarr = "↠";
const rArr = "⇒";
const rarrfs = "⤞";
const rarrhk = "↪";
const rarrlp = "↬";
const rarrpl = "⥅";
const rarrsim = "⥴";
const Rarrtl = "⤖";
const rarrtl = "↣";
const rarrw = "↝";
const ratail = "⤚";
const rAtail = "⤜";
const ratio = "∶";
const rationals = "ℚ";
const rbarr = "⤍";
const rBarr = "⤏";
const RBarr = "⤐";
const rbbrk = "❳";
const rbrace = "}";
const rbrack = "]";
const rbrke = "⦌";
const rbrksld = "⦎";
const rbrkslu = "⦐";
const Rcaron = "Ř";
const rcaron = "ř";
const Rcedil = "Ŗ";
const rcedil = "ŗ";
const rceil = "⌉";
const rcub = "}";
const Rcy = "Р";
const rcy = "р";
const rdca = "⤷";
const rdldhar = "⥩";
const rdquo = "”";
const rdquor = "”";
const rdsh = "↳";
const real = "ℜ";
const realine = "ℛ";
const realpart = "ℜ";
const reals = "ℝ";
const Re = "ℜ";
const rect = "▭";
const reg = "®";
const REG = "®";
const ReverseElement = "∋";
const ReverseEquilibrium = "⇋";
const ReverseUpEquilibrium = "⥯";
const rfisht = "⥽";
const rfloor = "⌋";
const rfr = "𝔯";
const Rfr = "ℜ";
const rHar = "⥤";
const rhard = "⇁";
const rharu = "⇀";
const rharul = "⥬";
const Rho = "Ρ";
const rho = "ρ";
const rhov = "ϱ";
const RightAngleBracket = "⟩";
const RightArrowBar = "⇥";
const rightarrow = "→";
const RightArrow = "→";
const Rightarrow = "⇒";
const RightArrowLeftArrow = "⇄";
const rightarrowtail = "↣";
const RightCeiling = "⌉";
const RightDoubleBracket = "⟧";
const RightDownTeeVector = "⥝";
const RightDownVectorBar = "⥕";
const RightDownVector = "⇂";
const RightFloor = "⌋";
const rightharpoondown = "⇁";
const rightharpoonup = "⇀";
const rightleftarrows = "⇄";
const rightleftharpoons = "⇌";
const rightrightarrows = "⇉";
const rightsquigarrow = "↝";
const RightTeeArrow = "↦";
const RightTee = "⊢";
const RightTeeVector = "⥛";
const rightthreetimes = "⋌";
const RightTriangleBar = "⧐";
const RightTriangle = "⊳";
const RightTriangleEqual = "⊵";
const RightUpDownVector = "⥏";
const RightUpTeeVector = "⥜";
const RightUpVectorBar = "⥔";
const RightUpVector = "↾";
const RightVectorBar = "⥓";
const RightVector = "⇀";
const ring = "˚";
const risingdotseq = "≓";
const rlarr = "⇄";
const rlhar = "⇌";
const rlm = "";
const rmoustache = "⎱";
const rmoust = "⎱";
const rnmid = "⫮";
const roang = "⟭";
const roarr = "⇾";
const robrk = "⟧";
const ropar = "⦆";
const ropf = "𝕣";
const Ropf = "ℝ";
const roplus = "⨮";
const rotimes = "⨵";
const RoundImplies = "⥰";
const rpar = ")";
const rpargt = "⦔";
const rppolint = "⨒";
const rrarr = "⇉";
const Rrightarrow = "⇛";
const rsaquo = "›";
const rscr = "𝓇";
const Rscr = "ℛ";
const rsh = "↱";
const Rsh = "↱";
const rsqb = "]";
const rsquo = "’";
const rsquor = "’";
const rthree = "⋌";
const rtimes = "⋊";
const rtri = "▹";
const rtrie = "⊵";
const rtrif = "▸";
const rtriltri = "⧎";
const RuleDelayed = "⧴";
const ruluhar = "⥨";
const rx = "℞";
const Sacute = "Ś";
const sacute = "ś";
const sbquo = "‚";
const scap = "⪸";
const Scaron = "Š";
const scaron = "š";
const Sc = "⪼";
const sc = "≻";
const sccue = "≽";
const sce = "⪰";
const scE = "⪴";
const Scedil = "Ş";
const scedil = "ş";
const Scirc = "Ŝ";
const scirc = "ŝ";
const scnap = "⪺";
const scnE = "⪶";
const scnsim = "⋩";
const scpolint = "⨓";
const scsim = "≿";
const Scy = "С";
const scy = "с";
const sdotb = "⊡";
const sdot = "⋅";
const sdote = "⩦";
const searhk = "⤥";
const searr = "↘";
const seArr = "⇘";
const searrow = "↘";
const sect = "§";
const semi = ";";
const seswar = "⤩";
const setminus = "∖";
const setmn = "∖";
const sext = "✶";
const Sfr = "𝔖";
const sfr = "𝔰";
const sfrown = "⌢";
const sharp = "♯";
const SHCHcy = "Щ";
const shchcy = "щ";
const SHcy = "Ш";
const shcy = "ш";
const ShortDownArrow = "↓";
const ShortLeftArrow = "←";
const shortmid = "∣";
const shortparallel = "∥";
const ShortRightArrow = "→";
const ShortUpArrow = "↑";
const shy = "";
const Sigma = "Σ";
const sigma = "σ";
const sigmaf = "ς";
const sigmav = "ς";
const sim = "∼";
const simdot = "⩪";
const sime = "≃";
const simeq = "≃";
const simg = "⪞";
const simgE = "⪠";
const siml = "⪝";
const simlE = "⪟";
const simne = "≆";
const simplus = "⨤";
const simrarr = "⥲";
const slarr = "←";
const SmallCircle = "∘";
const smallsetminus = "∖";
const smashp = "⨳";
const smeparsl = "⧤";
const smid = "∣";
const smile = "⌣";
const smt = "⪪";
const smte = "⪬";
const smtes = "⪬︀";
const SOFTcy = "Ь";
const softcy = "ь";
const solbar = "⌿";
const solb = "⧄";
const sol = "/";
const Sopf = "𝕊";
const sopf = "𝕤";
const spades = "♠";
const spadesuit = "♠";
const spar = "∥";
const sqcap = "⊓";
const sqcaps = "⊓︀";
const sqcup = "⊔";
const sqcups = "⊔︀";
const Sqrt = "√";
const sqsub = "⊏";
const sqsube = "⊑";
const sqsubset = "⊏";
const sqsubseteq = "⊑";
const sqsup = "⊐";
const sqsupe = "⊒";
const sqsupset = "⊐";
const sqsupseteq = "⊒";
const square = "□";
const Square = "□";
const SquareIntersection = "⊓";
const SquareSubset = "⊏";
const SquareSubsetEqual = "⊑";
const SquareSuperset = "⊐";
const SquareSupersetEqual = "⊒";
const SquareUnion = "⊔";
const squarf = "▪";
const squ = "□";
const squf = "▪";
const srarr = "→";
const Sscr = "𝒮";
const sscr = "𝓈";
const ssetmn = "∖";
const ssmile = "⌣";
const sstarf = "⋆";
const Star = "⋆";
const star = "☆";
const starf = "★";
const straightepsilon = "ϵ";
const straightphi = "ϕ";
const strns = "¯";
const sub = "⊂";
const Sub = "⋐";
const subdot = "⪽";
const subE = "⫅";
const sube = "⊆";
const subedot = "⫃";
const submult = "⫁";
const subnE = "⫋";
const subne = "⊊";
const subplus = "⪿";
const subrarr = "⥹";
const subset = "⊂";
const Subset = "⋐";
const subseteq = "⊆";
const subseteqq = "⫅";
const SubsetEqual = "⊆";
const subsetneq = "⊊";
const subsetneqq = "⫋";
const subsim = "⫇";
const subsub = "⫕";
const subsup = "⫓";
const succapprox = "⪸";
const succ = "≻";
const succcurlyeq = "≽";
const Succeeds = "≻";
const SucceedsEqual = "⪰";
const SucceedsSlantEqual = "≽";
const SucceedsTilde = "≿";
const succeq = "⪰";
const succnapprox = "⪺";
const succneqq = "⪶";
const succnsim = "⋩";
const succsim = "≿";
const SuchThat = "∋";
const sum = "∑";
const Sum = "∑";
const sung = "♪";
const sup1 = "¹";
const sup2 = "²";
const sup3 = "³";
const sup = "⊃";
const Sup = "⋑";
const supdot = "⪾";
const supdsub = "⫘";
const supE = "⫆";
const supe = "⊇";
const supedot = "⫄";
const Superset = "⊃";
const SupersetEqual = "⊇";
const suphsol = "⟉";
const suphsub = "⫗";
const suplarr = "⥻";
const supmult = "⫂";
const supnE = "⫌";
const supne = "⊋";
const supplus = "⫀";
const supset = "⊃";
const Supset = "⋑";
const supseteq = "⊇";
const supseteqq = "⫆";
const supsetneq = "⊋";
const supsetneqq = "⫌";
const supsim = "⫈";
const supsub = "⫔";
const supsup = "⫖";
const swarhk = "⤦";
const swarr = "↙";
const swArr = "⇙";
const swarrow = "↙";
const swnwar = "⤪";
const szlig = "ß";
const Tab = " ";
const target = "⌖";
const Tau = "Τ";
const tau = "τ";
const tbrk = "⎴";
const Tcaron = "Ť";
const tcaron = "ť";
const Tcedil = "Ţ";
const tcedil = "ţ";
const Tcy = "Т";
const tcy = "т";
const tdot = "⃛";
const telrec = "⌕";
const Tfr = "𝔗";
const tfr = "𝔱";
const there4 = "∴";
const therefore = "∴";
const Therefore = "∴";
const Theta = "Θ";
const theta = "θ";
const thetasym = "ϑ";
const thetav = "ϑ";
const thickapprox = "≈";
const thicksim = "∼";
const ThickSpace = " ";
const ThinSpace = " ";
const thinsp = " ";
const thkap = "≈";
const thksim = "∼";
const THORN = "Þ";
const thorn = "þ";
const tilde = "˜";
const Tilde = "∼";
const TildeEqual = "≃";
const TildeFullEqual = "≅";
const TildeTilde = "≈";
const timesbar = "⨱";
const timesb = "⊠";
const times = "×";
const timesd = "⨰";
const tint = "∭";
const toea = "⤨";
const topbot = "⌶";
const topcir = "⫱";
const top = "⊤";
const Topf = "𝕋";
const topf = "𝕥";
const topfork = "⫚";
const tosa = "⤩";
const tprime = "‴";
const trade = "™";
const TRADE = "™";
const triangle = "▵";
const triangledown = "▿";
const triangleleft = "◃";
const trianglelefteq = "⊴";
const triangleq = "≜";
const triangleright = "▹";
const trianglerighteq = "⊵";
const tridot = "◬";
const trie = "≜";
const triminus = "⨺";
const TripleDot = "⃛";
const triplus = "⨹";
const trisb = "⧍";
const tritime = "⨻";
const trpezium = "⏢";
const Tscr = "𝒯";
const tscr = "𝓉";
const TScy = "Ц";
const tscy = "ц";
const TSHcy = "Ћ";
const tshcy = "ћ";
const Tstrok = "Ŧ";
const tstrok = "ŧ";
const twixt = "≬";
const twoheadleftarrow = "↞";
const twoheadrightarrow = "↠";
const Uacute = "Ú";
const uacute = "ú";
const uarr = "↑";
const Uarr = "↟";
const uArr = "⇑";
const Uarrocir = "⥉";
const Ubrcy = "Ў";
const ubrcy = "ў";
const Ubreve = "Ŭ";
const ubreve = "ŭ";
const Ucirc = "Û";
const ucirc = "û";
const Ucy = "У";
const ucy = "у";
const udarr = "⇅";
const Udblac = "Ű";
const udblac = "ű";
const udhar = "⥮";
const ufisht = "⥾";
const Ufr = "𝔘";
const ufr = "𝔲";
const Ugrave = "Ù";
const ugrave = "ù";
const uHar = "⥣";
const uharl = "↿";
const uharr = "↾";
const uhblk = "▀";
const ulcorn = "⌜";
const ulcorner = "⌜";
const ulcrop = "⌏";
const ultri = "◸";
const Umacr = "Ū";
const umacr = "ū";
const uml = "¨";
const UnderBar = "_";
const UnderBrace = "⏟";
const UnderBracket = "⎵";
const UnderParenthesis = "⏝";
const Union = "⋃";
const UnionPlus = "⊎";
const Uogon = "Ų";
const uogon = "ų";
const Uopf = "𝕌";
const uopf = "𝕦";
const UpArrowBar = "⤒";
const uparrow = "↑";
const UpArrow = "↑";
const Uparrow = "⇑";
const UpArrowDownArrow = "⇅";
const updownarrow = "↕";
const UpDownArrow = "↕";
const Updownarrow = "⇕";
const UpEquilibrium = "⥮";
const upharpoonleft = "↿";
const upharpoonright = "↾";
const uplus = "⊎";
const UpperLeftArrow = "↖";
const UpperRightArrow = "↗";
const upsi = "υ";
const Upsi = "ϒ";
const upsih = "ϒ";
const Upsilon = "Υ";
const upsilon = "υ";
const UpTeeArrow = "↥";
const UpTee = "⊥";
const upuparrows = "⇈";
const urcorn = "⌝";
const urcorner = "⌝";
const urcrop = "⌎";
const Uring = "Ů";
const uring = "ů";
const urtri = "◹";
const Uscr = "𝒰";
const uscr = "𝓊";
const utdot = "⋰";
const Utilde = "Ũ";
const utilde = "ũ";
const utri = "▵";
const utrif = "▴";
const uuarr = "⇈";
const Uuml = "Ü";
const uuml = "ü";
const uwangle = "⦧";
const vangrt = "⦜";
const varepsilon = "ϵ";
const varkappa = "ϰ";
const varnothing = "∅";
const varphi = "ϕ";
const varpi = "ϖ";
const varpropto = "∝";
const varr = "↕";
const vArr = "⇕";
const varrho = "ϱ";
const varsigma = "ς";
const varsubsetneq = "⊊︀";
const varsubsetneqq = "⫋︀";
const varsupsetneq = "⊋︀";
const varsupsetneqq = "⫌︀";
const vartheta = "ϑ";
const vartriangleleft = "⊲";
const vartriangleright = "⊳";
const vBar = "⫨";
const Vbar = "⫫";
const vBarv = "⫩";
const Vcy = "В";
const vcy = "в";
const vdash = "⊢";
const vDash = "⊨";
const Vdash = "⊩";
const VDash = "⊫";
const Vdashl = "⫦";
const veebar = "⊻";
const vee = "∨";
const Vee = "⋁";
const veeeq = "≚";
const vellip = "⋮";
const verbar = "|";
const Verbar = "‖";
const vert = "|";
const Vert = "‖";
const VerticalBar = "∣";
const VerticalLine = "|";
const VerticalSeparator = "❘";
const VerticalTilde = "≀";
const VeryThinSpace = " ";
const Vfr = "𝔙";
const vfr = "𝔳";
const vltri = "⊲";
const vnsub = "⊂⃒";
const vnsup = "⊃⃒";
const Vopf = "𝕍";
const vopf = "𝕧";
const vprop = "∝";
const vrtri = "⊳";
const Vscr = "𝒱";
const vscr = "𝓋";
const vsubnE = "⫋︀";
const vsubne = "⊊︀";
const vsupnE = "⫌︀";
const vsupne = "⊋︀";
const Vvdash = "⊪";
const vzigzag = "⦚";
const Wcirc = "Ŵ";
const wcirc = "ŵ";
const wedbar = "⩟";
const wedge = "∧";
const Wedge = "⋀";
const wedgeq = "≙";
const weierp = "℘";
const Wfr = "𝔚";
const wfr = "𝔴";
const Wopf = "𝕎";
const wopf = "𝕨";
const wp = "℘";
const wr = "≀";
const wreath = "≀";
const Wscr = "𝒲";
const wscr = "𝓌";
const xcap = "⋂";
const xcirc = "◯";
const xcup = "⋃";
const xdtri = "▽";
const Xfr = "𝔛";
const xfr = "𝔵";
const xharr = "⟷";
const xhArr = "⟺";
const Xi = "Ξ";
const xi = "ξ";
const xlarr = "⟵";
const xlArr = "⟸";
const xmap = "⟼";
const xnis = "⋻";
const xodot = "⨀";
const Xopf = "𝕏";
const xopf = "𝕩";
const xoplus = "⨁";
const xotime = "⨂";
const xrarr = "⟶";
const xrArr = "⟹";
const Xscr = "𝒳";
const xscr = "𝓍";
const xsqcup = "⨆";
const xuplus = "⨄";
const xutri = "△";
const xvee = "⋁";
const xwedge = "⋀";
const Yacute = "Ý";
const yacute = "ý";
const YAcy = "Я";
const yacy = "я";
const Ycirc = "Ŷ";
const ycirc = "ŷ";
const Ycy = "Ы";
const ycy = "ы";
const yen = "¥";
const Yfr = "𝔜";
const yfr = "𝔶";
const YIcy = "Ї";
const yicy = "ї";
const Yopf = "𝕐";
const yopf = "𝕪";
const Yscr = "𝒴";
const yscr = "𝓎";
const YUcy = "Ю";
const yucy = "ю";
const yuml = "ÿ";
const Yuml = "Ÿ";
const Zacute = "Ź";
const zacute = "ź";
const Zcaron = "Ž";
const zcaron = "ž";
const Zcy = "З";
const zcy = "з";
const Zdot = "Ż";
const zdot = "ż";
const zeetrf = "ℨ";
const ZeroWidthSpace = "";
const Zeta = "Ζ";
const zeta = "ζ";
const zfr = "𝔷";
const Zfr = "ℨ";
const ZHcy = "Ж";
const zhcy = "ж";
const zigrarr = "⇝";
const zopf = "𝕫";
const Zopf = "ℤ";
const Zscr = "𝒵";
const zscr = "𝓏";
const zwj = "";
const zwnj = "";
const require$$0 = {
Aacute,
aacute,
Abreve,
abreve,
ac,
acd,
acE,
Acirc,
acirc,
acute,
Acy,
acy,
AElig,
aelig,
af,
Afr,
afr,
Agrave,
agrave,
alefsym,
aleph,
Alpha,
alpha,
Amacr,
amacr,
amalg,
amp,
AMP,
andand,
And,
and,
andd,
andslope,
andv,
ang,
ange,
angle,
angmsdaa,
angmsdab,
angmsdac,
angmsdad,
angmsdae,
angmsdaf,
angmsdag,
angmsdah,
angmsd,
angrt,
angrtvb,
angrtvbd,
angsph,
angst,
angzarr,
Aogon,
aogon,
Aopf,
aopf,
apacir,
ap,
apE,
ape,
apid,
apos,
ApplyFunction,
approx,
approxeq,
Aring,
aring,
Ascr,
ascr,
Assign,
ast,
asymp,
asympeq,
Atilde,
atilde,
Auml,
auml,
awconint,
awint,
backcong,
backepsilon,
backprime,
backsim,
backsimeq,
Backslash,
Barv,
barvee,
barwed,
Barwed,
barwedge,
bbrk,
bbrktbrk,
bcong,
Bcy,
bcy,
bdquo,
becaus,
because,
Because,
bemptyv,
bepsi,
bernou,
Bernoullis,
Beta,
beta,
beth,
between,
Bfr,
bfr,
bigcap,
bigcirc,
bigcup,
bigodot,
bigoplus,
bigotimes,
bigsqcup,
bigstar,
bigtriangledown,
bigtriangleup,
biguplus,
bigvee,
bigwedge,
bkarow,
blacklozenge,
blacksquare,
blacktriangle,
blacktriangledown,
blacktriangleleft,
blacktriangleright,
blank,
blk12,
blk14,
blk34,
block: block$1,
bne,
bnequiv,
bNot,
bnot,
Bopf,
bopf,
bot,
bottom,
bowtie,
boxbox,
boxdl,
boxdL,
boxDl,
boxDL,
boxdr,
boxdR,
boxDr,
boxDR,
boxh,
boxH,
boxhd,
boxHd,
boxhD,
boxHD,
boxhu,
boxHu,
boxhU,
boxHU,
boxminus,
boxplus,
boxtimes,
boxul,
boxuL,
boxUl,
boxUL,
boxur,
boxuR,
boxUr,
boxUR,
boxv,
boxV,
boxvh,
boxvH,
boxVh,
boxVH,
boxvl,
boxvL,
boxVl,
boxVL,
boxvr,
boxvR,
boxVr,
boxVR,
bprime,
breve,
Breve,
brvbar,
bscr,
Bscr,
bsemi,
bsim,
bsime,
bsolb,
bsol,
bsolhsub,
bull,
bullet,
bump,
bumpE,
bumpe,
Bumpeq,
bumpeq,
Cacute,
cacute,
capand,
capbrcup,
capcap,
cap,
Cap,
capcup,
capdot,
CapitalDifferentialD,
caps,
caret,
caron,
Cayleys,
ccaps,
Ccaron,
ccaron,
Ccedil,
ccedil,
Ccirc,
ccirc,
Cconint,
ccups,
ccupssm,
Cdot,
cdot,
cedil,
Cedilla,
cemptyv,
cent,
centerdot,
CenterDot,
cfr,
Cfr,
CHcy,
chcy,
check,
checkmark,
Chi,
chi,
circ,
circeq,
circlearrowleft,
circlearrowright,
circledast,
circledcirc,
circleddash,
CircleDot,
circledR,
circledS,
CircleMinus,
CirclePlus,
CircleTimes,
cir,
cirE,
cire,
cirfnint,
cirmid,
cirscir,
ClockwiseContourIntegral,
CloseCurlyDoubleQuote,
CloseCurlyQuote,
clubs,
clubsuit,
colon,
Colon,
Colone,
colone,
coloneq,
comma,
commat,
comp,
compfn,
complement,
complexes,
cong,
congdot,
Congruent,
conint,
Conint,
ContourIntegral,
copf,
Copf,
coprod,
Coproduct,
copy,
COPY,
copysr,
CounterClockwiseContourIntegral,
crarr,
cross,
Cross,
Cscr,
cscr,
csub,
csube,
csup,
csupe,
ctdot,
cudarrl,
cudarrr,
cuepr,
cuesc,
cularr,
cularrp,
cupbrcap,
cupcap,
CupCap,
cup,
Cup,
cupcup,
cupdot,
cupor,
cups,
curarr,
curarrm,
curlyeqprec,
curlyeqsucc,
curlyvee,
curlywedge,
curren,
curvearrowleft,
curvearrowright,
cuvee,
cuwed,
cwconint,
cwint,
cylcty,
dagger,
Dagger,
daleth,
darr,
Darr,
dArr,
dash,
Dashv,
dashv,
dbkarow,
dblac,
Dcaron,
dcaron,
Dcy,
dcy,
ddagger,
ddarr,
DD,
dd,
DDotrahd,
ddotseq,
deg,
Del,
Delta,
delta,
demptyv,
dfisht,
Dfr,
dfr,
dHar,
dharl,
dharr,
DiacriticalAcute,
DiacriticalDot,
DiacriticalDoubleAcute,
DiacriticalGrave,
DiacriticalTilde,
diam,
diamond,
Diamond,
diamondsuit,
diams,
die,
DifferentialD,
digamma,
disin,
div,
divide,
divideontimes,
divonx,
DJcy,
djcy,
dlcorn,
dlcrop,
dollar,
Dopf,
dopf,
Dot,
dot,
DotDot,
doteq,
doteqdot,
DotEqual,
dotminus,
dotplus,
dotsquare,
doublebarwedge,
DoubleContourIntegral,
DoubleDot,
DoubleDownArrow,
DoubleLeftArrow,
DoubleLeftRightArrow,
DoubleLeftTee,
DoubleLongLeftArrow,
DoubleLongLeftRightArrow,
DoubleLongRightArrow,
DoubleRightArrow,
DoubleRightTee,
DoubleUpArrow,
DoubleUpDownArrow,
DoubleVerticalBar,
DownArrowBar,
downarrow,
DownArrow,
Downarrow,
DownArrowUpArrow,
DownBreve,
downdownarrows,
downharpoonleft,
downharpoonright,
DownLeftRightVector,
DownLeftTeeVector,
DownLeftVectorBar,
DownLeftVector,
DownRightTeeVector,
DownRightVectorBar,
DownRightVector,
DownTeeArrow,
DownTee,
drbkarow,
drcorn,
drcrop,
Dscr,
dscr,
DScy,
dscy,
dsol,
Dstrok,
dstrok,
dtdot,
dtri,
dtrif,
duarr,
duhar,
dwangle,
DZcy,
dzcy,
dzigrarr,
Eacute,
eacute,
easter,
Ecaron,
ecaron,
Ecirc,
ecirc,
ecir,
ecolon,
Ecy,
ecy,
eDDot,
Edot,
edot,
eDot,
ee,
efDot,
Efr,
efr,
eg,
Egrave,
egrave,
egs,
egsdot,
el,
Element,
elinters,
ell,
els,
elsdot,
Emacr,
emacr,
empty,
emptyset,
EmptySmallSquare,
emptyv,
EmptyVerySmallSquare,
emsp13,
emsp14,
emsp,
ENG,
eng,
ensp,
Eogon,
eogon,
Eopf,
eopf,
epar,
eparsl,
eplus,
epsi,
Epsilon,
epsilon,
epsiv,
eqcirc,
eqcolon,
eqsim,
eqslantgtr,
eqslantless,
Equal,
equals,
EqualTilde,
equest,
Equilibrium,
equiv,
equivDD,
eqvparsl,
erarr,
erDot,
escr,
Escr,
esdot,
Esim,
esim,
Eta,
eta,
ETH,
eth,
Euml,
euml,
euro,
excl,
exist,
Exists,
expectation,
exponentiale,
ExponentialE,
fallingdotseq,
Fcy,
fcy,
female,
ffilig,
fflig,
ffllig,
Ffr,
ffr,
filig,
FilledSmallSquare,
FilledVerySmallSquare,
fjlig,
flat,
fllig,
fltns,
fnof,
Fopf,
fopf,
forall,
ForAll,
fork,
forkv,
Fouriertrf,
fpartint,
frac12,
frac13,
frac14,
frac15,
frac16,
frac18,
frac23,
frac25,
frac34,
frac35,
frac38,
frac45,
frac56,
frac58,
frac78,
frasl,
frown,
fscr,
Fscr,
gacute,
Gamma,
gamma,
Gammad,
gammad,
gap,
Gbreve,
gbreve,
Gcedil,
Gcirc,
gcirc,
Gcy,
gcy,
Gdot,
gdot,
ge,
gE,
gEl,
gel,
geq,
geqq,
geqslant,
gescc,
ges,
gesdot,
gesdoto,
gesdotol,
gesl,
gesles,
Gfr,
gfr,
gg,
Gg,
ggg,
gimel,
GJcy,
gjcy,
gla,
gl,
glE,
glj,
gnap,
gnapprox,
gne,
gnE,
gneq,
gneqq,
gnsim,
Gopf,
gopf,
grave,
GreaterEqual,
GreaterEqualLess,
GreaterFullEqual,
GreaterGreater,
GreaterLess,
GreaterSlantEqual,
GreaterTilde,
Gscr,
gscr,
gsim,
gsime,
gsiml,
gtcc,
gtcir,
gt,
GT,
Gt,
gtdot,
gtlPar,
gtquest,
gtrapprox,
gtrarr,
gtrdot,
gtreqless,
gtreqqless,
gtrless,
gtrsim,
gvertneqq,
gvnE,
Hacek,
hairsp,
half,
hamilt,
HARDcy,
hardcy,
harrcir,
harr,
hArr,
harrw,
Hat,
hbar,
Hcirc,
hcirc,
hearts,
heartsuit,
hellip,
hercon,
hfr,
Hfr,
HilbertSpace,
hksearow,
hkswarow,
hoarr,
homtht,
hookleftarrow,
hookrightarrow,
hopf,
Hopf,
horbar,
HorizontalLine,
hscr,
Hscr,
hslash,
Hstrok,
hstrok,
HumpDownHump,
HumpEqual,
hybull,
hyphen,
Iacute,
iacute,
ic,
Icirc,
icirc,
Icy,
icy,
Idot,
IEcy,
iecy,
iexcl,
iff,
ifr,
Ifr,
Igrave,
igrave,
ii,
iiiint,
iiint,
iinfin,
iiota,
IJlig,
ijlig,
Imacr,
imacr,
image: image$1,
ImaginaryI,
imagline,
imagpart,
imath,
Im,
imof,
imped,
Implies,
incare,
"in": "∈",
infin,
infintie,
inodot,
intcal,
int,
Int,
integers,
Integral,
intercal,
Intersection,
intlarhk,
intprod,
InvisibleComma,
InvisibleTimes,
IOcy,
iocy,
Iogon,
iogon,
Iopf,
iopf,
Iota,
iota,
iprod,
iquest,
iscr,
Iscr,
isin,
isindot,
isinE,
isins,
isinsv,
isinv,
it,
Itilde,
itilde,
Iukcy,
iukcy,
Iuml,
iuml,
Jcirc,
jcirc,
Jcy,
jcy,
Jfr,
jfr,
jmath,
Jopf,
jopf,
Jscr,
jscr,
Jsercy,
jsercy,
Jukcy,
jukcy,
Kappa,
kappa,
kappav,
Kcedil,
kcedil,
Kcy,
kcy,
Kfr,
kfr,
kgreen,
KHcy,
khcy,
KJcy,
kjcy,
Kopf,
kopf,
Kscr,
kscr,
lAarr,
Lacute,
lacute,
laemptyv,
lagran,
Lambda,
lambda,
lang,
Lang,
langd,
langle,
lap,
Laplacetrf,
laquo,
larrb,
larrbfs,
larr,
Larr,
lArr,
larrfs,
larrhk,
larrlp,
larrpl,
larrsim,
larrtl,
latail,
lAtail,
lat,
late,
lates,
lbarr,
lBarr,
lbbrk,
lbrace,
lbrack,
lbrke,
lbrksld,
lbrkslu,
Lcaron,
lcaron,
Lcedil,
lcedil,
lceil,
lcub,
Lcy,
lcy,
ldca,
ldquo,
ldquor,
ldrdhar,
ldrushar,
ldsh,
le,
lE,
LeftAngleBracket,
LeftArrowBar,
leftarrow,
LeftArrow,
Leftarrow,
LeftArrowRightArrow,
leftarrowtail,
LeftCeiling,
LeftDoubleBracket,
LeftDownTeeVector,
LeftDownVectorBar,
LeftDownVector,
LeftFloor,
leftharpoondown,
leftharpoonup,
leftleftarrows,
leftrightarrow,
LeftRightArrow,
Leftrightarrow,
leftrightarrows,
leftrightharpoons,
leftrightsquigarrow,
LeftRightVector,
LeftTeeArrow,
LeftTee,
LeftTeeVector,
leftthreetimes,
LeftTriangleBar,
LeftTriangle,
LeftTriangleEqual,
LeftUpDownVector,
LeftUpTeeVector,
LeftUpVectorBar,
LeftUpVector,
LeftVectorBar,
LeftVector,
lEg,
leg,
leq,
leqq,
leqslant,
lescc,
les,
lesdot,
lesdoto,
lesdotor,
lesg,
lesges,
lessapprox,
lessdot,
lesseqgtr,
lesseqqgtr,
LessEqualGreater,
LessFullEqual,
LessGreater,
lessgtr,
LessLess,
lesssim,
LessSlantEqual,
LessTilde,
lfisht,
lfloor,
Lfr,
lfr,
lg,
lgE,
lHar,
lhard,
lharu,
lharul,
lhblk,
LJcy,
ljcy,
llarr,
ll,
Ll,
llcorner,
Lleftarrow,
llhard,
lltri,
Lmidot,
lmidot,
lmoustache,
lmoust,
lnap,
lnapprox,
lne,
lnE,
lneq,
lneqq,
lnsim,
loang,
loarr,
lobrk,
longleftarrow,
LongLeftArrow,
Longleftarrow,
longleftrightarrow,
LongLeftRightArrow,
Longleftrightarrow,
longmapsto,
longrightarrow,
LongRightArrow,
Longrightarrow,
looparrowleft,
looparrowright,
lopar,
Lopf,
lopf,
loplus,
lotimes,
lowast,
lowbar,
LowerLeftArrow,
LowerRightArrow,
loz,
lozenge,
lozf,
lpar,
lparlt,
lrarr,
lrcorner,
lrhar,
lrhard,
lrm,
lrtri,
lsaquo,
lscr,
Lscr,
lsh,
Lsh,
lsim,
lsime,
lsimg,
lsqb,
lsquo,
lsquor,
Lstrok,
lstrok,
ltcc,
ltcir,
lt,
LT,
Lt,
ltdot,
lthree,
ltimes,
ltlarr,
ltquest,
ltri,
ltrie,
ltrif,
ltrPar,
lurdshar,
luruhar,
lvertneqq,
lvnE,
macr,
male,
malt,
maltese,
"Map": "⤅",
map,
mapsto,
mapstodown,
mapstoleft,
mapstoup,
marker,
mcomma,
Mcy,
mcy,
mdash,
mDDot,
measuredangle,
MediumSpace,
Mellintrf,
Mfr,
mfr,
mho,
micro,
midast,
midcir,
mid,
middot,
minusb,
minus,
minusd,
minusdu,
MinusPlus,
mlcp,
mldr,
mnplus,
models,
Mopf,
mopf,
mp,
mscr,
Mscr,
mstpos,
Mu,
mu,
multimap,
mumap,
nabla,
Nacute,
nacute,
nang,
nap,
napE,
napid,
napos,
napprox,
natural,
naturals,
natur,
nbsp,
nbump,
nbumpe,
ncap,
Ncaron,
ncaron,
Ncedil,
ncedil,
ncong,
ncongdot,
ncup,
Ncy,
ncy,
ndash,
nearhk,
nearr,
neArr,
nearrow,
ne,
nedot,
NegativeMediumSpace,
NegativeThickSpace,
NegativeThinSpace,
NegativeVeryThinSpace,
nequiv,
nesear,
nesim,
NestedGreaterGreater,
NestedLessLess,
NewLine,
nexist,
nexists,
Nfr,
nfr,
ngE,
nge,
ngeq,
ngeqq,
ngeqslant,
nges,
nGg,
ngsim,
nGt,
ngt,
ngtr,
nGtv,
nharr,
nhArr,
nhpar,
ni,
nis,
nisd,
niv,
NJcy,
njcy,
nlarr,
nlArr,
nldr,
nlE,
nle,
nleftarrow,
nLeftarrow,
nleftrightarrow,
nLeftrightarrow,
nleq,
nleqq,
nleqslant,
nles,
nless,
nLl,
nlsim,
nLt,
nlt,
nltri,
nltrie,
nLtv,
nmid,
NoBreak,
NonBreakingSpace,
nopf,
Nopf,
Not,
not,
NotCongruent,
NotCupCap,
NotDoubleVerticalBar,
NotElement,
NotEqual,
NotEqualTilde,
NotExists,
NotGreater,
NotGreaterEqual,
NotGreaterFullEqual,
NotGreaterGreater,
NotGreaterLess,
NotGreaterSlantEqual,
NotGreaterTilde,
NotHumpDownHump,
NotHumpEqual,
notin,
notindot,
notinE,
notinva,
notinvb,
notinvc,
NotLeftTriangleBar,
NotLeftTriangle,
NotLeftTriangleEqual,
NotLess,
NotLessEqual,
NotLessGreater,
NotLessLess,
NotLessSlantEqual,
NotLessTilde,
NotNestedGreaterGreater,
NotNestedLessLess,
notni,
notniva,
notnivb,
notnivc,
NotPrecedes,
NotPrecedesEqual,
NotPrecedesSlantEqual,
NotReverseElement,
NotRightTriangleBar,
NotRightTriangle,
NotRightTriangleEqual,
NotSquareSubset,
NotSquareSubsetEqual,
NotSquareSuperset,
NotSquareSupersetEqual,
NotSubset,
NotSubsetEqual,
NotSucceeds,
NotSucceedsEqual,
NotSucceedsSlantEqual,
NotSucceedsTilde,
NotSuperset,
NotSupersetEqual,
NotTilde,
NotTildeEqual,
NotTildeFullEqual,
NotTildeTilde,
NotVerticalBar,
nparallel,
npar,
nparsl,
npart,
npolint,
npr,
nprcue,
nprec,
npreceq,
npre,
nrarrc,
nrarr,
nrArr,
nrarrw,
nrightarrow,
nRightarrow,
nrtri,
nrtrie,
nsc,
nsccue,
nsce,
Nscr,
nscr,
nshortmid,
nshortparallel,
nsim,
nsime,
nsimeq,
nsmid,
nspar,
nsqsube,
nsqsupe,
nsub,
nsubE,
nsube,
nsubset,
nsubseteq,
nsubseteqq,
nsucc,
nsucceq,
nsup,
nsupE,
nsupe,
nsupset,
nsupseteq,
nsupseteqq,
ntgl,
Ntilde,
ntilde,
ntlg,
ntriangleleft,
ntrianglelefteq,
ntriangleright,
ntrianglerighteq,
Nu,
nu,
num,
numero,
numsp,
nvap,
nvdash,
nvDash,
nVdash,
nVDash,
nvge,
nvgt,
nvHarr,
nvinfin,
nvlArr,
nvle,
nvlt,
nvltrie,
nvrArr,
nvrtrie,
nvsim,
nwarhk,
nwarr,
nwArr,
nwarrow,
nwnear,
Oacute,
oacute,
oast,
Ocirc,
ocirc,
ocir,
Ocy,
ocy,
odash,
Odblac,
odblac,
odiv,
odot,
odsold,
OElig,
oelig,
ofcir,
Ofr,
ofr,
ogon,
Ograve,
ograve,
ogt,
ohbar,
ohm,
oint,
olarr,
olcir,
olcross,
oline,
olt,
Omacr,
omacr,
Omega,
omega,
Omicron,
omicron,
omid,
ominus,
Oopf,
oopf,
opar,
OpenCurlyDoubleQuote,
OpenCurlyQuote,
operp,
oplus,
orarr,
Or,
or,
ord,
order,
orderof,
ordf,
ordm,
origof,
oror,
orslope,
orv,
oS,
Oscr,
oscr,
Oslash,
oslash,
osol,
Otilde,
otilde,
otimesas,
Otimes,
otimes,
Ouml,
ouml,
ovbar,
OverBar,
OverBrace,
OverBracket,
OverParenthesis,
para,
parallel,
par,
parsim,
parsl,
part,
PartialD,
Pcy,
pcy,
percnt,
period,
permil,
perp,
pertenk,
Pfr,
pfr,
Phi,
phi,
phiv,
phmmat,
phone,
Pi,
pi,
pitchfork,
piv,
planck,
planckh,
plankv,
plusacir,
plusb,
pluscir,
plus,
plusdo,
plusdu,
pluse,
PlusMinus,
plusmn,
plussim,
plustwo,
pm,
Poincareplane,
pointint,
popf,
Popf,
pound,
prap,
Pr,
pr,
prcue,
precapprox,
prec,
preccurlyeq,
Precedes,
PrecedesEqual,
PrecedesSlantEqual,
PrecedesTilde,
preceq,
precnapprox,
precneqq,
precnsim,
pre,
prE,
precsim,
prime,
Prime,
primes,
prnap,
prnE,
prnsim,
prod,
Product,
profalar,
profline,
profsurf,
prop,
Proportional,
Proportion,
propto,
prsim,
prurel,
Pscr,
pscr,
Psi,
psi,
puncsp,
Qfr,
qfr,
qint,
qopf,
Qopf,
qprime,
Qscr,
qscr,
quaternions,
quatint,
quest,
questeq,
quot,
QUOT,
rAarr,
race,
Racute,
racute,
radic,
raemptyv,
rang,
Rang,
rangd,
range,
rangle,
raquo,
rarrap,
rarrb,
rarrbfs,
rarrc,
rarr,
Rarr,
rArr,
rarrfs,
rarrhk,
rarrlp,
rarrpl,
rarrsim,
Rarrtl,
rarrtl,
rarrw,
ratail,
rAtail,
ratio,
rationals,
rbarr,
rBarr,
RBarr,
rbbrk,
rbrace,
rbrack,
rbrke,
rbrksld,
rbrkslu,
Rcaron,
rcaron,
Rcedil,
rcedil,
rceil,
rcub,
Rcy,
rcy,
rdca,
rdldhar,
rdquo,
rdquor,
rdsh,
real,
realine,
realpart,
reals,
Re,
rect,
reg,
REG,
ReverseElement,
ReverseEquilibrium,
ReverseUpEquilibrium,
rfisht,
rfloor,
rfr,
Rfr,
rHar,
rhard,
rharu,
rharul,
Rho,
rho,
rhov,
RightAngleBracket,
RightArrowBar,
rightarrow,
RightArrow,
Rightarrow,
RightArrowLeftArrow,
rightarrowtail,
RightCeiling,
RightDoubleBracket,
RightDownTeeVector,
RightDownVectorBar,
RightDownVector,
RightFloor,
rightharpoondown,
rightharpoonup,
rightleftarrows,
rightleftharpoons,
rightrightarrows,
rightsquigarrow,
RightTeeArrow,
RightTee,
RightTeeVector,
rightthreetimes,
RightTriangleBar,
RightTriangle,
RightTriangleEqual,
RightUpDownVector,
RightUpTeeVector,
RightUpVectorBar,
RightUpVector,
RightVectorBar,
RightVector,
ring,
risingdotseq,
rlarr,
rlhar,
rlm,
rmoustache,
rmoust,
rnmid,
roang,
roarr,
robrk,
ropar,
ropf,
Ropf,
roplus,
rotimes,
RoundImplies,
rpar,
rpargt,
rppolint,
rrarr,
Rrightarrow,
rsaquo,
rscr,
Rscr,
rsh,
Rsh,
rsqb,
rsquo,
rsquor,
rthree,
rtimes,
rtri,
rtrie,
rtrif,
rtriltri,
RuleDelayed,
ruluhar,
rx,
Sacute,
sacute,
sbquo,
scap,
Scaron,
scaron,
Sc,
sc,
sccue,
sce,
scE,
Scedil,
scedil,
Scirc,
scirc,
scnap,
scnE,
scnsim,
scpolint,
scsim,
Scy,
scy,
sdotb,
sdot,
sdote,
searhk,
searr,
seArr,
searrow,
sect,
semi,
seswar,
setminus,
setmn,
sext,
Sfr,
sfr,
sfrown,
sharp,
SHCHcy,
shchcy,
SHcy,
shcy,
ShortDownArrow,
ShortLeftArrow,
shortmid,
shortparallel,
ShortRightArrow,
ShortUpArrow,
shy,
Sigma,
sigma,
sigmaf,
sigmav,
sim,
simdot,
sime,
simeq,
simg,
simgE,
siml,
simlE,
simne,
simplus,
simrarr,
slarr,
SmallCircle,
smallsetminus,
smashp,
smeparsl,
smid,
smile,
smt,
smte,
smtes,
SOFTcy,
softcy,
solbar,
solb,
sol,
Sopf,
sopf,
spades,
spadesuit,
spar,
sqcap,
sqcaps,
sqcup,
sqcups,
Sqrt,
sqsub,
sqsube,
sqsubset,
sqsubseteq,
sqsup,
sqsupe,
sqsupset,
sqsupseteq,
square,
Square,
SquareIntersection,
SquareSubset,
SquareSubsetEqual,
SquareSuperset,
SquareSupersetEqual,
SquareUnion,
squarf,
squ,
squf,
srarr,
Sscr,
sscr,
ssetmn,
ssmile,
sstarf,
Star,
star,
starf,
straightepsilon,
straightphi,
strns,
sub,
Sub,
subdot,
subE,
sube,
subedot,
submult,
subnE,
subne,
subplus,
subrarr,
subset,
Subset,
subseteq,
subseteqq,
SubsetEqual,
subsetneq,
subsetneqq,
subsim,
subsub,
subsup,
succapprox,
succ,
succcurlyeq,
Succeeds,
SucceedsEqual,
SucceedsSlantEqual,
SucceedsTilde,
succeq,
succnapprox,
succneqq,
succnsim,
succsim,
SuchThat,
sum,
Sum,
sung,
sup1,
sup2,
sup3,
sup,
Sup,
supdot,
supdsub,
supE,
supe,
supedot,
Superset,
SupersetEqual,
suphsol,
suphsub,
suplarr,
supmult,
supnE,
supne,
supplus,
supset,
Supset,
supseteq,
supseteqq,
supsetneq,
supsetneqq,
supsim,
supsub,
supsup,
swarhk,
swarr,
swArr,
swarrow,
swnwar,
szlig,
Tab,
target,
Tau,
tau,
tbrk,
Tcaron,
tcaron,
Tcedil,
tcedil,
Tcy,
tcy,
tdot,
telrec,
Tfr,
tfr,
there4,
therefore,
Therefore,
Theta,
theta,
thetasym,
thetav,
thickapprox,
thicksim,
ThickSpace,
ThinSpace,
thinsp,
thkap,
thksim,
THORN,
thorn,
tilde,
Tilde,
TildeEqual,
TildeFullEqual,
TildeTilde,
timesbar,
timesb,
times,
timesd,
tint,
toea,
topbot,
topcir,
top,
Topf,
topf,
topfork,
tosa,
tprime,
trade,
TRADE,
triangle,
triangledown,
triangleleft,
trianglelefteq,
triangleq,
triangleright,
trianglerighteq,
tridot,
trie,
triminus,
TripleDot,
triplus,
trisb,
tritime,
trpezium,
Tscr,
tscr,
TScy,
tscy,
TSHcy,
tshcy,
Tstrok,
tstrok,
twixt,
twoheadleftarrow,
twoheadrightarrow,
Uacute,
uacute,
uarr,
Uarr,
uArr,
Uarrocir,
Ubrcy,
ubrcy,
Ubreve,
ubreve,
Ucirc,
ucirc,
Ucy,
ucy,
udarr,
Udblac,
udblac,
udhar,
ufisht,
Ufr,
ufr,
Ugrave,
ugrave,
uHar,
uharl,
uharr,
uhblk,
ulcorn,
ulcorner,
ulcrop,
ultri,
Umacr,
umacr,
uml,
UnderBar,
UnderBrace,
UnderBracket,
UnderParenthesis,
Union,
UnionPlus,
Uogon,
uogon,
Uopf,
uopf,
UpArrowBar,
uparrow,
UpArrow,
Uparrow,
UpArrowDownArrow,
updownarrow,
UpDownArrow,
Updownarrow,
UpEquilibrium,
upharpoonleft,
upharpoonright,
uplus,
UpperLeftArrow,
UpperRightArrow,
upsi,
Upsi,
upsih,
Upsilon,
upsilon,
UpTeeArrow,
UpTee,
upuparrows,
urcorn,
urcorner,
urcrop,
Uring,
uring,
urtri,
Uscr,
uscr,
utdot,
Utilde,
utilde,
utri,
utrif,
uuarr,
Uuml,
uuml,
uwangle,
vangrt,
varepsilon,
varkappa,
varnothing,
varphi,
varpi,
varpropto,
varr,
vArr,
varrho,
varsigma,
varsubsetneq,
varsubsetneqq,
varsupsetneq,
varsupsetneqq,
vartheta,
vartriangleleft,
vartriangleright,
vBar,
Vbar,
vBarv,
Vcy,
vcy,
vdash,
vDash,
Vdash,
VDash,
Vdashl,
veebar,
vee,
Vee,
veeeq,
vellip,
verbar,
Verbar,
vert,
Vert,
VerticalBar,
VerticalLine,
VerticalSeparator,
VerticalTilde,
VeryThinSpace,
Vfr,
vfr,
vltri,
vnsub,
vnsup,
Vopf,
vopf,
vprop,
vrtri,
Vscr,
vscr,
vsubnE,
vsubne,
vsupnE,
vsupne,
Vvdash,
vzigzag,
Wcirc,
wcirc,
wedbar,
wedge,
Wedge,
wedgeq,
weierp,
Wfr,
wfr,
Wopf,
wopf,
wp,
wr,
wreath,
Wscr,
wscr,
xcap,
xcirc,
xcup,
xdtri,
Xfr,
xfr,
xharr,
xhArr,
Xi,
xi,
xlarr,
xlArr,
xmap,
xnis,
xodot,
Xopf,
xopf,
xoplus,
xotime,
xrarr,
xrArr,
Xscr,
xscr,
xsqcup,
xuplus,
xutri,
xvee,
xwedge,
Yacute,
yacute,
YAcy,
yacy,
Ycirc,
ycirc,
Ycy,
ycy,
yen,
Yfr,
yfr,
YIcy,
yicy,
Yopf,
yopf,
Yscr,
yscr,
YUcy,
yucy,
yuml,
Yuml,
Zacute,
zacute,
Zcaron,
zcaron,
Zcy,
zcy,
Zdot,
zdot,
zeetrf,
ZeroWidthSpace,
Zeta,
zeta,
zfr,
Zfr,
ZHcy,
zhcy,
zigrarr,
zopf,
Zopf,
Zscr,
zscr,
zwj,
zwnj
};
var entities$1 = require$$0;
var regex$4 = /[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/;
var mdurl$1 = {};
var encodeCache = {};
function getEncodeCache(exclude) {
var i, ch, cache = encodeCache[exclude];
if (cache) {
return cache;
}
cache = encodeCache[exclude] = [];
for (i = 0; i < 128; i++) {
ch = String.fromCharCode(i);
if (/^[0-9a-z]$/i.test(ch)) {
cache.push(ch);
} else {
cache.push("%" + ("0" + i.toString(16).toUpperCase()).slice(-2));
}
}
for (i = 0; i < exclude.length; i++) {
cache[exclude.charCodeAt(i)] = exclude[i];
}
return cache;
}
function encode(string, exclude, keepEscaped) {
var i, l, code3, nextCode, cache, result = "";
if (typeof exclude !== "string") {
keepEscaped = exclude;
exclude = encode.defaultChars;
}
if (typeof keepEscaped === "undefined") {
keepEscaped = true;
}
cache = getEncodeCache(exclude);
for (i = 0, l = string.length; i < l; i++) {
code3 = string.charCodeAt(i);
if (keepEscaped && code3 === 37 && i + 2 < l) {
if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {
result += string.slice(i, i + 3);
i += 2;
continue;
}
}
if (code3 < 128) {
result += cache[code3];
continue;
}
if (code3 >= 55296 && code3 <= 57343) {
if (code3 >= 55296 && code3 <= 56319 && i + 1 < l) {
nextCode = string.charCodeAt(i + 1);
if (nextCode >= 56320 && nextCode <= 57343) {
result += encodeURIComponent(string[i] + string[i + 1]);
i++;
continue;
}
}
result += "%EF%BF%BD";
continue;
}
result += encodeURIComponent(string[i]);
}
return result;
}
encode.defaultChars = ";/?:@&=+$,-_.!~*'()#";
encode.componentChars = "-_.!~*'()";
var encode_1 = encode;
var decodeCache = {};
function getDecodeCache(exclude) {
var i, ch, cache = decodeCache[exclude];
if (cache) {
return cache;
}
cache = decodeCache[exclude] = [];
for (i = 0; i < 128; i++) {
ch = String.fromCharCode(i);
cache.push(ch);
}
for (i = 0; i < exclude.length; i++) {
ch = exclude.charCodeAt(i);
cache[ch] = "%" + ("0" + ch.toString(16).toUpperCase()).slice(-2);
}
return cache;
}
function decode(string, exclude) {
var cache;
if (typeof exclude !== "string") {
exclude = decode.defaultChars;
}
cache = getDecodeCache(exclude);
return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {
var i, l, b1, b2, b3, b4, chr, result = "";
for (i = 0, l = seq.length; i < l; i += 3) {
b1 = parseInt(seq.slice(i + 1, i + 3), 16);
if (b1 < 128) {
result += cache[b1];
continue;
}
if ((b1 & 224) === 192 && i + 3 < l) {
b2 = parseInt(seq.slice(i + 4, i + 6), 16);
if ((b2 & 192) === 128) {
chr = b1 << 6 & 1984 | b2 & 63;
if (chr < 128) {
result += "��";
} else {
result += String.fromCharCode(chr);
}
i += 3;
continue;
}
}
if ((b1 & 240) === 224 && i + 6 < l) {
b2 = parseInt(seq.slice(i + 4, i + 6), 16);
b3 = parseInt(seq.slice(i + 7, i + 9), 16);
if ((b2 & 192) === 128 && (b3 & 192) === 128) {
chr = b1 << 12 & 61440 | b2 << 6 & 4032 | b3 & 63;
if (chr < 2048 || chr >= 55296 && chr <= 57343) {
result += "���";
} else {
result += String.fromCharCode(chr);
}
i += 6;
continue;
}
}
if ((b1 & 248) === 240 && i + 9 < l) {
b2 = parseInt(seq.slice(i + 4, i + 6), 16);
b3 = parseInt(seq.slice(i + 7, i + 9), 16);
b4 = parseInt(seq.slice(i + 10, i + 12), 16);
if ((b2 & 192) === 128 && (b3 & 192) === 128 && (b4 & 192) === 128) {
chr = b1 << 18 & 1835008 | b2 << 12 & 258048 | b3 << 6 & 4032 | b4 & 63;
if (chr < 65536 || chr > 1114111) {
result += "����";
} else {
chr -= 65536;
result += String.fromCharCode(55296 + (chr >> 10), 56320 + (chr & 1023));
}
i += 9;
continue;
}
}
result += "�";
}
return result;
});
}
decode.defaultChars = ";/?:@&=+$,#";
decode.componentChars = "";
var decode_1 = decode;
var format = function format2(url) {
var result = "";
result += url.protocol || "";
result += url.slashes ? "//" : "";
result += url.auth ? url.auth + "@" : "";
if (url.hostname && url.hostname.indexOf(":") !== -1) {
result += "[" + url.hostname + "]";
} else {
result += url.hostname || "";
}
result += url.port ? ":" + url.port : "";
result += url.pathname || "";
result += url.search || "";
result += url.hash || "";
return result;
};
function Url() {
this.protocol = null;
this.slashes = null;
this.auth = null;
this.port = null;
this.hostname = null;
this.hash = null;
this.search = null;
this.pathname = null;
}
var protocolPattern = /^([a-z0-9.+-]+:)/i, portPattern = /:[0-9]*$/, simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, delims = ["<", ">", '"', "`", " ", "\r", "\n", " "], unwise = ["{", "}", "|", "\\", "^", "`"].concat(delims), autoEscape = ["'"].concat(unwise), nonHostChars = ["%", "/", "?", ";", "#"].concat(autoEscape), hostEndingChars = ["/", "?", "#"], hostnameMaxLen = 255, hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, hostlessProtocol = {
"javascript": true,
"javascript:": true
}, slashedProtocol = {
"http": true,
"https": true,
"ftp": true,
"gopher": true,
"file": true,
"http:": true,
"https:": true,
"ftp:": true,
"gopher:": true,
"file:": true
};
function urlParse(url, slashesDenoteHost) {
if (url && url instanceof Url) {
return url;
}
var u = new Url();
u.parse(url, slashesDenoteHost);
return u;
}
Url.prototype.parse = function(url, slashesDenoteHost) {
var i, l, lowerProto, hec, slashes, rest = url;
rest = rest.trim();
if (!slashesDenoteHost && url.split("#").length === 1) {
var simplePath = simplePathPattern.exec(rest);
if (simplePath) {
this.pathname = simplePath[1];
if (simplePath[2]) {
this.search = simplePath[2];
}
return this;
}
}
var proto = protocolPattern.exec(rest);
if (proto) {
proto = proto[0];
lowerProto = proto.toLowerCase();
this.protocol = proto;
rest = rest.substr(proto.length);
}
if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
slashes = rest.substr(0, 2) === "//";
if (slashes && !(proto && hostlessProtocol[proto])) {
rest = rest.substr(2);
this.slashes = true;
}
}
if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {
var hostEnd = -1;
for (i = 0; i < hostEndingChars.length; i++) {
hec = rest.indexOf(hostEndingChars[i]);
if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {
hostEnd = hec;
}
}
var auth, atSign;
if (hostEnd === -1) {
atSign = rest.lastIndexOf("@");
} else {
atSign = rest.lastIndexOf("@", hostEnd);
}
if (atSign !== -1) {
auth = rest.slice(0, atSign);
rest = rest.slice(atSign + 1);
this.auth = auth;
}
hostEnd = -1;
for (i = 0; i < nonHostChars.length; i++) {
hec = rest.indexOf(nonHostChars[i]);
if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {
hostEnd = hec;
}
}
if (hostEnd === -1) {
hostEnd = rest.length;
}
if (rest[hostEnd - 1] === ":") {
hostEnd--;
}
var host = rest.slice(0, hostEnd);
rest = rest.slice(hostEnd);
this.parseHost(host);
this.hostname = this.hostname || "";
var ipv6Hostname = this.hostname[0] === "[" && this.hostname[this.hostname.length - 1] === "]";
if (!ipv6Hostname) {
var hostparts = this.hostname.split(/\./);
for (i = 0, l = hostparts.length; i < l; i++) {
var part2 = hostparts[i];
if (!part2) {
continue;
}
if (!part2.match(hostnamePartPattern)) {
var newpart = "";
for (var j = 0, k = part2.length; j < k; j++) {
if (part2.charCodeAt(j) > 127) {
newpart += "x";
} else {
newpart += part2[j];
}
}
if (!newpart.match(hostnamePartPattern)) {
var validParts = hostparts.slice(0, i);
var notHost = hostparts.slice(i + 1);
var bit = part2.match(hostnamePartStart);
if (bit) {
validParts.push(bit[1]);
notHost.unshift(bit[2]);
}
if (notHost.length) {
rest = notHost.join(".") + rest;
}
this.hostname = validParts.join(".");
break;
}
}
}
}
if (this.hostname.length > hostnameMaxLen) {
this.hostname = "";
}
if (ipv6Hostname) {
this.hostname = this.hostname.substr(1, this.hostname.length - 2);
}
}
var hash = rest.indexOf("#");
if (hash !== -1) {
this.hash = rest.substr(hash);
rest = rest.slice(0, hash);
}
var qm = rest.indexOf("?");
if (qm !== -1) {
this.search = rest.substr(qm);
rest = rest.slice(0, qm);
}
if (rest) {
this.pathname = rest;
}
if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {
this.pathname = "";
}
return this;
};
Url.prototype.parseHost = function(host) {
var port = portPattern.exec(host);
if (port) {
port = port[0];
if (port !== ":") {
this.port = port.substr(1);
}
host = host.substr(0, host.length - port.length);
}
if (host) {
this.hostname = host;
}
};
var parse = urlParse;
mdurl$1.encode = encode_1;
mdurl$1.decode = decode_1;
mdurl$1.format = format;
mdurl$1.parse = parse;
var uc_micro = {};
var regex$3;
var hasRequiredRegex$3;
function requireRegex$3() {
if (hasRequiredRegex$3) return regex$3;
hasRequiredRegex$3 = 1;
regex$3 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
return regex$3;
}
var regex$2;
var hasRequiredRegex$2;
function requireRegex$2() {
if (hasRequiredRegex$2) return regex$2;
hasRequiredRegex$2 = 1;
regex$2 = /[\0-\x1F\x7F-\x9F]/;
return regex$2;
}
var regex$1;
var hasRequiredRegex$1;
function requireRegex$1() {
if (hasRequiredRegex$1) return regex$1;
hasRequiredRegex$1 = 1;
regex$1 = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/;
return regex$1;
}
var regex;
var hasRequiredRegex;
function requireRegex() {
if (hasRequiredRegex) return regex;
hasRequiredRegex = 1;
regex = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;
return regex;
}
var hasRequiredUc_micro;
function requireUc_micro() {
if (hasRequiredUc_micro) return uc_micro;
hasRequiredUc_micro = 1;
uc_micro.Any = requireRegex$3();
uc_micro.Cc = requireRegex$2();
uc_micro.Cf = requireRegex$1();
uc_micro.P = regex$4;
uc_micro.Z = requireRegex();
return uc_micro;
}
(function(exports) {
function _class2(obj) {
return Object.prototype.toString.call(obj);
}
function isString2(obj) {
return _class2(obj) === "[object String]";
}
var _hasOwnProperty = Object.prototype.hasOwnProperty;
function has2(object, key) {
return _hasOwnProperty.call(object, key);
}
function assign2(obj) {
var sources = Array.prototype.slice.call(arguments, 1);
sources.forEach(function(source) {
if (!source) {
return;
}
if (typeof source !== "object") {
throw new TypeError(source + "must be object");
}
Object.keys(source).forEach(function(key) {
obj[key] = source[key];
});
});
return obj;
}
function arrayReplaceAt2(src, pos, newElements) {
return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));
}
function isValidEntityCode2(c) {
if (c >= 55296 && c <= 57343) {
return false;
}
if (c >= 64976 && c <= 65007) {
return false;
}
if ((c & 65535) === 65535 || (c & 65535) === 65534) {
return false;
}
if (c >= 0 && c <= 8) {
return false;
}
if (c === 11) {
return false;
}
if (c >= 14 && c <= 31) {
return false;
}
if (c >= 127 && c <= 159) {
return false;
}
if (c > 1114111) {
return false;
}
return true;
}
function fromCodePoint2(c) {
if (c > 65535) {
c -= 65536;
var surrogate1 = 55296 + (c >> 10), surrogate2 = 56320 + (c & 1023);
return String.fromCharCode(surrogate1, surrogate2);
}
return String.fromCharCode(c);
}
var UNESCAPE_MD_RE = /\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g;
var ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;
var UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + "|" + ENTITY_RE.source, "gi");
var DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;
var entities2 = entities$1;
function replaceEntityPattern(match2, name) {
var code3;
if (has2(entities2, name)) {
return entities2[name];
}
if (name.charCodeAt(0) === 35 && DIGITAL_ENTITY_TEST_RE.test(name)) {
code3 = name[1].toLowerCase() === "x" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);
if (isValidEntityCode2(code3)) {
return fromCodePoint2(code3);
}
}
return match2;
}
function unescapeMd(str) {
if (str.indexOf("\\") < 0) {
return str;
}
return str.replace(UNESCAPE_MD_RE, "$1");
}
function unescapeAll2(str) {
if (str.indexOf("\\") < 0 && str.indexOf("&") < 0) {
return str;
}
return str.replace(UNESCAPE_ALL_RE, function(match2, escaped, entity3) {
if (escaped) {
return escaped;
}
return replaceEntityPattern(match2, entity3);
});
}
var HTML_ESCAPE_TEST_RE = /[&<>"]/;
var HTML_ESCAPE_REPLACE_RE = /[&<>"]/g;
var HTML_REPLACEMENTS = {
"&": "&",
"<": "<",
">": ">",
'"': """
};
function replaceUnsafeChar(ch) {
return HTML_REPLACEMENTS[ch];
}
function escapeHtml2(str) {
if (HTML_ESCAPE_TEST_RE.test(str)) {
return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);
}
return str;
}
var REGEXP_ESCAPE_RE = /[.?*+^$[\]\\(){}|-]/g;
function escapeRE2(str) {
return str.replace(REGEXP_ESCAPE_RE, "\\$&");
}
function isSpace2(code3) {
switch (code3) {
case 9:
case 32:
return true;
}
return false;
}
function isWhiteSpace2(code3) {
if (code3 >= 8192 && code3 <= 8202) {
return true;
}
switch (code3) {
case 9:
case 10:
case 11:
case 12:
case 13:
case 32:
case 160:
case 5760:
case 8239:
case 8287:
case 12288:
return true;
}
return false;
}
var UNICODE_PUNCT_RE = regex$4;
function isPunctChar2(ch) {
return UNICODE_PUNCT_RE.test(ch);
}
function isMdAsciiPunct2(ch) {
switch (ch) {
case 33:
case 34:
case 35:
case 36:
case 37:
case 38:
case 39:
case 40:
case 41:
case 42:
case 43:
case 44:
case 45:
case 46:
case 47:
case 58:
case 59:
case 60:
case 61:
case 62:
case 63:
case 64:
case 91:
case 92:
case 93:
case 94:
case 95:
case 96:
case 123:
case 124:
case 125:
case 126:
return true;
default:
return false;
}
}
function normalizeReference2(str) {
str = str.trim().replace(/\s+/g, " ");
if ("ẞ".toLowerCase() === "Ṿ") {
str = str.replace(/ẞ/g, "ß");
}
return str.toLowerCase().toUpperCase();
}
exports.lib = {};
exports.lib.mdurl = mdurl$1;
exports.lib.ucmicro = requireUc_micro();
exports.assign = assign2;
exports.isString = isString2;
exports.has = has2;
exports.unescapeMd = unescapeMd;
exports.unescapeAll = unescapeAll2;
exports.isValidEntityCode = isValidEntityCode2;
exports.fromCodePoint = fromCodePoint2;
exports.escapeHtml = escapeHtml2;
exports.arrayReplaceAt = arrayReplaceAt2;
exports.isSpace = isSpace2;
exports.isWhiteSpace = isWhiteSpace2;
exports.isMdAsciiPunct = isMdAsciiPunct2;
exports.isPunctChar = isPunctChar2;
exports.escapeRE = escapeRE2;
exports.normalizeReference = normalizeReference2;
})(utils$1);
var helpers$1 = {};
var parse_link_label = function parseLinkLabel(state, start, disableNested) {
var level, found, marker2, prevPos, labelEnd = -1, max = state.posMax, oldPos = state.pos;
state.pos = start + 1;
level = 1;
while (state.pos < max) {
marker2 = state.src.charCodeAt(state.pos);
if (marker2 === 93) {
level--;
if (level === 0) {
found = true;
break;
}
}
prevPos = state.pos;
state.md.inline.skipToken(state);
if (marker2 === 91) {
if (prevPos === state.pos - 1) {
level++;
} else if (disableNested) {
state.pos = oldPos;
return -1;
}
}
}
if (found) {
labelEnd = state.pos;
}
state.pos = oldPos;
return labelEnd;
};
var unescapeAll$2 = utils$1.unescapeAll;
var parse_link_destination = function parseLinkDestination(str, start, max) {
var code3, level, pos = start, result = {
ok: false,
pos: 0,
lines: 0,
str: ""
};
if (str.charCodeAt(pos) === 60) {
pos++;
while (pos < max) {
code3 = str.charCodeAt(pos);
if (code3 === 10) {
return result;
}
if (code3 === 60) {
return result;
}
if (code3 === 62) {
result.pos = pos + 1;
result.str = unescapeAll$2(str.slice(start + 1, pos));
result.ok = true;
return result;
}
if (code3 === 92 && pos + 1 < max) {
pos += 2;
continue;
}
pos++;
}
return result;
}
level = 0;
while (pos < max) {
code3 = str.charCodeAt(pos);
if (code3 === 32) {
break;
}
if (code3 < 32 || code3 === 127) {
break;
}
if (code3 === 92 && pos + 1 < max) {
if (str.charCodeAt(pos + 1) === 32) {
break;
}
pos += 2;
continue;
}
if (code3 === 40) {
level++;
if (level > 32) {
return result;
}
}
if (code3 === 41) {
if (level === 0) {
break;
}
level--;
}
pos++;
}
if (start === pos) {
return result;
}
if (level !== 0) {
return result;
}
result.str = unescapeAll$2(str.slice(start, pos));
result.pos = pos;
result.ok = true;
return result;
};
var unescapeAll$1 = utils$1.unescapeAll;
var parse_link_title = function parseLinkTitle(str, start, max) {
var code3, marker2, lines = 0, pos = start, result = {
ok: false,
pos: 0,
lines: 0,
str: ""
};
if (pos >= max) {
return result;
}
marker2 = str.charCodeAt(pos);
if (marker2 !== 34 && marker2 !== 39 && marker2 !== 40) {
return result;
}
pos++;
if (marker2 === 40) {
marker2 = 41;
}
while (pos < max) {
code3 = str.charCodeAt(pos);
if (code3 === marker2) {
result.pos = pos + 1;
result.lines = lines;
result.str = unescapeAll$1(str.slice(start + 1, pos));
result.ok = true;
return result;
} else if (code3 === 40 && marker2 === 41) {
return result;
} else if (code3 === 10) {
lines++;
} else if (code3 === 92 && pos + 1 < max) {
pos++;
if (str.charCodeAt(pos) === 10) {
lines++;
}
}
pos++;
}
return result;
};
helpers$1.parseLinkLabel = parse_link_label;
helpers$1.parseLinkDestination = parse_link_destination;
helpers$1.parseLinkTitle = parse_link_title;
var assign$1 = utils$1.assign;
var unescapeAll = utils$1.unescapeAll;
var escapeHtml = utils$1.escapeHtml;
var default_rules = {};
default_rules.code_inline = function(tokens, idx, options, env, slf) {
var token2 = tokens[idx];
return "<code" + slf.renderAttrs(token2) + ">" + escapeHtml(token2.content) + "</code>";
};
default_rules.code_block = function(tokens, idx, options, env, slf) {
var token2 = tokens[idx];
return "<pre" + slf.renderAttrs(token2) + "><code>" + escapeHtml(tokens[idx].content) + "</code></pre>\n";
};
default_rules.fence = function(tokens, idx, options, env, slf) {
var token2 = tokens[idx], info = token2.info ? unescapeAll(token2.info).trim() : "", langName = "", langAttrs = "", highlighted, i, arr, tmpAttrs, tmpToken;
if (info) {
arr = info.split(/(\s+)/g);
langName = arr[0];
langAttrs = arr.slice(2).join("");
}
if (options.highlight) {
highlighted = options.highlight(token2.content, langName, langAttrs) || escapeHtml(token2.content);
} else {
highlighted = escapeHtml(token2.content);
}
if (highlighted.indexOf("<pre") === 0) {
return highlighted + "\n";
}
if (info) {
i = token2.attrIndex("class");
tmpAttrs = token2.attrs ? token2.attrs.slice() : [];
if (i < 0) {
tmpAttrs.push(["class", options.langPrefix + langName]);
} else {
tmpAttrs[i] = tmpAttrs[i].slice();
tmpAttrs[i][1] += " " + options.langPrefix + langName;
}
tmpToken = {
attrs: tmpAttrs
};
return "<pre><code" + slf.renderAttrs(tmpToken) + ">" + highlighted + "</code></pre>\n";
}
return "<pre><code" + slf.renderAttrs(token2) + ">" + highlighted + "</code></pre>\n";
};
default_rules.image = function(tokens, idx, options, env, slf) {
var token2 = tokens[idx];
token2.attrs[token2.attrIndex("alt")][1] = slf.renderInlineAsText(token2.children, options, env);
return slf.renderToken(tokens, idx, options);
};
default_rules.hardbreak = function(tokens, idx, options) {
return options.xhtmlOut ? "<br />\n" : "<br>\n";
};
default_rules.softbreak = function(tokens, idx, options) {
return options.breaks ? options.xhtmlOut ? "<br />\n" : "<br>\n" : "\n";
};
default_rules.text = function(tokens, idx) {
return escapeHtml(tokens[idx].content);
};
default_rules.html_block = function(tokens, idx) {
return tokens[idx].content;
};
default_rules.html_inline = function(tokens, idx) {
return tokens[idx].content;
};
function Renderer$1() {
this.rules = assign$1({}, default_rules);
}
Renderer$1.prototype.renderAttrs = function renderAttrs(token2) {
var i, l, result;
if (!token2.attrs) {
return "";
}
result = "";
for (i = 0, l = token2.attrs.length; i < l; i++) {
result += " " + escapeHtml(token2.attrs[i][0]) + '="' + escapeHtml(token2.attrs[i][1]) + '"';
}
return result;
};
Renderer$1.prototype.renderToken = function renderToken(tokens, idx, options) {
var nextToken, result = "", needLf = false, token2 = tokens[idx];
if (token2.hidden) {
return "";
}
if (token2.block && token2.nesting !== -1 && idx && tokens[idx - 1].hidden) {
result += "\n";
}
result += (token2.nesting === -1 ? "</" : "<") + token2.tag;
result += this.renderAttrs(token2);
if (token2.nesting === 0 && options.xhtmlOut) {
result += " /";
}
if (token2.block) {
needLf = true;
if (token2.nesting === 1) {
if (idx + 1 < tokens.length) {
nextToken = tokens[idx + 1];
if (nextToken.type === "inline" || nextToken.hidden) {
needLf = false;
} else if (nextToken.nesting === -1 && nextToken.tag === token2.tag) {
needLf = false;
}
}
}
}
result += needLf ? ">\n" : ">";
return result;
};
Renderer$1.prototype.renderInline = function(tokens, options, env) {
var type, result = "", rules = this.rules;
for (var i = 0, len = tokens.length; i < len; i++) {
type = tokens[i].type;
if (typeof rules[type] !== "undefined") {
result += rules[type](tokens, i, options, env, this);
} else {
result += this.renderToken(tokens, i, options);
}
}
return result;
};
Renderer$1.prototype.renderInlineAsText = function(tokens, options, env) {
var result = "";
for (var i = 0, len = tokens.length; i < len; i++) {
if (tokens[i].type === "text") {
result += tokens[i].content;
} else if (tokens[i].type === "image") {
result += this.renderInlineAsText(tokens[i].children, options, env);
} else if (tokens[i].type === "softbreak") {
result += "\n";
}
}
return result;
};
Renderer$1.prototype.render = function(tokens, options, env) {
var i, len, type, result = "", rules = this.rules;
for (i = 0, len = tokens.length; i < len; i++) {
type = tokens[i].type;
if (type === "inline") {
result += this.renderInline(tokens[i].children, options, env);
} else if (typeof rules[type] !== "undefined") {
result += rules[type](tokens, i, options, env, this);
} else {
result += this.renderToken(tokens, i, options, env);
}
}
return result;
};
var renderer = Renderer$1;
function Ruler$3() {
this.__rules__ = [];
this.__cache__ = null;
}
Ruler$3.prototype.__find__ = function(name) {
for (var i = 0; i < this.__rules__.length; i++) {
if (this.__rules__[i].name === name) {
return i;
}
}
return -1;
};
Ruler$3.prototype.__compile__ = function() {
var self = this;
var chains = [""];
self.__rules__.forEach(function(rule) {
if (!rule.enabled) {
return;
}
rule.alt.forEach(function(altName) {
if (chains.indexOf(altName) < 0) {
chains.push(altName);
}
});
});
self.__cache__ = {};
chains.forEach(function(chain) {
self.__cache__[chain] = [];
self.__rules__.forEach(function(rule) {
if (!rule.enabled) {
return;
}
if (chain && rule.alt.indexOf(chain) < 0) {
return;
}
self.__cache__[chain].push(rule.fn);
});
});
};
Ruler$3.prototype.at = function(name, fn, options) {
var index = this.__find__(name);
var opt = options || {};
if (index === -1) {
throw new Error("Parser rule not found: " + name);
}
this.__rules__[index].fn = fn;
this.__rules__[index].alt = opt.alt || [];
this.__cache__ = null;
};
Ruler$3.prototype.before = function(beforeName, ruleName, fn, options) {
var index = this.__find__(beforeName);
var opt = options || {};
if (index === -1) {
throw new Error("Parser rule not found: " + beforeName);
}
this.__rules__.splice(index, 0, {
name: ruleName,
enabled: true,
fn,
alt: opt.alt || []
});
this.__cache__ = null;
};
Ruler$3.prototype.after = function(afterName, ruleName, fn, options) {
var index = this.__find__(afterName);
var opt = options || {};
if (index === -1) {
throw new Error("Parser rule not found: " + afterName);
}
this.__rules__.splice(index + 1, 0, {
name: ruleName,
enabled: true,
fn,
alt: opt.alt || []
});
this.__cache__ = null;
};
Ruler$3.prototype.push = function(ruleName, fn, options) {
var opt = options || {};
this.__rules__.push({
name: ruleName,
enabled: true,
fn,
alt: opt.alt || []
});
this.__cache__ = null;
};
Ruler$3.prototype.enable = function(list3, ignoreInvalid) {
if (!Array.isArray(list3)) {
list3 = [list3];
}
var result = [];
list3.forEach(function(name) {
var idx = this.__find__(name);
if (idx < 0) {
if (ignoreInvalid) {
return;
}
throw new Error("Rules manager: invalid rule name " + name);
}
this.__rules__[idx].enabled = true;
result.push(name);
}, this);
this.__cache__ = null;
return result;
};
Ruler$3.prototype.enableOnly = function(list3, ignoreInvalid) {
if (!Array.isArray(list3)) {
list3 = [list3];
}
this.__rules__.forEach(function(rule) {
rule.enabled = false;
});
this.enable(list3, ignoreInvalid);
};
Ruler$3.prototype.disable = function(list3, ignoreInvalid) {
if (!Array.isArray(list3)) {
list3 = [list3];
}
var result = [];
list3.forEach(function(name) {
var idx = this.__find__(name);
if (idx < 0) {
if (ignoreInvalid) {
return;
}
throw new Error("Rules manager: invalid rule name " + name);
}
this.__rules__[idx].enabled = false;
result.push(name);
}, this);
this.__cache__ = null;
return result;
};
Ruler$3.prototype.getRules = function(chainName) {
if (this.__cache__ === null) {
this.__compile__();
}
return this.__cache__[chainName] || [];
};
var ruler = Ruler$3;
var NEWLINES_RE = /\r\n?|\n/g;
var NULL_RE = /\0/g;
var normalize = function normalize2(state) {
var str;
str = state.src.replace(NEWLINES_RE, "\n");
str = str.replace(NULL_RE, "�");
state.src = str;
};
var block = function block2(state) {
var token2;
if (state.inlineMode) {
token2 = new state.Token("inline", "", 0);
token2.content = state.src;
token2.map = [0, 1];
token2.children = [];
state.tokens.push(token2);
} else {
state.md.block.parse(state.src, state.md, state.env, state.tokens);
}
};
var inline = function inline2(state) {
var tokens = state.tokens, tok, i, l;
for (i = 0, l = tokens.length; i < l; i++) {
tok = tokens[i];
if (tok.type === "inline") {
state.md.inline.parse(tok.content, state.md, state.env, tok.children);
}
}
};
var arrayReplaceAt = utils$1.arrayReplaceAt;
function isLinkOpen$1(str) {
return /^<a[>\s]/i.test(str);
}
function isLinkClose$1(str) {
return /^<\/a\s*>/i.test(str);
}
var linkify$1 = function linkify(state) {
var i, j, l, tokens, token2, currentToken, nodes, ln, text3, pos, lastPos, level, htmlLinkLevel, url, fullUrl, urlText, blockTokens = state.tokens, links;
if (!state.md.options.linkify) {
return;
}
for (j = 0, l = blockTokens.length; j < l; j++) {
if (blockTokens[j].type !== "inline" || !state.md.linkify.pretest(blockTokens[j].content)) {
continue;
}
tokens = blockTokens[j].children;
htmlLinkLevel = 0;
for (i = tokens.length - 1; i >= 0; i--) {
currentToken = tokens[i];
if (currentToken.type === "link_close") {
i--;
while (tokens[i].level !== currentToken.level && tokens[i].type !== "link_open") {
i--;
}
continue;
}
if (currentToken.type === "html_inline") {
if (isLinkOpen$1(currentToken.content) && htmlLinkLevel > 0) {
htmlLinkLevel--;
}
if (isLinkClose$1(currentToken.content)) {
htmlLinkLevel++;
}
}
if (htmlLinkLevel > 0) {
continue;
}
if (currentToken.type === "text" && state.md.linkify.test(currentToken.content)) {
text3 = currentToken.content;
links = state.md.linkify.match(text3);
nodes = [];
level = currentToken.level;
lastPos = 0;
if (links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === "text_special") {
links = links.slice(1);
}
for (ln = 0; ln < links.length; ln++) {
url = links[ln].url;
fullUrl = state.md.normalizeLink(url);
if (!state.md.validateLink(fullUrl)) {
continue;
}
urlText = links[ln].text;
if (!links[ln].schema) {
urlText = state.md.normalizeLinkText("http://" + urlText).replace(/^http:\/\//, "");
} else if (links[ln].schema === "mailto:" && !/^mailto:/i.test(urlText)) {
urlText = state.md.normalizeLinkText("mailto:" + urlText).replace(/^mailto:/, "");
} else {
urlText = state.md.normalizeLinkText(urlText);
}
pos = links[ln].index;
if (pos > lastPos) {
token2 = new state.Token("text", "", 0);
token2.content = text3.slice(lastPos, pos);
token2.level = level;
nodes.push(token2);
}
token2 = new state.Token("link_open", "a", 1);
token2.attrs = [["href", fullUrl]];
token2.level = level++;
token2.markup = "linkify";
token2.info = "auto";
nodes.push(token2);
token2 = new state.Token("text", "", 0);
token2.content = urlText;
token2.level = level;
nodes.push(token2);
token2 = new state.Token("link_close", "a", -1);
token2.level = --level;
token2.markup = "linkify";
token2.info = "auto";
nodes.push(token2);
lastPos = links[ln].lastIndex;
}
if (lastPos < text3.length) {
token2 = new state.Token("text", "", 0);
token2.content = text3.slice(lastPos);
token2.level = level;
nodes.push(token2);
}
blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);
}
}
}
};
var RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/;
var SCOPED_ABBR_TEST_RE = /\((c|tm|r)\)/i;
var SCOPED_ABBR_RE = /\((c|tm|r)\)/ig;
var SCOPED_ABBR = {
c: "©",
r: "®",
tm: "™"
};
function replaceFn(match2, name) {
return SCOPED_ABBR[name.toLowerCase()];
}
function replace_scoped(inlineTokens) {
var i, token2, inside_autolink = 0;
for (i = inlineTokens.length - 1; i >= 0; i--) {
token2 = inlineTokens[i];
if (token2.type === "text" && !inside_autolink) {
token2.content = token2.content.replace(SCOPED_ABBR_RE, replaceFn);
}
if (token2.type === "link_open" && token2.info === "auto") {
inside_autolink--;
}
if (token2.type === "link_close" && token2.info === "auto") {
inside_autolink++;
}
}
}
function replace_rare(inlineTokens) {
var i, token2, inside_autolink = 0;
for (i = inlineTokens.length - 1; i >= 0; i--) {
token2 = inlineTokens[i];
if (token2.type === "text" && !inside_autolink) {
if (RARE_RE.test(token2.content)) {
token2.content = token2.content.replace(/\+-/g, "±").replace(/\.{2,}/g, "…").replace(/([?!])…/g, "$1..").replace(/([?!]){4,}/g, "$1$1$1").replace(/,{2,}/g, ",").replace(/(^|[^-])---(?=[^-]|$)/mg, "$1—").replace(/(^|\s)--(?=\s|$)/mg, "$1–").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg, "$1–");
}
}
if (token2.type === "link_open" && token2.info === "auto") {
inside_autolink--;
}
if (token2.type === "link_close" && token2.info === "auto") {
inside_autolink++;
}
}
}
var replacements = function replace(state) {
var blkIdx;
if (!state.md.options.typographer) {
return;
}
for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {
if (state.tokens[blkIdx].type !== "inline") {
continue;
}
if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {
replace_scoped(state.tokens[blkIdx].children);
}
if (RARE_RE.test(state.tokens[blkIdx].content)) {
replace_rare(state.tokens[blkIdx].children);
}
}
};
var isWhiteSpace$1 = utils$1.isWhiteSpace;
var isPunctChar$1 = utils$1.isPunctChar;
var isMdAsciiPunct$1 = utils$1.isMdAsciiPunct;
var QUOTE_TEST_RE = /['"]/;
var QUOTE_RE = /['"]/g;
var APOSTROPHE = "’";
function replaceAt(str, index, ch) {
return str.slice(0, index) + ch + str.slice(index + 1);
}
function process_inlines(tokens, state) {
var i, token2, text3, t, pos, max, thisLevel, item, lastChar, nextChar, isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace, canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;
stack = [];
for (i = 0; i < tokens.length; i++) {
token2 = tokens[i];
thisLevel = tokens[i].level;
for (j = stack.length - 1; j >= 0; j--) {
if (stack[j].level <= thisLevel) {
break;
}
}
stack.length = j + 1;
if (token2.type !== "text") {
continue;
}
text3 = token2.content;
pos = 0;
max = text3.length;
OUTER:
while (pos < max) {
QUOTE_RE.lastIndex = pos;
t = QUOTE_RE.exec(text3);
if (!t) {
break;
}
canOpen = canClose = true;
pos = t.index + 1;
isSingle = t[0] === "'";
lastChar = 32;
if (t.index - 1 >= 0) {
lastChar = text3.charCodeAt(t.index - 1);
} else {
for (j = i - 1; j >= 0; j--) {
if (tokens[j].type === "softbreak" || tokens[j].type === "hardbreak") break;
if (!tokens[j].content) continue;
lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);
break;
}
}
nextChar = 32;
if (pos < max) {
nextChar = text3.charCodeAt(pos);
} else {
for (j = i + 1; j < tokens.length; j++) {
if (tokens[j].type === "softbreak" || tokens[j].type === "hardbreak") break;
if (!tokens[j].content) continue;
nextChar = tokens[j].content.charCodeAt(0);
break;
}
}
isLastPunctChar = isMdAsciiPunct$1(lastChar) || isPunctChar$1(String.fromCharCode(lastChar));
isNextPunctChar = isMdAsciiPunct$1(nextChar) || isPunctChar$1(String.fromCharCode(nextChar));
isLastWhiteSpace = isWhiteSpace$1(lastChar);
isNextWhiteSpace = isWhiteSpace$1(nextChar);
if (isNextWhiteSpace) {
canOpen = false;
} else if (isNextPunctChar) {
if (!(isLastWhiteSpace || isLastPunctChar)) {
canOpen = false;
}
}
if (isLastWhiteSpace) {
canClose = false;
} else if (isLastPunctChar) {
if (!(isNextWhiteSpace || isNextPunctChar)) {
canClose = false;
}
}
if (nextChar === 34 && t[0] === '"') {
if (lastChar >= 48 && lastChar <= 57) {
canClose = canOpen = false;
}
}
if (canOpen && canClose) {
canOpen = isLastPunctChar;
canClose = isNextPunctChar;
}
if (!canOpen && !canClose) {
if (isSingle) {
token2.content = replaceAt(token2.content, t.index, APOSTROPHE);
}
continue;
}
if (canClose) {
for (j = stack.length - 1; j >= 0; j--) {
item = stack[j];
if (stack[j].level < thisLevel) {
break;
}
if (item.single === isSingle && stack[j].level === thisLevel) {
item = stack[j];
if (isSingle) {
openQuote = state.md.options.quotes[2];
closeQuote = state.md.options.quotes[3];
} else {
openQuote = state.md.options.quotes[0];
closeQuote = state.md.options.quotes[1];
}
token2.content = replaceAt(token2.content, t.index, closeQuote);
tokens[item.token].content = replaceAt(
tokens[item.token].content,
item.pos,
openQuote
);
pos += closeQuote.length - 1;
if (item.token === i) {
pos += openQuote.length - 1;
}
text3 = token2.content;
max = text3.length;
stack.length = j;
continue OUTER;
}
}
}
if (canOpen) {
stack.push({
token: i,
pos: t.index,
single: isSingle,
level: thisLevel
});
} else if (canClose && isSingle) {
token2.content = replaceAt(token2.content, t.index, APOSTROPHE);
}
}
}
}
var smartquotes = function smartquotes2(state) {
var blkIdx;
if (!state.md.options.typographer) {
return;
}
for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {
if (state.tokens[blkIdx].type !== "inline" || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {
continue;
}
process_inlines(state.tokens[blkIdx].children, state);
}
};
var text_join = function text_join2(state) {
var j, l, tokens, curr, max, last, blockTokens = state.tokens;
for (j = 0, l = blockTokens.length; j < l; j++) {
if (blockTokens[j].type !== "inline") continue;
tokens = blockTokens[j].children;
max = tokens.length;
for (curr = 0; curr < max; curr++) {
if (tokens[curr].type === "text_special") {
tokens[curr].type = "text";
}
}
for (curr = last = 0; curr < max; curr++) {
if (tokens[curr].type === "text" && curr + 1 < max && tokens[curr + 1].type === "text") {
tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;
} else {
if (curr !== last) {
tokens[last] = tokens[curr];
}
last++;
}
}
if (curr !== last) {
tokens.length = last;
}
}
};
function Token$3(type, tag, nesting) {
this.type = type;
this.tag = tag;
this.attrs = null;
this.map = null;
this.nesting = nesting;
this.level = 0;
this.children = null;
this.content = "";
this.markup = "";
this.info = "";
this.meta = null;
this.block = false;
this.hidden = false;
}
Token$3.prototype.attrIndex = function attrIndex(name) {
var attrs, i, len;
if (!this.attrs) {
return -1;
}
attrs = this.attrs;
for (i = 0, len = attrs.length; i < len; i++) {
if (attrs[i][0] === name) {
return i;
}
}
return -1;
};
Token$3.prototype.attrPush = function attrPush(attrData) {
if (this.attrs) {
this.attrs.push(attrData);
} else {
this.attrs = [attrData];
}
};
Token$3.prototype.attrSet = function attrSet(name, value) {
var idx = this.attrIndex(name), attrData = [name, value];
if (idx < 0) {
this.attrPush(attrData);
} else {
this.attrs[idx] = attrData;
}
};
Token$3.prototype.attrGet = function attrGet(name) {
var idx = this.attrIndex(name), value = null;
if (idx >= 0) {
value = this.attrs[idx][1];
}
return value;
};
Token$3.prototype.attrJoin = function attrJoin(name, value) {
var idx = this.attrIndex(name);
if (idx < 0) {
this.attrPush([name, value]);
} else {
this.attrs[idx][1] = this.attrs[idx][1] + " " + value;
}
};
var token = Token$3;
var Token$2 = token;
function StateCore(src, md, env) {
this.src = src;
this.env = env;
this.tokens = [];
this.inlineMode = false;
this.md = md;
}
StateCore.prototype.Token = Token$2;
var state_core = StateCore;
var Ruler$2 = ruler;
var _rules$2 = [
["normalize", normalize],
["block", block],
["inline", inline],
["linkify", linkify$1],
["replacements", replacements],
["smartquotes", smartquotes],
// `text_join` finds `text_special` tokens (for escape sequences)
// and joins them with the rest of the text
["text_join", text_join]
];
function Core() {
this.ruler = new Ruler$2();
for (var i = 0; i < _rules$2.length; i++) {
this.ruler.push(_rules$2[i][0], _rules$2[i][1]);
}
}
Core.prototype.process = function(state) {
var i, l, rules;
rules = this.ruler.getRules("");
for (i = 0, l = rules.length; i < l; i++) {
rules[i](state);
}
};
Core.prototype.State = state_core;
var parser_core = Core;
var isSpace$a = utils$1.isSpace;
function getLine(state, line) {
var pos = state.bMarks[line] + state.tShift[line], max = state.eMarks[line];
return state.src.slice(pos, max);
}
function escapedSplit(str) {
var result = [], pos = 0, max = str.length, ch, isEscaped = false, lastPos = 0, current = "";
ch = str.charCodeAt(pos);
while (pos < max) {
if (ch === 124) {
if (!isEscaped) {
result.push(current + str.substring(lastPos, pos));
current = "";
lastPos = pos + 1;
} else {
current += str.substring(lastPos, pos - 1);
lastPos = pos;
}
}
isEscaped = ch === 92;
pos++;
ch = str.charCodeAt(pos);
}
result.push(current + str.substring(lastPos));
return result;
}
var table = function table2(state, startLine, endLine, silent) {
var ch, lineText, pos, i, l, nextLine, columns, columnCount, token2, aligns, t, tableLines, tbodyLines, oldParentType, terminate, terminatorRules, firstCh, secondCh;
if (startLine + 2 > endLine) {
return false;
}
nextLine = startLine + 1;
if (state.sCount[nextLine] < state.blkIndent) {
return false;
}
if (state.sCount[nextLine] - state.blkIndent >= 4) {
return false;
}
pos = state.bMarks[nextLine] + state.tShift[nextLine];
if (pos >= state.eMarks[nextLine]) {
return false;
}
firstCh = state.src.charCodeAt(pos++);
if (firstCh !== 124 && firstCh !== 45 && firstCh !== 58) {
return false;
}
if (pos >= state.eMarks[nextLine]) {
return false;
}
secondCh = state.src.charCodeAt(pos++);
if (secondCh !== 124 && secondCh !== 45 && secondCh !== 58 && !isSpace$a(secondCh)) {
return false;
}
if (firstCh === 45 && isSpace$a(secondCh)) {
return false;
}
while (pos < state.eMarks[nextLine]) {
ch = state.src.charCodeAt(pos);
if (ch !== 124 && ch !== 45 && ch !== 58 && !isSpace$a(ch)) {
return false;
}
pos++;
}
lineText = getLine(state, startLine + 1);
columns = lineText.split("|");
aligns = [];
for (i = 0; i < columns.length; i++) {
t = columns[i].trim();
if (!t) {
if (i === 0 || i === columns.length - 1) {
continue;
} else {
return false;
}
}
if (!/^:?-+:?$/.test(t)) {
return false;
}
if (t.charCodeAt(t.length - 1) === 58) {
aligns.push(t.charCodeAt(0) === 58 ? "center" : "right");
} else if (t.charCodeAt(0) === 58) {
aligns.push("left");
} else {
aligns.push("");
}
}
lineText = getLine(state, startLine).trim();
if (lineText.indexOf("|") === -1) {
return false;
}
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
columns = escapedSplit(lineText);
if (columns.length && columns[0] === "") columns.shift();
if (columns.length && columns[columns.length - 1] === "") columns.pop();
columnCount = columns.length;
if (columnCount === 0 || columnCount !== aligns.length) {
return false;
}
if (silent) {
return true;
}
oldParentType = state.parentType;
state.parentType = "table";
terminatorRules = state.md.block.ruler.getRules("blockquote");
token2 = state.push("table_open", "table", 1);
token2.map = tableLines = [startLine, 0];
token2 = state.push("thead_open", "thead", 1);
token2.map = [startLine, startLine + 1];
token2 = state.push("tr_open", "tr", 1);
token2.map = [startLine, startLine + 1];
for (i = 0; i < columns.length; i++) {
token2 = state.push("th_open", "th", 1);
if (aligns[i]) {
token2.attrs = [["style", "text-align:" + aligns[i]]];
}
token2 = state.push("inline", "", 0);
token2.content = columns[i].trim();
token2.children = [];
token2 = state.push("th_close", "th", -1);
}
token2 = state.push("tr_close", "tr", -1);
token2 = state.push("thead_close", "thead", -1);
for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {
if (state.sCount[nextLine] < state.blkIndent) {
break;
}
terminate = false;
for (i = 0, l = terminatorRules.length; i < l; i++) {
if (terminatorRules[i](state, nextLine, endLine, true)) {
terminate = true;
break;
}
}
if (terminate) {
break;
}
lineText = getLine(state, nextLine).trim();
if (!lineText) {
break;
}
if (state.sCount[nextLine] - state.blkIndent >= 4) {
break;
}
columns = escapedSplit(lineText);
if (columns.length && columns[0] === "") columns.shift();
if (columns.length && columns[columns.length - 1] === "") columns.pop();
if (nextLine === startLine + 2) {
token2 = state.push("tbody_open", "tbody", 1);
token2.map = tbodyLines = [startLine + 2, 0];
}
token2 = state.push("tr_open", "tr", 1);
token2.map = [nextLine, nextLine + 1];
for (i = 0; i < columnCount; i++) {
token2 = state.push("td_open", "td", 1);
if (aligns[i]) {
token2.attrs = [["style", "text-align:" + aligns[i]]];
}
token2 = state.push("inline", "", 0);
token2.content = columns[i] ? columns[i].trim() : "";
token2.children = [];
token2 = state.push("td_close", "td", -1);
}
token2 = state.push("tr_close", "tr", -1);
}
if (tbodyLines) {
token2 = state.push("tbody_close", "tbody", -1);
tbodyLines[1] = nextLine;
}
token2 = state.push("table_close", "table", -1);
tableLines[1] = nextLine;
state.parentType = oldParentType;
state.line = nextLine;
return true;
};
var code = function code2(state, startLine, endLine) {
var nextLine, last, token2;
if (state.sCount[startLine] - state.blkIndent < 4) {
return false;
}
last = nextLine = startLine + 1;
while (nextLine < endLine) {
if (state.isEmpty(nextLine)) {
nextLine++;
continue;
}
if (state.sCount[nextLine] - state.blkIndent >= 4) {
nextLine++;
last = nextLine;
continue;
}
break;
}
state.line = last;
token2 = state.push("code_block", "code", 0);
token2.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + "\n";
token2.map = [startLine, state.line];
return true;
};
var fence = function fence2(state, startLine, endLine, silent) {
var marker2, len, params, nextLine, mem, token2, markup, haveEndMarker = false, pos = state.bMarks[startLine] + state.tShift[startLine], max = state.eMarks[startLine];
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
if (pos + 3 > max) {
return false;
}
marker2 = state.src.charCodeAt(pos);
if (marker2 !== 126 && marker2 !== 96) {
return false;
}
mem = pos;
pos = state.skipChars(pos, marker2);
len = pos - mem;
if (len < 3) {
return false;
}
markup = state.src.slice(mem, pos);
params = state.src.slice(pos, max);
if (marker2 === 96) {
if (params.indexOf(String.fromCharCode(marker2)) >= 0) {
return false;
}
}
if (silent) {
return true;
}
nextLine = startLine;
for (; ; ) {
nextLine++;
if (nextLine >= endLine) {
break;
}
pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];
max = state.eMarks[nextLine];
if (pos < max && state.sCount[nextLine] < state.blkIndent) {
break;
}
if (state.src.charCodeAt(pos) !== marker2) {
continue;
}
if (state.sCount[nextLine] - state.blkIndent >= 4) {
continue;
}
pos = state.skipChars(pos, marker2);
if (pos - mem < len) {
continue;
}
pos = state.skipSpaces(pos);
if (pos < max) {
continue;
}
haveEndMarker = true;
break;
}
len = state.sCount[startLine];
state.line = nextLine + (haveEndMarker ? 1 : 0);
token2 = state.push("fence", "code", 0);
token2.info = params;
token2.content = state.getLines(startLine + 1, nextLine, len, true);
token2.markup = markup;
token2.map = [startLine, state.line];
return true;
};
var isSpace$9 = utils$1.isSpace;
var blockquote = function blockquote2(state, startLine, endLine, silent) {
var adjustTab, ch, i, initial, l, lastLineEmpty, lines, nextLine, offset, oldBMarks, oldBSCount, oldIndent, oldParentType, oldSCount, oldTShift, spaceAfterMarker, terminate, terminatorRules, token2, isOutdented, oldLineMax = state.lineMax, pos = state.bMarks[startLine] + state.tShift[startLine], max = state.eMarks[startLine];
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
if (state.src.charCodeAt(pos) !== 62) {
return false;
}
if (silent) {
return true;
}
oldBMarks = [];
oldBSCount = [];
oldSCount = [];
oldTShift = [];
terminatorRules = state.md.block.ruler.getRules("blockquote");
oldParentType = state.parentType;
state.parentType = "blockquote";
for (nextLine = startLine; nextLine < endLine; nextLine++) {
isOutdented = state.sCount[nextLine] < state.blkIndent;
pos = state.bMarks[nextLine] + state.tShift[nextLine];
max = state.eMarks[nextLine];
if (pos >= max) {
break;
}
if (state.src.charCodeAt(pos++) === 62 && !isOutdented) {
initial = state.sCount[nextLine] + 1;
if (state.src.charCodeAt(pos) === 32) {
pos++;
initial++;
adjustTab = false;
spaceAfterMarker = true;
} else if (state.src.charCodeAt(pos) === 9) {
spaceAfterMarker = true;
if ((state.bsCount[nextLine] + initial) % 4 === 3) {
pos++;
initial++;
adjustTab = false;
} else {
adjustTab = true;
}
} else {
spaceAfterMarker = false;
}
offset = initial;
oldBMarks.push(state.bMarks[nextLine]);
state.bMarks[nextLine] = pos;
while (pos < max) {
ch = state.src.charCodeAt(pos);
if (isSpace$9(ch)) {
if (ch === 9) {
offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;
} else {
offset++;
}
} else {
break;
}
pos++;
}
lastLineEmpty = pos >= max;
oldBSCount.push(state.bsCount[nextLine]);
state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);
oldSCount.push(state.sCount[nextLine]);
state.sCount[nextLine] = offset - initial;
oldTShift.push(state.tShift[nextLine]);
state.tShift[nextLine] = pos - state.bMarks[nextLine];
continue;
}
if (lastLineEmpty) {
break;
}
terminate = false;
for (i = 0, l = terminatorRules.length; i < l; i++) {
if (terminatorRules[i](state, nextLine, endLine, true)) {
terminate = true;
break;
}
}
if (terminate) {
state.lineMax = nextLine;
if (state.blkIndent !== 0) {
oldBMarks.push(state.bMarks[nextLine]);
oldBSCount.push(state.bsCount[nextLine]);
oldTShift.push(state.tShift[nextLine]);
oldSCount.push(state.sCount[nextLine]);
state.sCount[nextLine] -= state.blkIndent;
}
break;
}
oldBMarks.push(state.bMarks[nextLine]);
oldBSCount.push(state.bsCount[nextLine]);
oldTShift.push(state.tShift[nextLine]);
oldSCount.push(state.sCount[nextLine]);
state.sCount[nextLine] = -1;
}
oldIndent = state.blkIndent;
state.blkIndent = 0;
token2 = state.push("blockquote_open", "blockquote", 1);
token2.markup = ">";
token2.map = lines = [startLine, 0];
state.md.block.tokenize(state, startLine, nextLine);
token2 = state.push("blockquote_close", "blockquote", -1);
token2.markup = ">";
state.lineMax = oldLineMax;
state.parentType = oldParentType;
lines[1] = state.line;
for (i = 0; i < oldTShift.length; i++) {
state.bMarks[i + startLine] = oldBMarks[i];
state.tShift[i + startLine] = oldTShift[i];
state.sCount[i + startLine] = oldSCount[i];
state.bsCount[i + startLine] = oldBSCount[i];
}
state.blkIndent = oldIndent;
return true;
};
var isSpace$8 = utils$1.isSpace;
var hr = function hr2(state, startLine, endLine, silent) {
var marker2, cnt, ch, token2, pos = state.bMarks[startLine] + state.tShift[startLine], max = state.eMarks[startLine];
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
marker2 = state.src.charCodeAt(pos++);
if (marker2 !== 42 && marker2 !== 45 && marker2 !== 95) {
return false;
}
cnt = 1;
while (pos < max) {
ch = state.src.charCodeAt(pos++);
if (ch !== marker2 && !isSpace$8(ch)) {
return false;
}
if (ch === marker2) {
cnt++;
}
}
if (cnt < 3) {
return false;
}
if (silent) {
return true;
}
state.line = startLine + 1;
token2 = state.push("hr", "hr", 0);
token2.map = [startLine, state.line];
token2.markup = Array(cnt + 1).join(String.fromCharCode(marker2));
return true;
};
var isSpace$7 = utils$1.isSpace;
function skipBulletListMarker(state, startLine) {
var marker2, pos, max, ch;
pos = state.bMarks[startLine] + state.tShift[startLine];
max = state.eMarks[startLine];
marker2 = state.src.charCodeAt(pos++);
if (marker2 !== 42 && marker2 !== 45 && marker2 !== 43) {
return -1;
}
if (pos < max) {
ch = state.src.charCodeAt(pos);
if (!isSpace$7(ch)) {
return -1;
}
}
return pos;
}
function skipOrderedListMarker(state, startLine) {
var ch, start = state.bMarks[startLine] + state.tShift[startLine], pos = start, max = state.eMarks[startLine];
if (pos + 1 >= max) {
return -1;
}
ch = state.src.charCodeAt(pos++);
if (ch < 48 || ch > 57) {
return -1;
}
for (; ; ) {
if (pos >= max) {
return -1;
}
ch = state.src.charCodeAt(pos++);
if (ch >= 48 && ch <= 57) {
if (pos - start >= 10) {
return -1;
}
continue;
}
if (ch === 41 || ch === 46) {
break;
}
return -1;
}
if (pos < max) {
ch = state.src.charCodeAt(pos);
if (!isSpace$7(ch)) {
return -1;
}
}
return pos;
}
function markTightParagraphs(state, idx) {
var i, l, level = state.level + 2;
for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {
if (state.tokens[i].level === level && state.tokens[i].type === "paragraph_open") {
state.tokens[i + 2].hidden = true;
state.tokens[i].hidden = true;
i += 2;
}
}
}
var list = function list2(state, startLine, endLine, silent) {
var ch, contentStart, i, indent, indentAfterMarker, initial, isOrdered, itemLines, l, listLines, listTokIdx, markerCharCode, markerValue, max, offset, oldListIndent, oldParentType, oldSCount, oldTShift, oldTight, pos, posAfterMarker, prevEmptyEnd, start, terminate, terminatorRules, token2, nextLine = startLine, isTerminatingParagraph = false, tight = true;
if (state.sCount[nextLine] - state.blkIndent >= 4) {
return false;
}
if (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) {
return false;
}
if (silent && state.parentType === "paragraph") {
if (state.sCount[nextLine] >= state.blkIndent) {
isTerminatingParagraph = true;
}
}
if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {
isOrdered = true;
start = state.bMarks[nextLine] + state.tShift[nextLine];
markerValue = Number(state.src.slice(start, posAfterMarker - 1));
if (isTerminatingParagraph && markerValue !== 1) return false;
} else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {
isOrdered = false;
} else {
return false;
}
if (isTerminatingParagraph) {
if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false;
}
if (silent) {
return true;
}
markerCharCode = state.src.charCodeAt(posAfterMarker - 1);
listTokIdx = state.tokens.length;
if (isOrdered) {
token2 = state.push("ordered_list_open", "ol", 1);
if (markerValue !== 1) {
token2.attrs = [["start", markerValue]];
}
} else {
token2 = state.push("bullet_list_open", "ul", 1);
}
token2.map = listLines = [nextLine, 0];
token2.markup = String.fromCharCode(markerCharCode);
prevEmptyEnd = false;
terminatorRules = state.md.block.ruler.getRules("list");
oldParentType = state.parentType;
state.parentType = "list";
while (nextLine < endLine) {
pos = posAfterMarker;
max = state.eMarks[nextLine];
initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]);
while (pos < max) {
ch = state.src.charCodeAt(pos);
if (ch === 9) {
offset += 4 - (offset + state.bsCount[nextLine]) % 4;
} else if (ch === 32) {
offset++;
} else {
break;
}
pos++;
}
contentStart = pos;
if (contentStart >= max) {
indentAfterMarker = 1;
} else {
indentAfterMarker = offset - initial;
}
if (indentAfterMarker > 4) {
indentAfterMarker = 1;
}
indent = initial + indentAfterMarker;
token2 = state.push("list_item_open", "li", 1);
token2.markup = String.fromCharCode(markerCharCode);
token2.map = itemLines = [nextLine, 0];
if (isOrdered) {
token2.info = state.src.slice(start, posAfterMarker - 1);
}
oldTight = state.tight;
oldTShift = state.tShift[nextLine];
oldSCount = state.sCount[nextLine];
oldListIndent = state.listIndent;
state.listIndent = state.blkIndent;
state.blkIndent = indent;
state.tight = true;
state.tShift[nextLine] = contentStart - state.bMarks[nextLine];
state.sCount[nextLine] = offset;
if (contentStart >= max && state.isEmpty(nextLine + 1)) {
state.line = Math.min(state.line + 2, endLine);
} else {
state.md.block.tokenize(state, nextLine, endLine, true);
}
if (!state.tight || prevEmptyEnd) {
tight = false;
}
prevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1);
state.blkIndent = state.listIndent;
state.listIndent = oldListIndent;
state.tShift[nextLine] = oldTShift;
state.sCount[nextLine] = oldSCount;
state.tight = oldTight;
token2 = state.push("list_item_close", "li", -1);
token2.markup = String.fromCharCode(markerCharCode);
nextLine = state.line;
itemLines[1] = nextLine;
if (nextLine >= endLine) {
break;
}
if (state.sCount[nextLine] < state.blkIndent) {
break;
}
if (state.sCount[nextLine] - state.blkIndent >= 4) {
break;
}
terminate = false;
for (i = 0, l = terminatorRules.length; i < l; i++) {
if (terminatorRules[i](state, nextLine, endLine, true)) {
terminate = true;
break;
}
}
if (terminate) {
break;
}
if (isOrdered) {
posAfterMarker = skipOrderedListMarker(state, nextLine);
if (posAfterMarker < 0) {
break;
}
start = state.bMarks[nextLine] + state.tShift[nextLine];
} else {
posAfterMarker = skipBulletListMarker(state, nextLine);
if (posAfterMarker < 0) {
break;
}
}
if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) {
break;
}
}
if (isOrdered) {
token2 = state.push("ordered_list_close", "ol", -1);
} else {
token2 = state.push("bullet_list_close", "ul", -1);
}
token2.markup = String.fromCharCode(markerCharCode);
listLines[1] = nextLine;
state.line = nextLine;
state.parentType = oldParentType;
if (tight) {
markTightParagraphs(state, listTokIdx);
}
return true;
};
var normalizeReference$2 = utils$1.normalizeReference;
var isSpace$6 = utils$1.isSpace;
var reference = function reference2(state, startLine, _endLine, silent) {
var ch, destEndPos, destEndLineNo, endLine, href, i, l, label, labelEnd, oldParentType, res, start, str, terminate, terminatorRules, title, lines = 0, pos = state.bMarks[startLine] + state.tShift[startLine], max = state.eMarks[startLine], nextLine = startLine + 1;
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
if (state.src.charCodeAt(pos) !== 91) {
return false;
}
while (++pos < max) {
if (state.src.charCodeAt(pos) === 93 && state.src.charCodeAt(pos - 1) !== 92) {
if (pos + 1 === max) {
return false;
}
if (state.src.charCodeAt(pos + 1) !== 58) {
return false;
}
break;
}
}
endLine = state.lineMax;
terminatorRules = state.md.block.ruler.getRules("reference");
oldParentType = state.parentType;
state.parentType = "reference";
for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
if (state.sCount[nextLine] - state.blkIndent > 3) {
continue;
}
if (state.sCount[nextLine] < 0) {
continue;
}
terminate = false;
for (i = 0, l = terminatorRules.length; i < l; i++) {
if (terminatorRules[i](state, nextLine, endLine, true)) {
terminate = true;
break;
}
}
if (terminate) {
break;
}
}
str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();
max = str.length;
for (pos = 1; pos < max; pos++) {
ch = str.charCodeAt(pos);
if (ch === 91) {
return false;
} else if (ch === 93) {
labelEnd = pos;
break;
} else if (ch === 10) {
lines++;
} else if (ch === 92) {
pos++;
if (pos < max && str.charCodeAt(pos) === 10) {
lines++;
}
}
}
if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 58) {
return false;
}
for (pos = labelEnd + 2; pos < max; pos++) {
ch = str.charCodeAt(pos);
if (ch === 10) {
lines++;
} else if (isSpace$6(ch)) ;
else {
break;
}
}
res = state.md.helpers.parseLinkDestination(str, pos, max);
if (!res.ok) {
return false;
}
href = state.md.normalizeLink(res.str);
if (!state.md.validateLink(href)) {
return false;
}
pos = res.pos;
lines += res.lines;
destEndPos = pos;
destEndLineNo = lines;
start = pos;
for (; pos < max; pos++) {
ch = str.charCodeAt(pos);
if (ch === 10) {
lines++;
} else if (isSpace$6(ch)) ;
else {
break;
}
}
res = state.md.helpers.parseLinkTitle(str, pos, max);
if (pos < max && start !== pos && res.ok) {
title = res.str;
pos = res.pos;
lines += res.lines;
} else {
title = "";
pos = destEndPos;
lines = destEndLineNo;
}
while (pos < max) {
ch = str.charCodeAt(pos);
if (!isSpace$6(ch)) {
break;
}
pos++;
}
if (pos < max && str.charCodeAt(pos) !== 10) {
if (title) {
title = "";
pos = destEndPos;
lines = destEndLineNo;
while (pos < max) {
ch = str.charCodeAt(pos);
if (!isSpace$6(ch)) {
break;
}
pos++;
}
}
}
if (pos < max && str.charCodeAt(pos) !== 10) {
return false;
}
label = normalizeReference$2(str.slice(1, labelEnd));
if (!label) {
return false;
}
if (silent) {
return true;
}
if (typeof state.env.references === "undefined") {
state.env.references = {};
}
if (typeof state.env.references[label] === "undefined") {
state.env.references[label] = { title, href };
}
state.parentType = oldParentType;
state.line = startLine + lines + 1;
return true;
};
var html_blocks = [
"address",
"article",
"aside",
"base",
"basefont",
"blockquote",
"body",
"caption",
"center",
"col",
"colgroup",
"dd",
"details",
"dialog",
"dir",
"div",
"dl",
"dt",
"fieldset",
"figcaption",
"figure",
"footer",
"form",
"frame",
"frameset",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"head",
"header",
"hr",
"html",
"iframe",
"legend",
"li",
"link",
"main",
"menu",
"menuitem",
"nav",
"noframes",
"ol",
"optgroup",
"option",
"p",
"param",
"section",
"source",
"summary",
"table",
"tbody",
"td",
"tfoot",
"th",
"thead",
"title",
"tr",
"track",
"ul"
];
var html_re = {};
var attr_name = "[a-zA-Z_:][a-zA-Z0-9:._-]*";
var unquoted = "[^\"'=<>`\\x00-\\x20]+";
var single_quoted = "'[^']*'";
var double_quoted = '"[^"]*"';
var attr_value = "(?:" + unquoted + "|" + single_quoted + "|" + double_quoted + ")";
var attribute = "(?:\\s+" + attr_name + "(?:\\s*=\\s*" + attr_value + ")?)";
var open_tag = "<[A-Za-z][A-Za-z0-9\\-]*" + attribute + "*\\s*\\/?>";
var close_tag = "<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>";
var comment = "<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->";
var processing = "<[?][\\s\\S]*?[?]>";
var declaration = "<![A-Z]+\\s+[^>]*>";
var cdata = "<!\\[CDATA\\[[\\s\\S]*?\\]\\]>";
var HTML_TAG_RE$1 = new RegExp("^(?:" + open_tag + "|" + close_tag + "|" + comment + "|" + processing + "|" + declaration + "|" + cdata + ")");
var HTML_OPEN_CLOSE_TAG_RE$1 = new RegExp("^(?:" + open_tag + "|" + close_tag + ")");
html_re.HTML_TAG_RE = HTML_TAG_RE$1;
html_re.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE$1;
var block_names = html_blocks;
var HTML_OPEN_CLOSE_TAG_RE = html_re.HTML_OPEN_CLOSE_TAG_RE;
var HTML_SEQUENCES = [
[/^<(script|pre|style|textarea)(?=(\s|>|$))/i, /<\/(script|pre|style|textarea)>/i, true],
[/^<!--/, /-->/, true],
[/^<\?/, /\?>/, true],
[/^<![A-Z]/, />/, true],
[/^<!\[CDATA\[/, /\]\]>/, true],
[new RegExp("^</?(" + block_names.join("|") + ")(?=(\\s|/?>|$))", "i"), /^$/, true],
[new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + "\\s*$"), /^$/, false]
];
var html_block = function html_block2(state, startLine, endLine, silent) {
var i, nextLine, token2, lineText, pos = state.bMarks[startLine] + state.tShift[startLine], max = state.eMarks[startLine];
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
if (!state.md.options.html) {
return false;
}
if (state.src.charCodeAt(pos) !== 60) {
return false;
}
lineText = state.src.slice(pos, max);
for (i = 0; i < HTML_SEQUENCES.length; i++) {
if (HTML_SEQUENCES[i][0].test(lineText)) {
break;
}
}
if (i === HTML_SEQUENCES.length) {
return false;
}
if (silent) {
return HTML_SEQUENCES[i][2];
}
nextLine = startLine + 1;
if (!HTML_SEQUENCES[i][1].test(lineText)) {
for (; nextLine < endLine; nextLine++) {
if (state.sCount[nextLine] < state.blkIndent) {
break;
}
pos = state.bMarks[nextLine] + state.tShift[nextLine];
max = state.eMarks[nextLine];
lineText = state.src.slice(pos, max);
if (HTML_SEQUENCES[i][1].test(lineText)) {
if (lineText.length !== 0) {
nextLine++;
}
break;
}
}
}
state.line = nextLine;
token2 = state.push("html_block", "", 0);
token2.map = [startLine, nextLine];
token2.content = state.getLines(startLine, nextLine, state.blkIndent, true);
return true;
};
var isSpace$5 = utils$1.isSpace;
var heading = function heading2(state, startLine, endLine, silent) {
var ch, level, tmp, token2, pos = state.bMarks[startLine] + state.tShift[startLine], max = state.eMarks[startLine];
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
ch = state.src.charCodeAt(pos);
if (ch !== 35 || pos >= max) {
return false;
}
level = 1;
ch = state.src.charCodeAt(++pos);
while (ch === 35 && pos < max && level <= 6) {
level++;
ch = state.src.charCodeAt(++pos);
}
if (level > 6 || pos < max && !isSpace$5(ch)) {
return false;
}
if (silent) {
return true;
}
max = state.skipSpacesBack(max, pos);
tmp = state.skipCharsBack(max, 35, pos);
if (tmp > pos && isSpace$5(state.src.charCodeAt(tmp - 1))) {
max = tmp;
}
state.line = startLine + 1;
token2 = state.push("heading_open", "h" + String(level), 1);
token2.markup = "########".slice(0, level);
token2.map = [startLine, state.line];
token2 = state.push("inline", "", 0);
token2.content = state.src.slice(pos, max).trim();
token2.map = [startLine, state.line];
token2.children = [];
token2 = state.push("heading_close", "h" + String(level), -1);
token2.markup = "########".slice(0, level);
return true;
};
var lheading = function lheading2(state, startLine, endLine) {
var content, terminate, i, l, token2, pos, max, level, marker2, nextLine = startLine + 1, oldParentType, terminatorRules = state.md.block.ruler.getRules("paragraph");
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
oldParentType = state.parentType;
state.parentType = "paragraph";
for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
if (state.sCount[nextLine] - state.blkIndent > 3) {
continue;
}
if (state.sCount[nextLine] >= state.blkIndent) {
pos = state.bMarks[nextLine] + state.tShift[nextLine];
max = state.eMarks[nextLine];
if (pos < max) {
marker2 = state.src.charCodeAt(pos);
if (marker2 === 45 || marker2 === 61) {
pos = state.skipChars(pos, marker2);
pos = state.skipSpaces(pos);
if (pos >= max) {
level = marker2 === 61 ? 1 : 2;
break;
}
}
}
}
if (state.sCount[nextLine] < 0) {
continue;
}
terminate = false;
for (i = 0, l = terminatorRules.length; i < l; i++) {
if (terminatorRules[i](state, nextLine, endLine, true)) {
terminate = true;
break;
}
}
if (terminate) {
break;
}
}
if (!level) {
return false;
}
content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();
state.line = nextLine + 1;
token2 = state.push("heading_open", "h" + String(level), 1);
token2.markup = String.fromCharCode(marker2);
token2.map = [startLine, state.line];
token2 = state.push("inline", "", 0);
token2.content = content;
token2.map = [startLine, state.line - 1];
token2.children = [];
token2 = state.push("heading_close", "h" + String(level), -1);
token2.markup = String.fromCharCode(marker2);
state.parentType = oldParentType;
return true;
};
var paragraph = function paragraph2(state, startLine, endLine) {
var content, terminate, i, l, token2, oldParentType, nextLine = startLine + 1, terminatorRules = state.md.block.ruler.getRules("paragraph");
oldParentType = state.parentType;
state.parentType = "paragraph";
for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
if (state.sCount[nextLine] - state.blkIndent > 3) {
continue;
}
if (state.sCount[nextLine] < 0) {
continue;
}
terminate = false;
for (i = 0, l = terminatorRules.length; i < l; i++) {
if (terminatorRules[i](state, nextLine, endLine, true)) {
terminate = true;
break;
}
}
if (terminate) {
break;
}
}
content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();
state.line = nextLine;
token2 = state.push("paragraph_open", "p", 1);
token2.map = [startLine, state.line];
token2 = state.push("inline", "", 0);
token2.content = content;
token2.map = [startLine, state.line];
token2.children = [];
token2 = state.push("paragraph_close", "p", -1);
state.parentType = oldParentType;
return true;
};
var Token$1 = token;
var isSpace$4 = utils$1.isSpace;
function StateBlock(src, md, env, tokens) {
var ch, s, start, pos, len, indent, offset, indent_found;
this.src = src;
this.md = md;
this.env = env;
this.tokens = tokens;
this.bMarks = [];
this.eMarks = [];
this.tShift = [];
this.sCount = [];
this.bsCount = [];
this.blkIndent = 0;
this.line = 0;
this.lineMax = 0;
this.tight = false;
this.ddIndent = -1;
this.listIndent = -1;
this.parentType = "root";
this.level = 0;
this.result = "";
s = this.src;
indent_found = false;
for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {
ch = s.charCodeAt(pos);
if (!indent_found) {
if (isSpace$4(ch)) {
indent++;
if (ch === 9) {
offset += 4 - offset % 4;
} else {
offset++;
}
continue;
} else {
indent_found = true;
}
}
if (ch === 10 || pos === len - 1) {
if (ch !== 10) {
pos++;
}
this.bMarks.push(start);
this.eMarks.push(pos);
this.tShift.push(indent);
this.sCount.push(offset);
this.bsCount.push(0);
indent_found = false;
indent = 0;
offset = 0;
start = pos + 1;
}
}
this.bMarks.push(s.length);
this.eMarks.push(s.length);
this.tShift.push(0);
this.sCount.push(0);
this.bsCount.push(0);
this.lineMax = this.bMarks.length - 1;
}
StateBlock.prototype.push = function(type, tag, nesting) {
var token2 = new Token$1(type, tag, nesting);
token2.block = true;
if (nesting < 0) this.level--;
token2.level = this.level;
if (nesting > 0) this.level++;
this.tokens.push(token2);
return token2;
};
StateBlock.prototype.isEmpty = function isEmpty(line) {
return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];
};
StateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {
for (var max = this.lineMax; from < max; from++) {
if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {
break;
}
}
return from;
};
StateBlock.prototype.skipSpaces = function skipSpaces(pos) {
var ch;
for (var max = this.src.length; pos < max; pos++) {
ch = this.src.charCodeAt(pos);
if (!isSpace$4(ch)) {
break;
}
}
return pos;
};
StateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {
if (pos <= min) {
return pos;
}
while (pos > min) {
if (!isSpace$4(this.src.charCodeAt(--pos))) {
return pos + 1;
}
}
return pos;
};
StateBlock.prototype.skipChars = function skipChars(pos, code3) {
for (var max = this.src.length; pos < max; pos++) {
if (this.src.charCodeAt(pos) !== code3) {
break;
}
}
return pos;
};
StateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code3, min) {
if (pos <= min) {
return pos;
}
while (pos > min) {
if (code3 !== this.src.charCodeAt(--pos)) {
return pos + 1;
}
}
return pos;
};
StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {
var i, lineIndent, ch, first, last, queue, lineStart, line = begin;
if (begin >= end) {
return "";
}
queue = new Array(end - begin);
for (i = 0; line < end; line++, i++) {
lineIndent = 0;
lineStart = first = this.bMarks[line];
if (line + 1 < end || keepLastLF) {
last = this.eMarks[line] + 1;
} else {
last = this.eMarks[line];
}
while (first < last && lineIndent < indent) {
ch = this.src.charCodeAt(first);
if (isSpace$4(ch)) {
if (ch === 9) {
lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;
} else {
lineIndent++;
}
} else if (first - lineStart < this.tShift[line]) {
lineIndent++;
} else {
break;
}
first++;
}
if (lineIndent > indent) {
queue[i] = new Array(lineIndent - indent + 1).join(" ") + this.src.slice(first, last);
} else {
queue[i] = this.src.slice(first, last);
}
}
return queue.join("");
};
StateBlock.prototype.Token = Token$1;
var state_block = StateBlock;
var Ruler$1 = ruler;
var _rules$1 = [
// First 2 params - rule name & source. Secondary array - list of rules,
// which can be terminated by this one.
["table", table, ["paragraph", "reference"]],
["code", code],
["fence", fence, ["paragraph", "reference", "blockquote", "list"]],
["blockquote", blockquote, ["paragraph", "reference", "blockquote", "list"]],
["hr", hr, ["paragraph", "reference", "blockquote", "list"]],
["list", list, ["paragraph", "reference", "blockquote"]],
["reference", reference],
["html_block", html_block, ["paragraph", "reference", "blockquote"]],
["heading", heading, ["paragraph", "reference", "blockquote"]],
["lheading", lheading],
["paragraph", paragraph]
];
function ParserBlock$1() {
this.ruler = new Ruler$1();
for (var i = 0; i < _rules$1.length; i++) {
this.ruler.push(_rules$1[i][0], _rules$1[i][1], { alt: (_rules$1[i][2] || []).slice() });
}
}
ParserBlock$1.prototype.tokenize = function(state, startLine, endLine) {
var ok, i, prevLine, rules = this.ruler.getRules(""), len = rules.length, line = startLine, hasEmptyLines = false, maxNesting = state.md.options.maxNesting;
while (line < endLine) {
state.line = line = state.skipEmptyLines(line);
if (line >= endLine) {
break;
}
if (state.sCount[line] < state.blkIndent) {
break;
}
if (state.level >= maxNesting) {
state.line = endLine;
break;
}
prevLine = state.line;
for (i = 0; i < len; i++) {
ok = rules[i](state, line, endLine, false);
if (ok) {
if (prevLine >= state.line) {
throw new Error("block rule didn't increment state.line");
}
break;
}
}
if (!ok) throw new Error("none of the block rules matched");
state.tight = !hasEmptyLines;
if (state.isEmpty(state.line - 1)) {
hasEmptyLines = true;
}
line = state.line;
if (line < endLine && state.isEmpty(line)) {
hasEmptyLines = true;
line++;
state.line = line;
}
}
};
ParserBlock$1.prototype.parse = function(src, md, env, outTokens) {
var state;
if (!src) {
return;
}
state = new this.State(src, md, env, outTokens);
this.tokenize(state, state.line, state.lineMax);
};
ParserBlock$1.prototype.State = state_block;
var parser_block = ParserBlock$1;
function isTerminatorChar(ch) {
switch (ch) {
case 10:
case 33:
case 35:
case 36:
case 37:
case 38:
case 42:
case 43:
case 45:
case 58:
case 60:
case 61:
case 62:
case 64:
case 91:
case 92:
case 93:
case 94:
case 95:
case 96:
case 123:
case 125:
case 126:
return true;
default:
return false;
}
}
var text = function text2(state, silent) {
var pos = state.pos;
while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {
pos++;
}
if (pos === state.pos) {
return false;
}
if (!silent) {
state.pending += state.src.slice(state.pos, pos);
}
state.pos = pos;
return true;
};
var SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;
var linkify2 = function linkify3(state, silent) {
var pos, max, match2, proto, link3, url, fullUrl, token2;
if (!state.md.options.linkify) return false;
if (state.linkLevel > 0) return false;
pos = state.pos;
max = state.posMax;
if (pos + 3 > max) return false;
if (state.src.charCodeAt(pos) !== 58) return false;
if (state.src.charCodeAt(pos + 1) !== 47) return false;
if (state.src.charCodeAt(pos + 2) !== 47) return false;
match2 = state.pending.match(SCHEME_RE);
if (!match2) return false;
proto = match2[1];
link3 = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length));
if (!link3) return false;
url = link3.url;
if (url.length <= proto.length) return false;
url = url.replace(/\*+$/, "");
fullUrl = state.md.normalizeLink(url);
if (!state.md.validateLink(fullUrl)) return false;
if (!silent) {
state.pending = state.pending.slice(0, -proto.length);
token2 = state.push("link_open", "a", 1);
token2.attrs = [["href", fullUrl]];
token2.markup = "linkify";
token2.info = "auto";
token2 = state.push("text", "", 0);
token2.content = state.md.normalizeLinkText(url);
token2 = state.push("link_close", "a", -1);
token2.markup = "linkify";
token2.info = "auto";
}
state.pos += url.length - proto.length;
return true;
};
var isSpace$3 = utils$1.isSpace;
var newline = function newline2(state, silent) {
var pmax, max, ws, pos = state.pos;
if (state.src.charCodeAt(pos) !== 10) {
return false;
}
pmax = state.pending.length - 1;
max = state.posMax;
if (!silent) {
if (pmax >= 0 && state.pending.charCodeAt(pmax) === 32) {
if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 32) {
ws = pmax - 1;
while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 32) ws--;
state.pending = state.pending.slice(0, ws);
state.push("hardbreak", "br", 0);
} else {
state.pending = state.pending.slice(0, -1);
state.push("softbreak", "br", 0);
}
} else {
state.push("softbreak", "br", 0);
}
}
pos++;
while (pos < max && isSpace$3(state.src.charCodeAt(pos))) {
pos++;
}
state.pos = pos;
return true;
};
var isSpace$2 = utils$1.isSpace;
var ESCAPED = [];
for (var i = 0; i < 256; i++) {
ESCAPED.push(0);
}
"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(ch) {
ESCAPED[ch.charCodeAt(0)] = 1;
});
var _escape = function escape(state, silent) {
var ch1, ch2, origStr, escapedStr, token2, pos = state.pos, max = state.posMax;
if (state.src.charCodeAt(pos) !== 92) return false;
pos++;
if (pos >= max) return false;
ch1 = state.src.charCodeAt(pos);
if (ch1 === 10) {
if (!silent) {
state.push("hardbreak", "br", 0);
}
pos++;
while (pos < max) {
ch1 = state.src.charCodeAt(pos);
if (!isSpace$2(ch1)) break;
pos++;
}
state.pos = pos;
return true;
}
escapedStr = state.src[pos];
if (ch1 >= 55296 && ch1 <= 56319 && pos + 1 < max) {
ch2 = state.src.charCodeAt(pos + 1);
if (ch2 >= 56320 && ch2 <= 57343) {
escapedStr += state.src[pos + 1];
pos++;
}
}
origStr = "\\" + escapedStr;
if (!silent) {
token2 = state.push("text_special", "", 0);
if (ch1 < 256 && ESCAPED[ch1] !== 0) {
token2.content = escapedStr;
} else {
token2.content = origStr;
}
token2.markup = origStr;
token2.info = "escape";
}
state.pos = pos + 1;
return true;
};
var backticks = function backtick(state, silent) {
var start, max, marker2, token2, matchStart, matchEnd, openerLength, closerLength, pos = state.pos, ch = state.src.charCodeAt(pos);
if (ch !== 96) {
return false;
}
start = pos;
pos++;
max = state.posMax;
while (pos < max && state.src.charCodeAt(pos) === 96) {
pos++;
}
marker2 = state.src.slice(start, pos);
openerLength = marker2.length;
if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {
if (!silent) state.pending += marker2;
state.pos += openerLength;
return true;
}
matchEnd = pos;
while ((matchStart = state.src.indexOf("`", matchEnd)) !== -1) {
matchEnd = matchStart + 1;
while (matchEnd < max && state.src.charCodeAt(matchEnd) === 96) {
matchEnd++;
}
closerLength = matchEnd - matchStart;
if (closerLength === openerLength) {
if (!silent) {
token2 = state.push("code_inline", "code", 0);
token2.markup = marker2;
token2.content = state.src.slice(pos, matchStart).replace(/\n/g, " ").replace(/^ (.+) $/, "$1");
}
state.pos = matchEnd;
return true;
}
state.backticks[closerLength] = matchStart;
}
state.backticksScanned = true;
if (!silent) state.pending += marker2;
state.pos += openerLength;
return true;
};
var strikethrough = {};
strikethrough.tokenize = function strikethrough2(state, silent) {
var i, scanned, token2, len, ch, start = state.pos, marker2 = state.src.charCodeAt(start);
if (silent) {
return false;
}
if (marker2 !== 126) {
return false;
}
scanned = state.scanDelims(state.pos, true);
len = scanned.length;
ch = String.fromCharCode(marker2);
if (len < 2) {
return false;
}
if (len % 2) {
token2 = state.push("text", "", 0);
token2.content = ch;
len--;
}
for (i = 0; i < len; i += 2) {
token2 = state.push("text", "", 0);
token2.content = ch + ch;
state.delimiters.push({
marker: marker2,
length: 0,
// disable "rule of 3" length checks meant for emphasis
token: state.tokens.length - 1,
end: -1,
open: scanned.can_open,
close: scanned.can_close
});
}
state.pos += scanned.length;
return true;
};
function postProcess$1(state, delimiters) {
var i, j, startDelim, endDelim, token2, loneMarkers = [], max = delimiters.length;
for (i = 0; i < max; i++) {
startDelim = delimiters[i];
if (startDelim.marker !== 126) {
continue;
}
if (startDelim.end === -1) {
continue;
}
endDelim = delimiters[startDelim.end];
token2 = state.tokens[startDelim.token];
token2.type = "s_open";
token2.tag = "s";
token2.nesting = 1;
token2.markup = "~~";
token2.content = "";
token2 = state.tokens[endDelim.token];
token2.type = "s_close";
token2.tag = "s";
token2.nesting = -1;
token2.markup = "~~";
token2.content = "";
if (state.tokens[endDelim.token - 1].type === "text" && state.tokens[endDelim.token - 1].content === "~") {
loneMarkers.push(endDelim.token - 1);
}
}
while (loneMarkers.length) {
i = loneMarkers.pop();
j = i + 1;
while (j < state.tokens.length && state.tokens[j].type === "s_close") {
j++;
}
j--;
if (i !== j) {
token2 = state.tokens[j];
state.tokens[j] = state.tokens[i];
state.tokens[i] = token2;
}
}
}
strikethrough.postProcess = function strikethrough3(state) {
var curr, tokens_meta = state.tokens_meta, max = state.tokens_meta.length;
postProcess$1(state, state.delimiters);
for (curr = 0; curr < max; curr++) {
if (tokens_meta[curr] && tokens_meta[curr].delimiters) {
postProcess$1(state, tokens_meta[curr].delimiters);
}
}
};
var emphasis = {};
emphasis.tokenize = function emphasis2(state, silent) {
var i, scanned, token2, start = state.pos, marker2 = state.src.charCodeAt(start);
if (silent) {
return false;
}
if (marker2 !== 95 && marker2 !== 42) {
return false;
}
scanned = state.scanDelims(state.pos, marker2 === 42);
for (i = 0; i < scanned.length; i++) {
token2 = state.push("text", "", 0);
token2.content = String.fromCharCode(marker2);
state.delimiters.push({
// Char code of the starting marker (number).
//
marker: marker2,
// Total length of these series of delimiters.
//
length: scanned.length,
// A position of the token this delimiter corresponds to.
//
token: state.tokens.length - 1,
// If this delimiter is matched as a valid opener, `end` will be
// equal to its position, otherwise it's `-1`.
//
end: -1,
// Boolean flags that determine if this delimiter could open or close
// an emphasis.
//
open: scanned.can_open,
close: scanned.can_close
});
}
state.pos += scanned.length;
return true;
};
function postProcess(state, delimiters) {
var i, startDelim, endDelim, token2, ch, isStrong, max = delimiters.length;
for (i = max - 1; i >= 0; i--) {
startDelim = delimiters[i];
if (startDelim.marker !== 95 && startDelim.marker !== 42) {
continue;
}
if (startDelim.end === -1) {
continue;
}
endDelim = delimiters[startDelim.end];
isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && // check that first two markers match and adjacent
delimiters[i - 1].marker === startDelim.marker && delimiters[i - 1].token === startDelim.token - 1 && // check that last two markers are adjacent (we can safely assume they match)
delimiters[startDelim.end + 1].token === endDelim.token + 1;
ch = String.fromCharCode(startDelim.marker);
token2 = state.tokens[startDelim.token];
token2.type = isStrong ? "strong_open" : "em_open";
token2.tag = isStrong ? "strong" : "em";
token2.nesting = 1;
token2.markup = isStrong ? ch + ch : ch;
token2.content = "";
token2 = state.tokens[endDelim.token];
token2.type = isStrong ? "strong_close" : "em_close";
token2.tag = isStrong ? "strong" : "em";
token2.nesting = -1;
token2.markup = isStrong ? ch + ch : ch;
token2.content = "";
if (isStrong) {
state.tokens[delimiters[i - 1].token].content = "";
state.tokens[delimiters[startDelim.end + 1].token].content = "";
i--;
}
}
}
emphasis.postProcess = function emphasis3(state) {
var curr, tokens_meta = state.tokens_meta, max = state.tokens_meta.length;
postProcess(state, state.delimiters);
for (curr = 0; curr < max; curr++) {
if (tokens_meta[curr] && tokens_meta[curr].delimiters) {
postProcess(state, tokens_meta[curr].delimiters);
}
}
};
var normalizeReference$1 = utils$1.normalizeReference;
var isSpace$1 = utils$1.isSpace;
var link = function link2(state, silent) {
var attrs, code3, label, labelEnd, labelStart, pos, res, ref2, token2, href = "", title = "", oldPos = state.pos, max = state.posMax, start = state.pos, parseReference = true;
if (state.src.charCodeAt(state.pos) !== 91) {
return false;
}
labelStart = state.pos + 1;
labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);
if (labelEnd < 0) {
return false;
}
pos = labelEnd + 1;
if (pos < max && state.src.charCodeAt(pos) === 40) {
parseReference = false;
pos++;
for (; pos < max; pos++) {
code3 = state.src.charCodeAt(pos);
if (!isSpace$1(code3) && code3 !== 10) {
break;
}
}
if (pos >= max) {
return false;
}
start = pos;
res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);
if (res.ok) {
href = state.md.normalizeLink(res.str);
if (state.md.validateLink(href)) {
pos = res.pos;
} else {
href = "";
}
start = pos;
for (; pos < max; pos++) {
code3 = state.src.charCodeAt(pos);
if (!isSpace$1(code3) && code3 !== 10) {
break;
}
}
res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);
if (pos < max && start !== pos && res.ok) {
title = res.str;
pos = res.pos;
for (; pos < max; pos++) {
code3 = state.src.charCodeAt(pos);
if (!isSpace$1(code3) && code3 !== 10) {
break;
}
}
}
}
if (pos >= max || state.src.charCodeAt(pos) !== 41) {
parseReference = true;
}
pos++;
}
if (parseReference) {
if (typeof state.env.references === "undefined") {
return false;
}
if (pos < max && state.src.charCodeAt(pos) === 91) {
start = pos + 1;
pos = state.md.helpers.parseLinkLabel(state, pos);
if (pos >= 0) {
label = state.src.slice(start, pos++);
} else {
pos = labelEnd + 1;
}
} else {
pos = labelEnd + 1;
}
if (!label) {
label = state.src.slice(labelStart, labelEnd);
}
ref2 = state.env.references[normalizeReference$1(label)];
if (!ref2) {
state.pos = oldPos;
return false;
}
href = ref2.href;
title = ref2.title;
}
if (!silent) {
state.pos = labelStart;
state.posMax = labelEnd;
token2 = state.push("link_open", "a", 1);
token2.attrs = attrs = [["href", href]];
if (title) {
attrs.push(["title", title]);
}
state.linkLevel++;
state.md.inline.tokenize(state);
state.linkLevel--;
token2 = state.push("link_close", "a", -1);
}
state.pos = pos;
state.posMax = max;
return true;
};
var normalizeReference = utils$1.normalizeReference;
var isSpace = utils$1.isSpace;
var image = function image2(state, silent) {
var attrs, code3, content, label, labelEnd, labelStart, pos, ref2, res, title, token2, tokens, start, href = "", oldPos = state.pos, max = state.posMax;
if (state.src.charCodeAt(state.pos) !== 33) {
return false;
}
if (state.src.charCodeAt(state.pos + 1) !== 91) {
return false;
}
labelStart = state.pos + 2;
labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);
if (labelEnd < 0) {
return false;
}
pos = labelEnd + 1;
if (pos < max && state.src.charCodeAt(pos) === 40) {
pos++;
for (; pos < max; pos++) {
code3 = state.src.charCodeAt(pos);
if (!isSpace(code3) && code3 !== 10) {
break;
}
}
if (pos >= max) {
return false;
}
start = pos;
res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);
if (res.ok) {
href = state.md.normalizeLink(res.str);
if (state.md.validateLink(href)) {
pos = res.pos;
} else {
href = "";
}
}
start = pos;
for (; pos < max; pos++) {
code3 = state.src.charCodeAt(pos);
if (!isSpace(code3) && code3 !== 10) {
break;
}
}
res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);
if (pos < max && start !== pos && res.ok) {
title = res.str;
pos = res.pos;
for (; pos < max; pos++) {
code3 = state.src.charCodeAt(pos);
if (!isSpace(code3) && code3 !== 10) {
break;
}
}
} else {
title = "";
}
if (pos >= max || state.src.charCodeAt(pos) !== 41) {
state.pos = oldPos;
return false;
}
pos++;
} else {
if (typeof state.env.references === "undefined") {
return false;
}
if (pos < max && state.src.charCodeAt(pos) === 91) {
start = pos + 1;
pos = state.md.helpers.parseLinkLabel(state, pos);
if (pos >= 0) {
label = state.src.slice(start, pos++);
} else {
pos = labelEnd + 1;
}
} else {
pos = labelEnd + 1;
}
if (!label) {
label = state.src.slice(labelStart, labelEnd);
}
ref2 = state.env.references[normalizeReference(label)];
if (!ref2) {
state.pos = oldPos;
return false;
}
href = ref2.href;
title = ref2.title;
}
if (!silent) {
content = state.src.slice(labelStart, labelEnd);
state.md.inline.parse(
content,
state.md,
state.env,
tokens = []
);
token2 = state.push("image", "img", 0);
token2.attrs = attrs = [["src", href], ["alt", ""]];
token2.children = tokens;
token2.content = content;
if (title) {
attrs.push(["title", title]);
}
}
state.pos = pos;
state.posMax = max;
return true;
};
var EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;
var AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$/;
var autolink = function autolink2(state, silent) {
var url, fullUrl, token2, ch, start, max, pos = state.pos;
if (state.src.charCodeAt(pos) !== 60) {
return false;
}
start = state.pos;
max = state.posMax;
for (; ; ) {
if (++pos >= max) return false;
ch = state.src.charCodeAt(pos);
if (ch === 60) return false;
if (ch === 62) break;
}
url = state.src.slice(start + 1, pos);
if (AUTOLINK_RE.test(url)) {
fullUrl = state.md.normalizeLink(url);
if (!state.md.validateLink(fullUrl)) {
return false;
}
if (!silent) {
token2 = state.push("link_open", "a", 1);
token2.attrs = [["href", fullUrl]];
token2.markup = "autolink";
token2.info = "auto";
token2 = state.push("text", "", 0);
token2.content = state.md.normalizeLinkText(url);
token2 = state.push("link_close", "a", -1);
token2.markup = "autolink";
token2.info = "auto";
}
state.pos += url.length + 2;
return true;
}
if (EMAIL_RE.test(url)) {
fullUrl = state.md.normalizeLink("mailto:" + url);
if (!state.md.validateLink(fullUrl)) {
return false;
}
if (!silent) {
token2 = state.push("link_open", "a", 1);
token2.attrs = [["href", fullUrl]];
token2.markup = "autolink";
token2.info = "auto";
token2 = state.push("text", "", 0);
token2.content = state.md.normalizeLinkText(url);
token2 = state.push("link_close", "a", -1);
token2.markup = "autolink";
token2.info = "auto";
}
state.pos += url.length + 2;
return true;
}
return false;
};
var HTML_TAG_RE = html_re.HTML_TAG_RE;
function isLinkOpen(str) {
return /^<a[>\s]/i.test(str);
}
function isLinkClose(str) {
return /^<\/a\s*>/i.test(str);
}
function isLetter(ch) {
var lc = ch | 32;
return lc >= 97 && lc <= 122;
}
var html_inline = function html_inline2(state, silent) {
var ch, match2, max, token2, pos = state.pos;
if (!state.md.options.html) {
return false;
}
max = state.posMax;
if (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) {
return false;
}
ch = state.src.charCodeAt(pos + 1);
if (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) {
return false;
}
match2 = state.src.slice(pos).match(HTML_TAG_RE);
if (!match2) {
return false;
}
if (!silent) {
token2 = state.push("html_inline", "", 0);
token2.content = match2[0];
if (isLinkOpen(token2.content)) state.linkLevel++;
if (isLinkClose(token2.content)) state.linkLevel--;
}
state.pos += match2[0].length;
return true;
};
var entities = entities$1;
var has = utils$1.has;
var isValidEntityCode = utils$1.isValidEntityCode;
var fromCodePoint = utils$1.fromCodePoint;
var DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;
var NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;
var entity = function entity2(state, silent) {
var ch, code3, match2, token2, pos = state.pos, max = state.posMax;
if (state.src.charCodeAt(pos) !== 38) return false;
if (pos + 1 >= max) return false;
ch = state.src.charCodeAt(pos + 1);
if (ch === 35) {
match2 = state.src.slice(pos).match(DIGITAL_RE);
if (match2) {
if (!silent) {
code3 = match2[1][0].toLowerCase() === "x" ? parseInt(match2[1].slice(1), 16) : parseInt(match2[1], 10);
token2 = state.push("text_special", "", 0);
token2.content = isValidEntityCode(code3) ? fromCodePoint(code3) : fromCodePoint(65533);
token2.markup = match2[0];
token2.info = "entity";
}
state.pos += match2[0].length;
return true;
}
} else {
match2 = state.src.slice(pos).match(NAMED_RE);
if (match2) {
if (has(entities, match2[1])) {
if (!silent) {
token2 = state.push("text_special", "", 0);
token2.content = entities[match2[1]];
token2.markup = match2[0];
token2.info = "entity";
}
state.pos += match2[0].length;
return true;
}
}
}
return false;
};
function processDelimiters(delimiters) {
var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx, isOddMatch, lastJump, openersBottom = {}, max = delimiters.length;
if (!max) return;
var headerIdx = 0;
var lastTokenIdx = -2;
var jumps = [];
for (closerIdx = 0; closerIdx < max; closerIdx++) {
closer = delimiters[closerIdx];
jumps.push(0);
if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {
headerIdx = closerIdx;
}
lastTokenIdx = closer.token;
closer.length = closer.length || 0;
if (!closer.close) continue;
if (!openersBottom.hasOwnProperty(closer.marker)) {
openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1];
}
minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3];
openerIdx = headerIdx - jumps[headerIdx] - 1;
newMinOpenerIdx = openerIdx;
for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {
opener = delimiters[openerIdx];
if (opener.marker !== closer.marker) continue;
if (opener.open && opener.end < 0) {
isOddMatch = false;
if (opener.close || closer.open) {
if ((opener.length + closer.length) % 3 === 0) {
if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {
isOddMatch = true;
}
}
}
if (!isOddMatch) {
lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0;
jumps[closerIdx] = closerIdx - openerIdx + lastJump;
jumps[openerIdx] = lastJump;
closer.open = false;
opener.end = closerIdx;
opener.close = false;
newMinOpenerIdx = -1;
lastTokenIdx = -2;
break;
}
}
}
if (newMinOpenerIdx !== -1) {
openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx;
}
}
}
var balance_pairs = function link_pairs(state) {
var curr, tokens_meta = state.tokens_meta, max = state.tokens_meta.length;
processDelimiters(state.delimiters);
for (curr = 0; curr < max; curr++) {
if (tokens_meta[curr] && tokens_meta[curr].delimiters) {
processDelimiters(tokens_meta[curr].delimiters);
}
}
};
var fragments_join = function fragments_join2(state) {
var curr, last, level = 0, tokens = state.tokens, max = state.tokens.length;
for (curr = last = 0; curr < max; curr++) {
if (tokens[curr].nesting < 0) level--;
tokens[curr].level = level;
if (tokens[curr].nesting > 0) level++;
if (tokens[curr].type === "text" && curr + 1 < max && tokens[curr + 1].type === "text") {
tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;
} else {
if (curr !== last) {
tokens[last] = tokens[curr];
}
last++;
}
}
if (curr !== last) {
tokens.length = last;
}
};
var Token = token;
var isWhiteSpace = utils$1.isWhiteSpace;
var isPunctChar = utils$1.isPunctChar;
var isMdAsciiPunct = utils$1.isMdAsciiPunct;
function StateInline(src, md, env, outTokens) {
this.src = src;
this.env = env;
this.md = md;
this.tokens = outTokens;
this.tokens_meta = Array(outTokens.length);
this.pos = 0;
this.posMax = this.src.length;
this.level = 0;
this.pending = "";
this.pendingLevel = 0;
this.cache = {};
this.delimiters = [];
this._prev_delimiters = [];
this.backticks = {};
this.backticksScanned = false;
this.linkLevel = 0;
}
StateInline.prototype.pushPending = function() {
var token2 = new Token("text", "", 0);
token2.content = this.pending;
token2.level = this.pendingLevel;
this.tokens.push(token2);
this.pending = "";
return token2;
};
StateInline.prototype.push = function(type, tag, nesting) {
if (this.pending) {
this.pushPending();
}
var token2 = new Token(type, tag, nesting);
var token_meta = null;
if (nesting < 0) {
this.level--;
this.delimiters = this._prev_delimiters.pop();
}
token2.level = this.level;
if (nesting > 0) {
this.level++;
this._prev_delimiters.push(this.delimiters);
this.delimiters = [];
token_meta = { delimiters: this.delimiters };
}
this.pendingLevel = this.level;
this.tokens.push(token2);
this.tokens_meta.push(token_meta);
return token2;
};
StateInline.prototype.scanDelims = function(start, canSplitWord) {
var pos = start, lastChar, nextChar, count, can_open, can_close, isLastWhiteSpace, isLastPunctChar, isNextWhiteSpace, isNextPunctChar, left_flanking = true, right_flanking = true, max = this.posMax, marker2 = this.src.charCodeAt(start);
lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 32;
while (pos < max && this.src.charCodeAt(pos) === marker2) {
pos++;
}
count = pos - start;
nextChar = pos < max ? this.src.charCodeAt(pos) : 32;
isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));
isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));
isLastWhiteSpace = isWhiteSpace(lastChar);
isNextWhiteSpace = isWhiteSpace(nextChar);
if (isNextWhiteSpace) {
left_flanking = false;
} else if (isNextPunctChar) {
if (!(isLastWhiteSpace || isLastPunctChar)) {
left_flanking = false;
}
}
if (isLastWhiteSpace) {
right_flanking = false;
} else if (isLastPunctChar) {
if (!(isNextWhiteSpace || isNextPunctChar)) {
right_flanking = false;
}
}
if (!canSplitWord) {
can_open = left_flanking && (!right_flanking || isLastPunctChar);
can_close = right_flanking && (!left_flanking || isNextPunctChar);
} else {
can_open = left_flanking;
can_close = right_flanking;
}
return {
can_open,
can_close,
length: count
};
};
StateInline.prototype.Token = Token;
var state_inline = StateInline;
var Ruler = ruler;
var _rules = [
["text", text],
["linkify", linkify2],
["newline", newline],
["escape", _escape],
["backticks", backticks],
["strikethrough", strikethrough.tokenize],
["emphasis", emphasis.tokenize],
["link", link],
["image", image],
["autolink", autolink],
["html_inline", html_inline],
["entity", entity]
];
var _rules2 = [
["balance_pairs", balance_pairs],
["strikethrough", strikethrough.postProcess],
["emphasis", emphasis.postProcess],
// rules for pairs separate '**' into its own text tokens, which may be left unused,
// rule below merges unused segments back with the rest of the text
["fragments_join", fragments_join]
];
function ParserInline$1() {
var i;
this.ruler = new Ruler();
for (i = 0; i < _rules.length; i++) {
this.ruler.push(_rules[i][0], _rules[i][1]);
}
this.ruler2 = new Ruler();
for (i = 0; i < _rules2.length; i++) {
this.ruler2.push(_rules2[i][0], _rules2[i][1]);
}
}
ParserInline$1.prototype.skipToken = function(state) {
var ok, i, pos = state.pos, rules = this.ruler.getRules(""), len = rules.length, maxNesting = state.md.options.maxNesting, cache = state.cache;
if (typeof cache[pos] !== "undefined") {
state.pos = cache[pos];
return;
}
if (state.level < maxNesting) {
for (i = 0; i < len; i++) {
state.level++;
ok = rules[i](state, true);
state.level--;
if (ok) {
if (pos >= state.pos) {
throw new Error("inline rule didn't increment state.pos");
}
break;
}
}
} else {
state.pos = state.posMax;
}
if (!ok) {
state.pos++;
}
cache[pos] = state.pos;
};
ParserInline$1.prototype.tokenize = function(state) {
var ok, i, prevPos, rules = this.ruler.getRules(""), len = rules.length, end = state.posMax, maxNesting = state.md.options.maxNesting;
while (state.pos < end) {
prevPos = state.pos;
if (state.level < maxNesting) {
for (i = 0; i < len; i++) {
ok = rules[i](state, false);
if (ok) {
if (prevPos >= state.pos) {
throw new Error("inline rule didn't increment state.pos");
}
break;
}
}
}
if (ok) {
if (state.pos >= end) {
break;
}
continue;
}
state.pending += state.src[state.pos++];
}
if (state.pending) {
state.pushPending();
}
};
ParserInline$1.prototype.parse = function(str, md, env, outTokens) {
var i, rules, len;
var state = new this.State(str, md, env, outTokens);
this.tokenize(state);
rules = this.ruler2.getRules("");
len = rules.length;
for (i = 0; i < len; i++) {
rules[i](state);
}
};
ParserInline$1.prototype.State = state_inline;
var parser_inline = ParserInline$1;
var re;
var hasRequiredRe;
function requireRe() {
if (hasRequiredRe) return re;
hasRequiredRe = 1;
re = function(opts) {
var re2 = {};
opts = opts || {};
re2.src_Any = requireRegex$3().source;
re2.src_Cc = requireRegex$2().source;
re2.src_Z = requireRegex().source;
re2.src_P = regex$4.source;
re2.src_ZPCc = [re2.src_Z, re2.src_P, re2.src_Cc].join("|");
re2.src_ZCc = [re2.src_Z, re2.src_Cc].join("|");
var text_separators = "[><|]";
re2.src_pseudo_letter = "(?:(?!" + text_separators + "|" + re2.src_ZPCc + ")" + re2.src_Any + ")";
re2.src_ip4 = "(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
re2.src_auth = "(?:(?:(?!" + re2.src_ZCc + "|[@/\\[\\]()]).)+@)?";
re2.src_port = "(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?";
re2.src_host_terminator = "(?=$|" + text_separators + "|" + re2.src_ZPCc + ")(?!" + (opts["---"] ? "-(?!--)|" : "-|") + "_|:\\d|\\.-|\\.(?!$|" + re2.src_ZPCc + "))";
re2.src_path = "(?:[/?#](?:(?!" + re2.src_ZCc + "|" + text_separators + `|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!` + re2.src_ZCc + "|\\]).)*\\]|\\((?:(?!" + re2.src_ZCc + "|[)]).)*\\)|\\{(?:(?!" + re2.src_ZCc + '|[}]).)*\\}|\\"(?:(?!' + re2.src_ZCc + `|["]).)+\\"|\\'(?:(?!` + re2.src_ZCc + "|[']).)+\\'|\\'(?=" + re2.src_pseudo_letter + "|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!" + re2.src_ZCc + "|[.]|$)|" + (opts["---"] ? "\\-(?!--(?:[^-]|$))(?:-*)|" : "\\-+|") + ",(?!" + re2.src_ZCc + "|$)|;(?!" + re2.src_ZCc + "|$)|\\!+(?!" + re2.src_ZCc + "|[!]|$)|\\?(?!" + re2.src_ZCc + "|[?]|$))+|\\/)?";
re2.src_email_name = '[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*';
re2.src_xn = "xn--[a-z0-9\\-]{1,59}";
re2.src_domain_root = // Allow letters & digits (http://test1)
"(?:" + re2.src_xn + "|" + re2.src_pseudo_letter + "{1,63})";
re2.src_domain = "(?:" + re2.src_xn + "|(?:" + re2.src_pseudo_letter + ")|(?:" + re2.src_pseudo_letter + "(?:-|" + re2.src_pseudo_letter + "){0,61}" + re2.src_pseudo_letter + "))";
re2.src_host = "(?:(?:(?:(?:" + re2.src_domain + ")\\.)*" + re2.src_domain + "))";
re2.tpl_host_fuzzy = "(?:" + re2.src_ip4 + "|(?:(?:(?:" + re2.src_domain + ")\\.)+(?:%TLDS%)))";
re2.tpl_host_no_ip_fuzzy = "(?:(?:(?:" + re2.src_domain + ")\\.)+(?:%TLDS%))";
re2.src_host_strict = re2.src_host + re2.src_host_terminator;
re2.tpl_host_fuzzy_strict = re2.tpl_host_fuzzy + re2.src_host_terminator;
re2.src_host_port_strict = re2.src_host + re2.src_port + re2.src_host_terminator;
re2.tpl_host_port_fuzzy_strict = re2.tpl_host_fuzzy + re2.src_port + re2.src_host_terminator;
re2.tpl_host_port_no_ip_fuzzy_strict = re2.tpl_host_no_ip_fuzzy + re2.src_port + re2.src_host_terminator;
re2.tpl_host_fuzzy_test = "localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:" + re2.src_ZPCc + "|>|$))";
re2.tpl_email_fuzzy = "(^|" + text_separators + '|"|\\(|' + re2.src_ZCc + ")(" + re2.src_email_name + "@" + re2.tpl_host_fuzzy_strict + ")";
re2.tpl_link_fuzzy = // Fuzzy link can't be prepended with .:/\- and non punctuation.
// but can start with > (markdown blockquote)
"(^|(?![.:/\\-_@])(?:[$+<=>^`||]|" + re2.src_ZPCc + "))((?![$+<=>^`||])" + re2.tpl_host_port_fuzzy_strict + re2.src_path + ")";
re2.tpl_link_no_ip_fuzzy = // Fuzzy link can't be prepended with .:/\- and non punctuation.
// but can start with > (markdown blockquote)
"(^|(?![.:/\\-_@])(?:[$+<=>^`||]|" + re2.src_ZPCc + "))((?![$+<=>^`||])" + re2.tpl_host_port_no_ip_fuzzy_strict + re2.src_path + ")";
return re2;
};
return re;
}
function assign(obj) {
var sources = Array.prototype.slice.call(arguments, 1);
sources.forEach(function(source) {
if (!source) {
return;
}
Object.keys(source).forEach(function(key) {
obj[key] = source[key];
});
});
return obj;
}
function _class(obj) {
return Object.prototype.toString.call(obj);
}
function isString(obj) {
return _class(obj) === "[object String]";
}
function isObject(obj) {
return _class(obj) === "[object Object]";
}
function isRegExp(obj) {
return _class(obj) === "[object RegExp]";
}
function isFunction(obj) {
return _class(obj) === "[object Function]";
}
function escapeRE(str) {
return str.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
}
var defaultOptions = {
fuzzyLink: true,
fuzzyEmail: true,
fuzzyIP: false
};
function isOptionsObj(obj) {
return Object.keys(obj || {}).reduce(function(acc, k) {
return acc || defaultOptions.hasOwnProperty(k);
}, false);
}
var defaultSchemas = {
"http:": {
validate: function(text3, pos, self) {
var tail = text3.slice(pos);
if (!self.re.http) {
self.re.http = new RegExp(
"^\\/\\/" + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path,
"i"
);
}
if (self.re.http.test(tail)) {
return tail.match(self.re.http)[0].length;
}
return 0;
}
},
"https:": "http:",
"ftp:": "http:",
"//": {
validate: function(text3, pos, self) {
var tail = text3.slice(pos);
if (!self.re.no_http) {
self.re.no_http = new RegExp(
"^" + self.re.src_auth + // Don't allow single-level domains, because of false positives like '//test'
// with code comments
"(?:localhost|(?:(?:" + self.re.src_domain + ")\\.)+" + self.re.src_domain_root + ")" + self.re.src_port + self.re.src_host_terminator + self.re.src_path,
"i"
);
}
if (self.re.no_http.test(tail)) {
if (pos >= 3 && text3[pos - 3] === ":") {
return 0;
}
if (pos >= 3 && text3[pos - 3] === "/") {
return 0;
}
return tail.match(self.re.no_http)[0].length;
}
return 0;
}
},
"mailto:": {
validate: function(text3, pos, self) {
var tail = text3.slice(pos);
if (!self.re.mailto) {
self.re.mailto = new RegExp(
"^" + self.re.src_email_name + "@" + self.re.src_host_strict,
"i"
);
}
if (self.re.mailto.test(tail)) {
return tail.match(self.re.mailto)[0].length;
}
return 0;
}
}
};
var tlds_2ch_src_re = "a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]";
var tlds_default = "biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|");
function resetScanCache(self) {
self.__index__ = -1;
self.__text_cache__ = "";
}
function createValidator(re2) {
return function(text3, pos) {
var tail = text3.slice(pos);
if (re2.test(tail)) {
return tail.match(re2)[0].length;
}
return 0;
};
}
function createNormalizer() {
return function(match2, self) {
self.normalize(match2);
};
}
function compile(self) {
var re2 = self.re = requireRe()(self.__opts__);
var tlds2 = self.__tlds__.slice();
self.onCompile();
if (!self.__tlds_replaced__) {
tlds2.push(tlds_2ch_src_re);
}
tlds2.push(re2.src_xn);
re2.src_tlds = tlds2.join("|");
function untpl(tpl) {
return tpl.replace("%TLDS%", re2.src_tlds);
}
re2.email_fuzzy = RegExp(untpl(re2.tpl_email_fuzzy), "i");
re2.link_fuzzy = RegExp(untpl(re2.tpl_link_fuzzy), "i");
re2.link_no_ip_fuzzy = RegExp(untpl(re2.tpl_link_no_ip_fuzzy), "i");
re2.host_fuzzy_test = RegExp(untpl(re2.tpl_host_fuzzy_test), "i");
var aliases = [];
self.__compiled__ = {};
function schemaError(name, val) {
throw new Error('(LinkifyIt) Invalid schema "' + name + '": ' + val);
}
Object.keys(self.__schemas__).forEach(function(name) {
var val = self.__schemas__[name];
if (val === null) {
return;
}
var compiled = { validate: null, link: null };
self.__compiled__[name] = compiled;
if (isObject(val)) {
if (isRegExp(val.validate)) {
compiled.validate = createValidator(val.validate);
} else if (isFunction(val.validate)) {
compiled.validate = val.validate;
} else {
schemaError(name, val);
}
if (isFunction(val.normalize)) {
compiled.normalize = val.normalize;
} else if (!val.normalize) {
compiled.normalize = createNormalizer();
} else {
schemaError(name, val);
}
return;
}
if (isString(val)) {
aliases.push(name);
return;
}
schemaError(name, val);
});
aliases.forEach(function(alias) {
if (!self.__compiled__[self.__schemas__[alias]]) {
return;
}
self.__compiled__[alias].validate = self.__compiled__[self.__schemas__[alias]].validate;
self.__compiled__[alias].normalize = self.__compiled__[self.__schemas__[alias]].normalize;
});
self.__compiled__[""] = { validate: null, normalize: createNormalizer() };
var slist = Object.keys(self.__compiled__).filter(function(name) {
return name.length > 0 && self.__compiled__[name];
}).map(escapeRE).join("|");
self.re.schema_test = RegExp("(^|(?!_)(?:[><|]|" + re2.src_ZPCc + "))(" + slist + ")", "i");
self.re.schema_search = RegExp("(^|(?!_)(?:[><|]|" + re2.src_ZPCc + "))(" + slist + ")", "ig");
self.re.schema_at_start = RegExp("^" + self.re.schema_search.source, "i");
self.re.pretest = RegExp(
"(" + self.re.schema_test.source + ")|(" + self.re.host_fuzzy_test.source + ")|@",
"i"
);
resetScanCache(self);
}
function Match(self, shift) {
var start = self.__index__, end = self.__last_index__, text3 = self.__text_cache__.slice(start, end);
this.schema = self.__schema__.toLowerCase();
this.index = start + shift;
this.lastIndex = end + shift;
this.raw = text3;
this.text = text3;
this.url = text3;
}
function createMatch(self, shift) {
var match2 = new Match(self, shift);
self.__compiled__[match2.schema].normalize(match2, self);
return match2;
}
function LinkifyIt$1(schemas, options) {
if (!(this instanceof LinkifyIt$1)) {
return new LinkifyIt$1(schemas, options);
}
if (!options) {
if (isOptionsObj(schemas)) {
options = schemas;
schemas = {};
}
}
this.__opts__ = assign({}, defaultOptions, options);
this.__index__ = -1;
this.__last_index__ = -1;
this.__schema__ = "";
this.__text_cache__ = "";
this.__schemas__ = assign({}, defaultSchemas, schemas);
this.__compiled__ = {};
this.__tlds__ = tlds_default;
this.__tlds_replaced__ = false;
this.re = {};
compile(this);
}
LinkifyIt$1.prototype.add = function add(schema, definition) {
this.__schemas__[schema] = definition;
compile(this);
return this;
};
LinkifyIt$1.prototype.set = function set(options) {
this.__opts__ = assign(this.__opts__, options);
return this;
};
LinkifyIt$1.prototype.test = function test(text3) {
this.__text_cache__ = text3;
this.__index__ = -1;
if (!text3.length) {
return false;
}
var m, ml, me, len, shift, next, re2, tld_pos, at_pos;
if (this.re.schema_test.test(text3)) {
re2 = this.re.schema_search;
re2.lastIndex = 0;
while ((m = re2.exec(text3)) !== null) {
len = this.testSchemaAt(text3, m[2], re2.lastIndex);
if (len) {
this.__schema__ = m[2];
this.__index__ = m.index + m[1].length;
this.__last_index__ = m.index + m[0].length + len;
break;
}
}
}
if (this.__opts__.fuzzyLink && this.__compiled__["http:"]) {
tld_pos = text3.search(this.re.host_fuzzy_test);
if (tld_pos >= 0) {
if (this.__index__ < 0 || tld_pos < this.__index__) {
if ((ml = text3.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {
shift = ml.index + ml[1].length;
if (this.__index__ < 0 || shift < this.__index__) {
this.__schema__ = "";
this.__index__ = shift;
this.__last_index__ = ml.index + ml[0].length;
}
}
}
}
}
if (this.__opts__.fuzzyEmail && this.__compiled__["mailto:"]) {
at_pos = text3.indexOf("@");
if (at_pos >= 0) {
if ((me = text3.match(this.re.email_fuzzy)) !== null) {
shift = me.index + me[1].length;
next = me.index + me[0].length;
if (this.__index__ < 0 || shift < this.__index__ || shift === this.__index__ && next > this.__last_index__) {
this.__schema__ = "mailto:";
this.__index__ = shift;
this.__last_index__ = next;
}
}
}
}
return this.__index__ >= 0;
};
LinkifyIt$1.prototype.pretest = function pretest(text3) {
return this.re.pretest.test(text3);
};
LinkifyIt$1.prototype.testSchemaAt = function testSchemaAt(text3, schema, pos) {
if (!this.__compiled__[schema.toLowerCase()]) {
return 0;
}
return this.__compiled__[schema.toLowerCase()].validate(text3, pos, this);
};
LinkifyIt$1.prototype.match = function match(text3) {
var shift = 0, result = [];
if (this.__index__ >= 0 && this.__text_cache__ === text3) {
result.push(createMatch(this, shift));
shift = this.__last_index__;
}
var tail = shift ? text3.slice(shift) : text3;
while (this.test(tail)) {
result.push(createMatch(this, shift));
tail = tail.slice(this.__last_index__);
shift += this.__last_index__;
}
if (result.length) {
return result;
}
return null;
};
LinkifyIt$1.prototype.matchAtStart = function matchAtStart(text3) {
this.__text_cache__ = text3;
this.__index__ = -1;
if (!text3.length) return null;
var m = this.re.schema_at_start.exec(text3);
if (!m) return null;
var len = this.testSchemaAt(text3, m[2], m[0].length);
if (!len) return null;
this.__schema__ = m[2];
this.__index__ = m.index + m[1].length;
this.__last_index__ = m.index + m[0].length + len;
return createMatch(this, 0);
};
LinkifyIt$1.prototype.tlds = function tlds(list3, keepOld) {
list3 = Array.isArray(list3) ? list3 : [list3];
if (!keepOld) {
this.__tlds__ = list3.slice();
this.__tlds_replaced__ = true;
compile(this);
return this;
}
this.__tlds__ = this.__tlds__.concat(list3).sort().filter(function(el2, idx, arr) {
return el2 !== arr[idx - 1];
}).reverse();
compile(this);
return this;
};
LinkifyIt$1.prototype.normalize = function normalize3(match2) {
if (!match2.schema) {
match2.url = "http://" + match2.url;
}
if (match2.schema === "mailto:" && !/^mailto:/i.test(match2.url)) {
match2.url = "mailto:" + match2.url;
}
};
LinkifyIt$1.prototype.onCompile = function onCompile() {
};
var linkifyIt = LinkifyIt$1;
const __viteBrowserExternal = {};
const __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
default: __viteBrowserExternal
}, Symbol.toStringTag, { value: "Module" }));
const require$$8 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);
var _default = {
options: {
html: false,
// Enable HTML tags in source
xhtmlOut: false,
// Use '/' to close single tags (<br />)
breaks: false,
// Convert '\n' in paragraphs into <br>
langPrefix: "language-",
// CSS language prefix for fenced blocks
linkify: false,
// autoconvert URL-like texts to links
// Enable some language-neutral replacements + quotes beautification
typographer: false,
// Double + single quotes replacement pairs, when typographer enabled,
// and smartquotes on. Could be either a String or an Array.
//
// For example, you can use '«»„“' for Russian, '„“‚‘' for German,
// and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp).
quotes: "“”‘’",
/* “”‘’ */
// Highlighter function. Should return escaped HTML,
// or '' if the source string is not changed and should be escaped externaly.
// If result starts with <pre... internal wrapper is skipped.
//
// function (/*str, lang*/) { return ''; }
//
highlight: null,
maxNesting: 100
// Internal protection, recursion limit
},
components: {
core: {},
block: {},
inline: {}
}
};
var zero = {
options: {
html: false,
// Enable HTML tags in source
xhtmlOut: false,
// Use '/' to close single tags (<br />)
breaks: false,
// Convert '\n' in paragraphs into <br>
langPrefix: "language-",
// CSS language prefix for fenced blocks
linkify: false,
// autoconvert URL-like texts to links
// Enable some language-neutral replacements + quotes beautification
typographer: false,
// Double + single quotes replacement pairs, when typographer enabled,
// and smartquotes on. Could be either a String or an Array.
//
// For example, you can use '«»„“' for Russian, '„“‚‘' for German,
// and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp).
quotes: "“”‘’",
/* “”‘’ */
// Highlighter function. Should return escaped HTML,
// or '' if the source string is not changed and should be escaped externaly.
// If result starts with <pre... internal wrapper is skipped.
//
// function (/*str, lang*/) { return ''; }
//
highlight: null,
maxNesting: 20
// Internal protection, recursion limit
},
components: {
core: {
rules: [
"normalize",
"block",
"inline",
"text_join"
]
},
block: {
rules: [
"paragraph"
]
},
inline: {
rules: [
"text"
],
rules2: [
"balance_pairs",
"fragments_join"
]
}
}
};
var commonmark = {
options: {
html: true,
// Enable HTML tags in source
xhtmlOut: true,
// Use '/' to close single tags (<br />)
breaks: false,
// Convert '\n' in paragraphs into <br>
langPrefix: "language-",
// CSS language prefix for fenced blocks
linkify: false,
// autoconvert URL-like texts to links
// Enable some language-neutral replacements + quotes beautification
typographer: false,
// Double + single quotes replacement pairs, when typographer enabled,
// and smartquotes on. Could be either a String or an Array.
//
// For example, you can use '«»„“' for Russian, '„“‚‘' for German,
// and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp).
quotes: "“”‘’",
/* “”‘’ */
// Highlighter function. Should return escaped HTML,
// or '' if the source string is not changed and should be escaped externaly.
// If result starts with <pre... internal wrapper is skipped.
//
// function (/*str, lang*/) { return ''; }
//
highlight: null,
maxNesting: 20
// Internal protection, recursion limit
},
components: {
core: {
rules: [
"normalize",
"block",
"inline",
"text_join"
]
},
block: {
rules: [
"blockquote",
"code",
"fence",
"heading",
"hr",
"html_block",
"lheading",
"list",
"reference",
"paragraph"
]
},
inline: {
rules: [
"autolink",
"backticks",
"emphasis",
"entity",
"escape",
"html_inline",
"image",
"link",
"newline",
"text"
],
rules2: [
"balance_pairs",
"emphasis",
"fragments_join"
]
}
}
};
var utils = utils$1;
var helpers = helpers$1;
var Renderer = renderer;
var ParserCore = parser_core;
var ParserBlock = parser_block;
var ParserInline = parser_inline;
var LinkifyIt = linkifyIt;
var mdurl = mdurl$1;
var punycode = require$$8;
var config = {
default: _default,
zero,
commonmark
};
var BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;
var GOOD_DATA_RE = /^data:image\/(gif|png|jpeg|webp);/;
function validateLink(url) {
var str = url.trim().toLowerCase();
return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) ? true : false : true;
}
var RECODE_HOSTNAME_FOR = ["http:", "https:", "mailto:"];
function normalizeLink(url) {
var parsed = mdurl.parse(url, true);
if (parsed.hostname) {
if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {
try {
parsed.hostname = punycode.toASCII(parsed.hostname);
} catch (er) {
}
}
}
return mdurl.encode(mdurl.format(parsed));
}
function normalizeLinkText(url) {
var parsed = mdurl.parse(url, true);
if (parsed.hostname) {
if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {
try {
parsed.hostname = punycode.toUnicode(parsed.hostname);
} catch (er) {
}
}
}
return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + "%");
}
function MarkdownIt$1(presetName, options) {
if (!(this instanceof MarkdownIt$1)) {
return new MarkdownIt$1(presetName, options);
}
if (!options) {
if (!utils.isString(presetName)) {
options = presetName || {};
presetName = "default";
}
}
this.inline = new ParserInline();
this.block = new ParserBlock();
this.core = new ParserCore();
this.renderer = new Renderer();
this.linkify = new LinkifyIt();
this.validateLink = validateLink;
this.normalizeLink = normalizeLink;
this.normalizeLinkText = normalizeLinkText;
this.utils = utils;
this.helpers = utils.assign({}, helpers);
this.options = {};
this.configure(presetName);
if (options) {
this.set(options);
}
}
MarkdownIt$1.prototype.set = function(options) {
utils.assign(this.options, options);
return this;
};
MarkdownIt$1.prototype.configure = function(presets) {
var self = this, presetName;
if (utils.isString(presets)) {
presetName = presets;
presets = config[presetName];
if (!presets) {
throw new Error('Wrong `markdown-it` preset "' + presetName + '", check name');
}
}
if (!presets) {
throw new Error("Wrong `markdown-it` preset, can't be empty");
}
if (presets.options) {
self.set(presets.options);
}
if (presets.components) {
Object.keys(presets.components).forEach(function(name) {
if (presets.components[name].rules) {
self[name].ruler.enableOnly(presets.components[name].rules);
}
if (presets.components[name].rules2) {
self[name].ruler2.enableOnly(presets.components[name].rules2);
}
});
}
return this;
};
MarkdownIt$1.prototype.enable = function(list3, ignoreInvalid) {
var result = [];
if (!Array.isArray(list3)) {
list3 = [list3];
}
["core", "block", "inline"].forEach(function(chain) {
result = result.concat(this[chain].ruler.enable(list3, true));
}, this);
result = result.concat(this.inline.ruler2.enable(list3, true));
var missed = list3.filter(function(name) {
return result.indexOf(name) < 0;
});
if (missed.length && !ignoreInvalid) {
throw new Error("MarkdownIt. Failed to enable unknown rule(s): " + missed);
}
return this;
};
MarkdownIt$1.prototype.disable = function(list3, ignoreInvalid) {
var result = [];
if (!Array.isArray(list3)) {
list3 = [list3];
}
["core", "block", "inline"].forEach(function(chain) {
result = result.concat(this[chain].ruler.disable(list3, true));
}, this);
result = result.concat(this.inline.ruler2.disable(list3, true));
var missed = list3.filter(function(name) {
return result.indexOf(name) < 0;
});
if (missed.length && !ignoreInvalid) {
throw new Error("MarkdownIt. Failed to disable unknown rule(s): " + missed);
}
return this;
};
MarkdownIt$1.prototype.use = function(plugin) {
var args = [this].concat(Array.prototype.slice.call(arguments, 1));
plugin.apply(plugin, args);
return this;
};
MarkdownIt$1.prototype.parse = function(src, env) {
if (typeof src !== "string") {
throw new Error("Input data should be a String");
}
var state = new this.core.State(src, this, env);
this.core.process(state);
return state.tokens;
};
MarkdownIt$1.prototype.render = function(src, env) {
env = env || {};
return this.renderer.render(this.parse(src, env), this.options, env);
};
MarkdownIt$1.prototype.parseInline = function(src, env) {
var state = new this.core.State(src, this, env);
state.inlineMode = true;
this.core.process(state);
return state.tokens;
};
MarkdownIt$1.prototype.renderInline = function(src, env) {
env = env || {};
return this.renderer.render(this.parseInline(src, env), this.options, env);
};
var lib = MarkdownIt$1;
var markdownIt = lib;
const MarkdownIt = /* @__PURE__ */ getDefaultExportFromCjs(markdownIt);
const VueMarkdown = vue.defineComponent({
name: "VueMarkdown",
props: {
source: {
type: String,
required: true
},
options: {
type: Object,
required: false
},
plugins: {
type: Array,
required: false
}
},
setup(props) {
const md = vue.ref(new MarkdownIt(props.options ?? {}));
for (const plugin of props.plugins ?? []) {
md.value.use(plugin);
}
const content = vue.computed(() => md.value.render(props.source));
return () => vue.h("div", { innerHTML: content.value });
}
});
const _hoisted_1$3 = { class: "c-block" };
const _hoisted_2 = ["href"];
const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
__name: "SyBLock",
props: {
block: {
type: Object,
required: true
}
},
setup(__props) {
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
vue.createVNode(vue.unref(VueMarkdown), {
source: __props.block.markdown || __props.block.content
}, null, 8, ["source"]),
vue.createElementVNode("a", {
href: `siyuan://blocks/${__props.block.id}`
}, "📝", 8, _hoisted_2)
]);
};
}
});
const _export_sfc = (sfc, props) => {
const target2 = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target2[key] = val;
}
return target2;
};
const SyBLock = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-5fd0fecb"]]);
const _hoisted_1$2 = {
key: 0,
class: "c-list"
};
const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
__name: "PageInfo",
setup(__props) {
const blockListShow = vue.ref(false);
const refBlocks = vue.ref([]);
sql(`select * from blocks
where
content like '%${pageUrl.origin + pageUrl.pathname}%'
and
type = 'p'
ORDER BY created DESC
LIMIT 1000000`).then((r) => {
console.log("[r]", r);
refBlocks.value = r.data || [];
});
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock("div", {
class: "c",
onMouseenter: _cache[0] || (_cache[0] = ($event) => blockListShow.value = true),
onMouseleave: _cache[1] || (_cache[1] = ($event) => blockListShow.value = false)
}, [
vue.createElementVNode("span", null, "引用 " + vue.toDisplayString(refBlocks.value.length) + " 次", 1),
blockListShow.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(refBlocks.value, (block3) => {
return vue.openBlock(), vue.createBlock(SyBLock, { block: block3 }, null, 8, ["block"]);
}), 256))
])) : vue.createCommentVNode("", true)
], 32);
};
}
});
const PageInfo = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-c3481be8"]]);
const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
__name: "config",
props: {
"server": {},
"serverModifiers": {},
"token": {},
"tokenModifiers": {}
},
emits: ["update:server", "update:token"],
setup(__props) {
const server2 = vue.useModel(__props, "server");
const token2 = vue.useModel(__props, "token");
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
_cache[2] || (_cache[2] = vue.createElementVNode("h4", null, "思源再提醒插件", -1)),
_cache[3] || (_cache[3] = vue.createTextVNode(" server:")),
vue.withDirectives(vue.createElementVNode("input", {
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => server2.value = $event)
}, null, 512), [
[vue.vModelText, server2.value]
]),
_cache[4] || (_cache[4] = vue.createElementVNode("br", null, null, -1)),
_cache[5] || (_cache[5] = vue.createTextVNode(" token:")),
vue.withDirectives(vue.createElementVNode("input", {
type: "password",
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => token2.value = $event)
}, null, 512), [
[vue.vModelText, token2.value]
])
], 64);
};
}
});
const _hoisted_1$1 = { style: { "background": "#fff" } };
const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
__name: "App",
setup(__props) {
const configShow = vue.ref(false);
_GM.registerMenuCommand("切换配置面板", () => {
configShow.value = !configShow.value;
});
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
configShow.value ? (vue.openBlock(), vue.createBlock(_sfc_main$2, {
key: 0,
server: vue.unref(config$1).server,
"onUpdate:server": _cache[0] || (_cache[0] = ($event) => vue.unref(config$1).server = $event),
token: vue.unref(config$1).token,
"onUpdate:token": _cache[1] || (_cache[1] = ($event) => vue.unref(config$1).token = $event)
}, null, 8, ["server", "token"])) : vue.createCommentVNode("", true),
vue.createVNode(PageInfo)
]);
};
}
});
const _hoisted_1 = {
key: 0,
class: "c-list"
};
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
__name: "ElementInfo",
props: {
rows: {
type: Array,
required: true
}
},
setup(__props) {
const blockListShow = vue.ref(false);
const props = __props;
const refBlocks = vue.ref([]);
vue.watchEffect(() => {
if (blockListShow.value && refBlocks.value.length === 0) {
sql(`select * from blocks
where
id IN (${props.rows.map((row) => `'${row.id}'`).join(",")})
ORDER BY created DESC
LIMIT 1000000`).then((r) => {
refBlocks.value = r.data || [];
console.log("[r]", r, refBlocks.value);
});
}
});
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock("div", {
style: { "display": "inline-block" },
onMouseenter: _cache[0] || (_cache[0] = ($event) => blockListShow.value = true),
onMouseleave: _cache[1] || (_cache[1] = ($event) => blockListShow.value = false)
}, [
vue.createTextVNode(" [" + vue.toDisplayString(__props.rows.length) + "] ", 1),
blockListShow.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(refBlocks.value, (block3) => {
return vue.openBlock(), vue.createBlock(SyBLock, { block: block3 }, null, 8, ["block"]);
}), 256))
])) : vue.createCommentVNode("", true)
], 32);
};
}
});
const ElementInfo = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-89518ebf"]]);
vue.createApp(_sfc_main$1).mount(
(() => {
const app = document.createElement("div");
app.style.cssText = `
position: fixed;
right: 0;
top:0;
z-index:99999999999999;
`;
console.log("[app]", app);
document.body.append(app);
return app;
})()
);
setTimeout(async () => {
const sy = await sql(`
SELECT id, content AS segmenter FROM blocks WHERE content != '' AND (TYPE = 'd' OR TYPE = 'h')
UNION ALL
SELECT id, name AS segmenter FROM blocks WHERE name != ''
UNION ALL
SELECT id, ALIAS AS segmenter FROM blocks WHERE ALIAS != ''
LIMIT 100000
`);
const rows = sy.data;
const doms = getParentsOfTextNodes(document.body);
[...doms].filter((el2) => {
const text3 = el2.textContent;
const includeRows = rows.filter((row) => text3 == null ? void 0 : text3.includes(row.segmenter));
const El = el2 instanceof HTMLElement ? el2 : el2.parentElement;
if (includeRows.find((t) => t.segmenter === text3) && El) {
El.style.cssText = `
border-bottom: dashed 2px;
`;
const container = El;
vue.createApp(ElementInfo, {
rows: includeRows
}).mount(
(() => {
const el22 = document.createElement("sup");
el22.style.cssText = `
margin-left: 5px;
`;
container == null ? void 0 : container.append(el22);
return el22;
})()
);
}
});
}, 3e3);
function getParentsOfTextNodes(element) {
const parentElements = /* @__PURE__ */ new Set();
(function traverse(node) {
if (node instanceof Text) {
parentElements.add(node);
}
Array.from(node.childNodes).forEach(traverse);
})(element);
return Array.from(parentElements);
}
})(Vue);