UNPKG

gfm-escape

Version:

Markdown and GFM escaper for converting plaintext into escaped Markdown

1,138 lines (940 loc) 48 kB
'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var UnionReplacer = _interopDefault(require('union-replacer')); function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } var BaseSyntax = function () { function BaseSyntax(name) { this.name = name; this.inlinesInterpreted = true; this.blocksInterpreted = true; this.isLink = false; } var _proto = BaseSyntax.prototype; _proto.isEncodable = function isEncodable(str) { return true; }; _proto.wouldBeUnaltered = function wouldBeUnaltered(str) { return true; }; return BaseSyntax; }(); var NAME = 'text'; var TextSyntax = function (_BaseSyntax) { _inheritsLoose(TextSyntax, _BaseSyntax); function TextSyntax() { return _BaseSyntax.call(this, NAME) || this; } _createClass(TextSyntax, null, [{ key: "name", get: function get() { return NAME; } }]); return TextSyntax; }(BaseSyntax); var NAME$1 = 'linkDestination'; var LinkDestinationSyntax = function (_BaseSyntax) { _inheritsLoose(LinkDestinationSyntax, _BaseSyntax); function LinkDestinationSyntax() { var _this; _this = _BaseSyntax.call(this, NAME$1) || this; _this.isLink = true; _this.inlinesInterpreted = false; _this.blocksInterpreted = false; return _this; } _createClass(LinkDestinationSyntax, null, [{ key: "name", get: function get() { return NAME$1; } }]); return LinkDestinationSyntax; }(BaseSyntax); var NAME$2 = 'linkTitle'; var LinkTitleSyntax = function (_BaseSyntax) { _inheritsLoose(LinkTitleSyntax, _BaseSyntax); function LinkTitleSyntax() { var _this; _this = _BaseSyntax.call(this, NAME$2) || this; _this.isLink = true; _this.inlinesInterpreted = false; return _this; } _createClass(LinkTitleSyntax, null, [{ key: "name", get: function get() { return NAME$2; } }]); return LinkTitleSyntax; }(BaseSyntax); var autolinkedSchemeReStr = '[hH][tT][tT][pP][sS]?://|[fF][tT][pP]://'; var linkForbiddenRe = /[<>\s\f\v]/; var entityAmpersandReStr = '&(?=[a-zA-Z][a-zA-Z\\d]*;|#\\d{1,7};|#[xX][\\da-fA-F]{1,6};)'; var entityAmpersandRe = new RegExp(entityAmpersandReStr); var entityAmpersandsRe = new RegExp(entityAmpersandReStr, 'g'); var NAME$3 = 'cmAutolink'; var STARTS_WITH_AUTOLINKED_SCHEME_RE = new RegExp("^" + autolinkedSchemeReStr); var EMAIL_ADDRESS_RE = /^[\w.!#$%&'*+/=?^`{|}~-]+@[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?(?:\.[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?)*$/i; var CmAutolinkSyntax = function (_BaseSyntax) { _inheritsLoose(CmAutolinkSyntax, _BaseSyntax); function CmAutolinkSyntax() { var _this; _this = _BaseSyntax.call(this, NAME$3) || this; _this.isLink = true; _this.inlinesInterpreted = false; _this.blocksInterpreted = false; return _this; } var _proto = CmAutolinkSyntax.prototype; _proto.isEncodable = function isEncodable(str) { return STARTS_WITH_AUTOLINKED_SCHEME_RE.test(str) || EMAIL_ADDRESS_RE.test(str); }; _proto.wouldBeUnaltered = function wouldBeUnaltered(str) { return !linkForbiddenRe.test(str) && !entityAmpersandRe.test(str); }; _createClass(CmAutolinkSyntax, null, [{ key: "name", get: function get() { return NAME$3; } }]); return CmAutolinkSyntax; }(BaseSyntax); var NAME$4 = 'codeSpan'; var CodeSpanSyntax = function (_BaseSyntax) { _inheritsLoose(CodeSpanSyntax, _BaseSyntax); function CodeSpanSyntax() { var _this; _this = _BaseSyntax.call(this, NAME$4) || this; _this.inlinesInterpreted = false; _this.blocksInterpreted = false; return _this; } var _proto = CodeSpanSyntax.prototype; _proto.isEncodable = function isEncodable(str) { return str.length > 0; }; _createClass(CodeSpanSyntax, null, [{ key: "name", get: function get() { return NAME$4; } }]); return CodeSpanSyntax; }(BaseSyntax); var Syntax = BaseSyntax; Syntax.text = new TextSyntax(); Syntax.linkDestination = new LinkDestinationSyntax(); Syntax.linkTitle = new LinkTitleSyntax(); Syntax.cmAutolink = new CmAutolinkSyntax(); Syntax.codeSpan = new CodeSpanSyntax(); var longestBacktickString = function longestBacktickString(str) { var m = str.match(/`+/g); return m ? m.reduce(function (longest, current) { return current.length > longest.length ? current : longest; }, '') : ''; }; var SHOULD_ADD_SPACE_RE = /^`|^[ \r\n].*?[^ \r\n].*[ \r\n]$|`$/; function scanDelimiters(input) { var x = this.metadata; x.extraBacktickString = longestBacktickString(input); x.extraSpace = SHOULD_ADD_SPACE_RE.test(input) ? ' ' : ''; return input; } function addDelimiterExtras(output) { var x = this.metadata; var before = x.extraBacktickString + x.extraSpace; var after = x.extraSpace + x.extraBacktickString; return "" + before + output + after; } function codeSpanReplace() { this.preprocessors.push(scanDelimiters); this.postprocessors.unshift(addDelimiterExtras); } var BACKSLASH_BLOCK_RE = new RegExp(['^([-*_])[ \\t]*(?:\\1[ \\t]*){2,}$', '^=+[ \\t]*$', '^(?:[-+*]|#{1,6})(?=\\s|$)', '^~(?=~~)'].join('|')); var ORDERED_LIST_RE = /^(\d+)([.)])(?=\s|$)/; function blockReplace() { this.replaces.push([BACKSLASH_BLOCK_RE, '\\$&']); this.replaces.push([ORDERED_LIST_RE, '$1\\$2']); } function mergeOpts(opts, key, defaults, defaultEnabled) { var myOpts = opts[key]; if (!myOpts && (!defaultEnabled || myOpts !== undefined)) { return false; } opts[key] = typeof opts[key] === 'object' ? _extends({}, defaults, opts[key]) : defaults; return true; } var autolinkedWwwReStr = 'www\\.'; var extWebAutolinkStartCandidateReStr = "(?:" + autolinkedSchemeReStr + "|" + autolinkedWwwReStr + ")" + '[^\\s\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]'; var defaultOpts = { maxIntrawordUnderscoreRun: undefined }; var INTRAWORD_UNDERSORES_RE = new RegExp("([a-zA-Z0-9])(_+)(?=[a-zA-Z0-9])(?!" + extWebAutolinkStartCandidateReStr + ")"); var FREE_DELIMITER_RE = /(?:^|[ \t\f])([_*])\1*(?=[ \t\r\n\f])/; function processIntrawordUnderscores(_ref) { var _ref$match = _ref.match, m = _ref$match[0], before = _ref$match[1], underscores = _ref$match[2]; var max = this.escape.opts.emphasisNonDelimiters.maxIntrawordUnderscoreRun; if (max !== false && underscores.length > max) { var underscoresOut = underscores.replace(/_/g, '\\_'); return "" + before + underscoresOut; } return m; } function emphasisNonDelimitersReplace() { if (!mergeOpts(this.opts, 'emphasisNonDelimiters', defaultOpts, true)) { return; } var max = this.opts.emphasisNonDelimiters.maxIntrawordUnderscoreRun; if (typeof max !== 'number') { this.opts.emphasisNonDelimiters.maxIntrawordUnderscoreRun = max ? 1 : false; } this.replaces.push([INTRAWORD_UNDERSORES_RE, processIntrawordUnderscores, true]); this.replaces.push([FREE_DELIMITER_RE, '$&']); } function entityBackslashReplace() { this.replaces.push([entityAmpersandRe, '\\&']); } function entityEntityReplace() { this.replaces.push([entityAmpersandRe, '&amp;']); } var C = { // Equivalent to \t\n\f\r\p{Zs} space: ' \\t\\n\\f\\r\xA0\u1680\u2000-\u200A\u202F\u205F\u3000', // Equivalent to \p{Pc}\p{Pd}\p{Pe}\p{Pf}\p{Pi}\p{Po}\p{Ps} punct: '_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F\\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D\\)\\]\\}\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20!-#%-\'\\*,\\.\\/:;\\?@\\\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\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\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166D\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43-\u2E4E\u3001-\u3003\u303D\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\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65\\(\\[\\{\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62', }; var ALPHA_ENTITY_REFERENCES = { '\xC6':'AElig','&':'amp','\xC1':'Aacute','\u0102':'Abreve','\xC2':'Acirc','\u0410':'Acy', '\xC0':'Agrave','\u0391':'Alpha','\u0100':'Amacr','\u2A53':'And','\u0104':'Aogon','\u2061':'af', '\xC5':'angst','\u2254':'colone','\xC3':'Atilde','\xC4':'Auml','\u2216':'setmn','\u2AE7':'Barv', '\u2306':'Barwed','\u0411':'Bcy','\u2235':'becaus','\u212C':'Bscr','\u0392':'Beta','\u02D8':'breve', '\u224E':'bump','\u0427':'CHcy','\xA9':'copy','\u0106':'Cacute','\u22D2':'Cap','\u2145':'DD', '\u212D':'Cfr','\u010C':'Ccaron','\xC7':'Ccedil','\u0108':'Ccirc','\u2230':'Cconint','\u010A':'Cdot', '\xB8':'cedil','\xB7':'middot','\u03A7':'Chi','\u2299':'odot','\u2296':'ominus','\u2295':'oplus', '\u2297':'otimes','\u2232':'cwconint','\u201D':'rdquo','\u2019':'rsquo','\u2237':'Colon', '\u2A74':'Colone','\u2261':'equiv','\u222F':'Conint','\u222E':'oint','\u2102':'Copf', '\u2210':'coprod','\u2233':'awconint','\u2A2F':'Cross','\u22D3':'Cup','\u224D':'CupCap', '\u2911':'DDotrahd','\u0402':'DJcy','\u0405':'DScy','\u040F':'DZcy','\u2021':'Dagger', '\u21A1':'Darr','\u2AE4':'Dashv','\u010E':'Dcaron','\u0414':'Dcy','\u2207':'Del','\u0394':'Delta', '\xB4':'acute','\u02D9':'dot','\u02DD':'dblac','`':'grave','\u02DC':'tilde','\u22C4':'diam', '\u2146':'dd','\xA8':'die','\u20DC':'DotDot','\u2250':'doteq','\u21D3':'dArr','\u21D0':'lArr', '\u21D4':'iff','\u27F8':'xlArr','\u27FA':'xhArr','\u27F9':'xrArr','\u21D2':'rArr','\u22A8':'vDash', '\u21D1':'uArr','\u21D5':'vArr','\u2225':'par','\u2193':'darr','\u2913':'DownArrowBar', '\u21F5':'duarr','\u0311':'DownBreve','\u2950':'DownLeftRightVector','\u295E':'DownLeftTeeVector', '\u21BD':'lhard','\u2956':'DownLeftVectorBar','\u295F':'DownRightTeeVector','\u21C1':'rhard', '\u2957':'DownRightVectorBar','\u22A4':'top','\u21A7':'mapstodown','\u0110':'Dstrok','\u014A':'ENG', '\xD0':'ETH','\xC9':'Eacute','\u011A':'Ecaron','\xCA':'Ecirc','\u042D':'Ecy','\u0116':'Edot', '\xC8':'Egrave','\u2208':'in','\u0112':'Emacr','\u25FB':'EmptySmallSquare', '\u25AB':'EmptyVerySmallSquare','\u0118':'Eogon','\u0395':'Epsilon','\u2A75':'Equal','\u2242':'esim', '\u21CC':'rlhar','\u2130':'Escr','\u2A73':'Esim','\u0397':'Eta','\xCB':'Euml','\u2203':'exist', '\u2147':'ee','\u0424':'Fcy','\u25FC':'FilledSmallSquare','\u25AA':'squf','\u2200':'forall', '\u2131':'Fscr','\u0403':'GJcy','>':'gt','\u0393':'Gamma','\u03DC':'Gammad','\u011E':'Gbreve', '\u0122':'Gcedil','\u011C':'Gcirc','\u0413':'Gcy','\u0120':'Gdot','\u22D9':'Gg','\u2265':'ge', '\u22DB':'gel','\u2267':'gE','\u2AA2':'GreaterGreater','\u2277':'gl','\u2A7E':'ges','\u2273':'gsim', '\u226B':'gg','\u042A':'HARDcy','\u02C7':'caron','^':'Hat','\u0124':'Hcirc','\u210C':'Hfr', '\u210B':'Hscr','\u210D':'Hopf','\u2500':'boxh','\u0126':'Hstrok','\u224F':'bumpe','\u0415':'IEcy', '\u0132':'IJlig','\u0401':'IOcy','\xCD':'Iacute','\xCE':'Icirc','\u0418':'Icy','\u0130':'Idot', '\u2111':'Im','\xCC':'Igrave','\u012A':'Imacr','\u2148':'ii','\u222C':'Int','\u222B':'int', '\u22C2':'xcap','\u2063':'ic','\u2062':'it','\u012E':'Iogon','\u0399':'Iota','\u2110':'Iscr', '\u0128':'Itilde','\u0406':'Iukcy','\xCF':'Iuml','\u0134':'Jcirc','\u0419':'Jcy','\u0408':'Jsercy', '\u0404':'Jukcy','\u0425':'KHcy','\u040C':'KJcy','\u039A':'Kappa','\u0136':'Kcedil','\u041A':'Kcy', '\u0409':'LJcy','<':'lt','\u0139':'Lacute','\u039B':'Lambda','\u27EA':'Lang','\u2112':'Lscr', '\u219E':'Larr','\u013D':'Lcaron','\u013B':'Lcedil','\u041B':'Lcy','\u27E8':'lang','\u2190':'larr', '\u21E4':'larrb','\u21C6':'lrarr','\u2308':'lceil','\u27E6':'lobrk','\u2961':'LeftDownTeeVector', '\u21C3':'dharl','\u2959':'LeftDownVectorBar','\u230A':'lfloor','\u2194':'harr', '\u294E':'LeftRightVector','\u22A3':'dashv','\u21A4':'mapstoleft','\u295A':'LeftTeeVector', '\u22B2':'vltri','\u29CF':'LeftTriangleBar','\u22B4':'ltrie','\u2951':'LeftUpDownVector', '\u2960':'LeftUpTeeVector','\u21BF':'uharl','\u2958':'LeftUpVectorBar','\u21BC':'lharu', '\u2952':'LeftVectorBar','\u22DA':'leg','\u2266':'lE','\u2276':'lg','\u2AA1':'LessLess', '\u2A7D':'les','\u2272':'lsim','\u22D8':'Ll','\u21DA':'lAarr','\u013F':'Lmidot','\u27F5':'xlarr', '\u27F7':'xharr','\u27F6':'xrarr','\u2199':'swarr','\u2198':'searr','\u21B0':'lsh','\u0141':'Lstrok', '\u226A':'ll','\u2905':'Map','\u041C':'Mcy','\u205F':'MediumSpace','\u2133':'Mscr','\u2213':'mp', '\u039C':'Mu','\u040A':'NJcy','\u0143':'Nacute','\u0147':'Ncaron','\u0145':'Ncedil','\u041D':'Ncy', '\u200B':'ZeroWidthSpace','\n':'NewLine','\u2060':'NoBreak','\xA0':'nbsp','\u2115':'Nopf', '\u2AEC':'Not','\u2262':'nequiv','\u226D':'NotCupCap','\u2226':'npar','\u2209':'notin','\u2260':'ne', '\u2204':'nexist','\u226F':'ngt','\u2271':'nge','\u2279':'ntgl','\u2275':'ngsim','\u22EA':'nltri', '\u22EC':'nltrie','\u226E':'nlt','\u2270':'nle','\u2278':'ntlg','\u2274':'nlsim','\u2280':'npr', '\u22E0':'nprcue','\u220C':'notni','\u22EB':'nrtri','\u22ED':'nrtrie','\u22E2':'nsqsube', '\u22E3':'nsqsupe','\u2288':'nsube','\u2281':'nsc','\u22E1':'nsccue','\u2289':'nsupe', '\u2241':'nsim','\u2244':'nsime','\u2247':'ncong','\u2249':'nap','\u2224':'nmid','\xD1':'Ntilde', '\u039D':'Nu','\u0152':'OElig','\xD3':'Oacute','\xD4':'Ocirc','\u041E':'Ocy','\u0150':'Odblac', '\xD2':'Ograve','\u014C':'Omacr','\u03A9':'ohm','\u039F':'Omicron','\u201C':'ldquo','\u2018':'lsquo', '\u2A54':'Or','\xD8':'Oslash','\xD5':'Otilde','\u2A37':'Otimes','\xD6':'Ouml','\u203E':'oline', '\u23DE':'OverBrace','\u23B4':'tbrk','\u23DC':'OverParenthesis','\u2202':'part','\u041F':'Pcy', '\u03A6':'Phi','\u03A0':'Pi','\xB1':'pm','\u2119':'Popf','\u2ABB':'Pr','\u227A':'pr','\u2AAF':'pre', '\u227C':'prcue','\u227E':'prsim','\u2033':'Prime','\u220F':'prod','\u221D':'prop','\u03A8':'Psi', '"':'quot','\u211A':'Qopf','\u2910':'RBarr','\xAE':'reg','\u0154':'Racute','\u27EB':'Rang', '\u21A0':'Rarr','\u2916':'Rarrtl','\u0158':'Rcaron','\u0156':'Rcedil','\u0420':'Rcy','\u211C':'Re', '\u220B':'ni','\u21CB':'lrhar','\u296F':'duhar','\u03A1':'Rho','\u27E9':'rang','\u2192':'rarr', '\u21E5':'rarrb','\u21C4':'rlarr','\u2309':'rceil','\u27E7':'robrk','\u295D':'RightDownTeeVector', '\u21C2':'dharr','\u2955':'RightDownVectorBar','\u230B':'rfloor','\u22A2':'vdash','\u21A6':'map', '\u295B':'RightTeeVector','\u22B3':'vrtri','\u29D0':'RightTriangleBar','\u22B5':'rtrie', '\u294F':'RightUpDownVector','\u295C':'RightUpTeeVector','\u21BE':'uharr', '\u2954':'RightUpVectorBar','\u21C0':'rharu','\u2953':'RightVectorBar','\u211D':'Ropf', '\u2970':'RoundImplies','\u21DB':'rAarr','\u211B':'Rscr','\u21B1':'rsh','\u29F4':'RuleDelayed', '\u0429':'SHCHcy','\u0428':'SHcy','\u042C':'SOFTcy','\u015A':'Sacute','\u2ABC':'Sc', '\u0160':'Scaron','\u015E':'Scedil','\u015C':'Scirc','\u0421':'Scy','\u2191':'uarr','\u03A3':'Sigma', '\u2218':'compfn','\u221A':'Sqrt','\u25A1':'squ','\u2293':'sqcap','\u228F':'sqsub','\u2291':'sqsube', '\u2290':'sqsup','\u2292':'sqsupe','\u2294':'sqcup','\u22C6':'Star','\u22D0':'Sub','\u2286':'sube', '\u227B':'sc','\u2AB0':'sce','\u227D':'sccue','\u227F':'scsim','\u2211':'sum','\u22D1':'Sup', '\u2283':'sup','\u2287':'supe','\xDE':'THORN','\u2122':'trade','\u040B':'TSHcy','\u0426':'TScy', '\t':'Tab','\u03A4':'Tau','\u0164':'Tcaron','\u0162':'Tcedil','\u0422':'Tcy','\u2234':'therefore', '\u0398':'Theta','\u2009':'thinsp','\u223C':'sim','\u2243':'sime','\u2245':'cong','\u2248':'ap', '\u20DB':'tdot','\u0166':'Tstrok','\xDA':'Uacute','\u219F':'Uarr','\u2949':'Uarrocir', '\u040E':'Ubrcy','\u016C':'Ubreve','\xDB':'Ucirc','\u0423':'Ucy','\u0170':'Udblac','\xD9':'Ugrave', '\u016A':'Umacr','_':'lowbar','\u23DF':'UnderBrace','\u23B5':'bbrk','\u23DD':'UnderParenthesis', '\u22C3':'xcup','\u228E':'uplus','\u0172':'Uogon','\u2912':'UpArrowBar','\u21C5':'udarr', '\u2195':'varr','\u296E':'udhar','\u22A5':'bot','\u21A5':'mapstoup','\u2196':'nwarr', '\u2197':'nearr','\u03D2':'Upsi','\u03A5':'Upsilon','\u016E':'Uring','\u0168':'Utilde','\xDC':'Uuml', '\u22AB':'VDash','\u2AEB':'Vbar','\u0412':'Vcy','\u22A9':'Vdash','\u2AE6':'Vdashl','\u22C1':'Vee', '\u2016':'Vert','\u2223':'mid','|':'vert','\u2758':'VerticalSeparator','\u2240':'wr', '\u200A':'hairsp','\u22AA':'Vvdash','\u0174':'Wcirc','\u22C0':'Wedge','\u039E':'Xi','\u042F':'YAcy', '\u0407':'YIcy','\u042E':'YUcy','\xDD':'Yacute','\u0176':'Ycirc','\u042B':'Ycy','\u0178':'Yuml', '\u0416':'ZHcy','\u0179':'Zacute','\u017D':'Zcaron','\u0417':'Zcy','\u017B':'Zdot','\u0396':'Zeta', '\u2128':'Zfr','\u2124':'Zopf','\xE1':'aacute','\u0103':'abreve','\u223E':'ac','\u223F':'acd', '\xE2':'acirc','\u0430':'acy','\xE6':'aelig','\xE0':'agrave','\u2135':'aleph','\u03B1':'alpha', '\u0101':'amacr','\u2A3F':'amalg','\u2227':'and','\u2A55':'andand','\u2A5C':'andd', '\u2A58':'andslope','\u2A5A':'andv','\u2220':'ang','\u29A4':'ange','\u2221':'angmsd', '\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae', '\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u221F':'angrt','\u22BE':'angrtvb', '\u299D':'angrtvbd','\u2222':'angsph','\u237C':'angzarr','\u0105':'aogon','\u2A70':'apE', '\u2A6F':'apacir','\u224A':'ape','\u224B':'apid','\'':'apos','\xE5':'aring','*':'ast', '\xE3':'atilde','\xE4':'auml','\u2A11':'awint','\u2AED':'bNot','\u224C':'bcong','\u03F6':'bepsi', '\u2035':'bprime','\u223D':'bsim','\u22CD':'bsime','\u22BD':'barvee','\u2305':'barwed', '\u23B6':'bbrktbrk','\u0431':'bcy','\u201E':'bdquo','\u29B0':'bemptyv','\u03B2':'beta', '\u2136':'beth','\u226C':'twixt','\u25EF':'xcirc','\u2A00':'xodot','\u2A01':'xoplus', '\u2A02':'xotime','\u2A06':'xsqcup','\u2605':'starf','\u25BD':'xdtri','\u25B3':'xutri', '\u2A04':'xuplus','\u290D':'rbarr','\u29EB':'lozf','\u25B4':'utrif','\u25BE':'dtrif', '\u25C2':'ltrif','\u25B8':'rtrif','\u2423':'blank','\u2588':'block','\u2310':'bnot', '\u22C8':'bowtie','\u2557':'boxDL','\u2554':'boxDR','\u2556':'boxDl','\u2553':'boxDr', '\u2550':'boxH','\u2566':'boxHD','\u2569':'boxHU','\u2564':'boxHd','\u2567':'boxHu','\u255D':'boxUL', '\u255A':'boxUR','\u255C':'boxUl','\u2559':'boxUr','\u2551':'boxV','\u256C':'boxVH','\u2563':'boxVL', '\u2560':'boxVR','\u256B':'boxVh','\u2562':'boxVl','\u255F':'boxVr','\u29C9':'boxbox', '\u2555':'boxdL','\u2552':'boxdR','\u2510':'boxdl','\u250C':'boxdr','\u2565':'boxhD', '\u2568':'boxhU','\u252C':'boxhd','\u2534':'boxhu','\u229F':'minusb','\u229E':'plusb', '\u22A0':'timesb','\u255B':'boxuL','\u2558':'boxuR','\u2518':'boxul','\u2514':'boxur', '\u2502':'boxv','\u256A':'boxvH','\u2561':'boxvL','\u255E':'boxvR','\u253C':'boxvh','\u2524':'boxvl', '\u251C':'boxvr','\xA6':'brvbar','\u204F':'bsemi','\\':'bsol','\u29C5':'bsolb','\u27C8':'bsolhsub', '\u2022':'bull','\u2AAE':'bumpE','\u0107':'cacute','\u2229':'cap','\u2A44':'capand', '\u2A49':'capbrcup','\u2A4B':'capcap','\u2A47':'capcup','\u2A40':'capdot','\u2041':'caret', '\u2A4D':'ccaps','\u010D':'ccaron','\xE7':'ccedil','\u0109':'ccirc','\u2A4C':'ccups', '\u2A50':'ccupssm','\u010B':'cdot','\u29B2':'cemptyv','\xA2':'cent','\u0447':'chcy','\u2713':'check', '\u03C7':'chi','\u25CB':'cir','\u29C3':'cirE','\u02C6':'circ','\u2257':'cire','\u21BA':'olarr', '\u21BB':'orarr','\u24C8':'oS','\u229B':'oast','\u229A':'ocir','\u229D':'odash','\u2A10':'cirfnint', '\u2AEF':'cirmid','\u29C2':'cirscir','\u2663':'clubs',':':'colon',',':'comma','@':'commat', '\u2201':'comp','\u2A6D':'congdot','\u2117':'copysr','\u21B5':'crarr','\u2717':'cross', '\u2ACF':'csub','\u2AD1':'csube','\u2AD0':'csup','\u2AD2':'csupe','\u22EF':'ctdot', '\u2938':'cudarrl','\u2935':'cudarrr','\u22DE':'cuepr','\u22DF':'cuesc','\u21B6':'cularr', '\u293D':'cularrp','\u222A':'cup','\u2A48':'cupbrcap','\u2A46':'cupcap','\u2A4A':'cupcup', '\u228D':'cupdot','\u2A45':'cupor','\u21B7':'curarr','\u293C':'curarrm','\u22CE':'cuvee', '\u22CF':'cuwed','\xA4':'curren','\u2231':'cwint','\u232D':'cylcty','\u2965':'dHar', '\u2020':'dagger','\u2138':'daleth','\u2010':'dash','\u290F':'rBarr','\u010F':'dcaron', '\u0434':'dcy','\u21CA':'ddarr','\u2A77':'eDDot','\xB0':'deg','\u03B4':'delta','\u29B1':'demptyv', '\u297F':'dfisht','\u2666':'diams','\u03DD':'gammad','\u22F2':'disin','\xF7':'div','\u22C7':'divonx', '\u0452':'djcy','\u231E':'dlcorn','\u230D':'dlcrop','$':'dollar','\u2251':'eDot','\u2238':'minusd', '\u2214':'plusdo','\u22A1':'sdotb','\u231F':'drcorn','\u230C':'drcrop','\u0455':'dscy', '\u29F6':'dsol','\u0111':'dstrok','\u22F1':'dtdot','\u25BF':'dtri','\u29A6':'dwangle', '\u045F':'dzcy','\u27FF':'dzigrarr','\xE9':'eacute','\u2A6E':'easter','\u011B':'ecaron', '\u2256':'ecir','\xEA':'ecirc','\u2255':'ecolon','\u044D':'ecy','\u0117':'edot','\u2252':'efDot', '\u2A9A':'eg','\xE8':'egrave','\u2A96':'egs','\u2A98':'egsdot','\u2A99':'el','\u23E7':'elinters', '\u2113':'ell','\u2A95':'els','\u2A97':'elsdot','\u0113':'emacr','\u2205':'empty','\u2003':'emsp', '\u014B':'eng','\u2002':'ensp','\u0119':'eogon','\u22D5':'epar','\u29E3':'eparsl','\u2A71':'eplus', '\u03B5':'epsi','\u03F5':'epsiv','=':'equals','\u225F':'equest','\u2A78':'equivDD', '\u29E5':'eqvparsl','\u2253':'erDot','\u2971':'erarr','\u212F':'escr','\u03B7':'eta','\xF0':'eth', '\xEB':'euml','\u20AC':'euro','!':'excl','\u0444':'fcy','\u2640':'female','\uFB03':'ffilig', '\uFB00':'fflig','\uFB04':'ffllig','\uFB01':'filig','\u266D':'flat','\uFB02':'fllig', '\u25B1':'fltns','\u0192':'fnof','\u22D4':'fork','\u2AD9':'forkv','\u2A0D':'fpartint', '\u2044':'frasl','\u2322':'frown','\u2A8C':'gEl','\u01F5':'gacute','\u03B3':'gamma','\u2A86':'gap', '\u011F':'gbreve','\u011D':'gcirc','\u0433':'gcy','\u0121':'gdot','\u2AA9':'gescc','\u2A80':'gesdot', '\u2A82':'gesdoto','\u2A84':'gesdotol','\u2A94':'gesles','\u2137':'gimel','\u0453':'gjcy', '\u2A92':'glE','\u2AA5':'gla','\u2AA4':'glj','\u2269':'gnE','\u2A8A':'gnap','\u2A88':'gne', '\u22E7':'gnsim','\u210A':'gscr','\u2A8E':'gsime','\u2A90':'gsiml','\u2AA7':'gtcc','\u2A7A':'gtcir', '\u22D7':'gtdot','\u2995':'gtlPar','\u2A7C':'gtquest','\u2978':'gtrarr','\xBD':'half', '\u044A':'hardcy','\u2948':'harrcir','\u21AD':'harrw','\u210F':'hbar','\u0125':'hcirc', '\u2665':'hearts','\u2026':'mldr','\u22B9':'hercon','\u2925':'searhk','\u2926':'swarhk', '\u21FF':'hoarr','\u223B':'homtht','\u21A9':'larrhk','\u21AA':'rarrhk','\u2015':'horbar', '\u0127':'hstrok','\u2043':'hybull','\xED':'iacute','\xEE':'icirc','\u0438':'icy','\u0435':'iecy', '\xA1':'iexcl','\xEC':'igrave','\u2A0C':'qint','\u222D':'tint','\u29DC':'iinfin','\u2129':'iiota', '\u0133':'ijlig','\u012B':'imacr','\u0131':'imath','\u22B7':'imof','\u01B5':'imped', '\u2105':'incare','\u221E':'infin','\u29DD':'infintie','\u22BA':'intcal','\u2A17':'intlarhk', '\u2A3C':'iprod','\u0451':'iocy','\u012F':'iogon','\u03B9':'iota','\xBF':'iquest','\u22F9':'isinE', '\u22F5':'isindot','\u22F4':'isins','\u22F3':'isinsv','\u0129':'itilde','\u0456':'iukcy', '\xEF':'iuml','\u0135':'jcirc','\u0439':'jcy','\u0237':'jmath','\u0458':'jsercy','\u0454':'jukcy', '\u03BA':'kappa','\u03F0':'kappav','\u0137':'kcedil','\u043A':'kcy','\u0138':'kgreen', '\u0445':'khcy','\u045C':'kjcy','\u291B':'lAtail','\u290E':'lBarr','\u2A8B':'lEg','\u2962':'lHar', '\u013A':'lacute','\u29B4':'laemptyv','\u03BB':'lambda','\u2991':'langd','\u2A85':'lap', '\xAB':'laquo','\u291F':'larrbfs','\u291D':'larrfs','\u21AB':'larrlp','\u2939':'larrpl', '\u2973':'larrsim','\u21A2':'larrtl','\u2AAB':'lat','\u2919':'latail','\u2AAD':'late', '\u290C':'lbarr','\u2772':'lbbrk','{':'lcub','[':'lsqb','\u298B':'lbrke','\u298F':'lbrksld', '\u298D':'lbrkslu','\u013E':'lcaron','\u013C':'lcedil','\u043B':'lcy','\u2936':'ldca', '\u2967':'ldrdhar','\u294B':'ldrushar','\u21B2':'ldsh','\u2264':'le','\u21C7':'llarr', '\u22CB':'lthree','\u2AA8':'lescc','\u2A7F':'lesdot','\u2A81':'lesdoto','\u2A83':'lesdotor', '\u2A93':'lesges','\u22D6':'ltdot','\u297C':'lfisht','\u2A91':'lgE','\u296A':'lharul', '\u2584':'lhblk','\u0459':'ljcy','\u296B':'llhard','\u25FA':'lltri','\u0140':'lmidot', '\u23B0':'lmoust','\u2268':'lnE','\u2A89':'lnap','\u2A87':'lne','\u22E6':'lnsim','\u27EC':'loang', '\u21FD':'loarr','\u27FC':'xmap','\u21AC':'rarrlp','\u2985':'lopar','\u2A2D':'loplus', '\u2A34':'lotimes','\u2217':'lowast','\u25CA':'loz','(':'lpar','\u2993':'lparlt','\u296D':'lrhard', '\u200E':'lrm','\u22BF':'lrtri','\u2039':'lsaquo','\u2A8D':'lsime','\u2A8F':'lsimg','\u201A':'sbquo', '\u0142':'lstrok','\u2AA6':'ltcc','\u2A79':'ltcir','\u22C9':'ltimes','\u2976':'ltlarr', '\u2A7B':'ltquest','\u2996':'ltrPar','\u25C3':'ltri','\u294A':'lurdshar','\u2966':'luruhar', '\u223A':'mDDot','\xAF':'macr','\u2642':'male','\u2720':'malt','\u25AE':'marker','\u2A29':'mcomma', '\u043C':'mcy','\u2014':'mdash','\u2127':'mho','\xB5':'micro','\u2AF0':'midcir','\u2212':'minus', '\u2A2A':'minusdu','\u2ADB':'mlcp','\u22A7':'models','\u03BC':'mu','\u22B8':'mumap','\u21CD':'nlArr', '\u21CE':'nhArr','\u21CF':'nrArr','\u22AF':'nVDash','\u22AE':'nVdash','\u0144':'nacute', '\u0149':'napos','\u266E':'natur','\u2A43':'ncap','\u0148':'ncaron','\u0146':'ncedil', '\u2A42':'ncup','\u043D':'ncy','\u2013':'ndash','\u21D7':'neArr','\u2924':'nearhk','\u2928':'toea', '\u21AE':'nharr','\u2AF2':'nhpar','\u22FC':'nis','\u22FA':'nisd','\u045A':'njcy','\u219A':'nlarr', '\u2025':'nldr','\xAC':'not','\u22F7':'notinvb','\u22F6':'notinvc','\u22FE':'notnivb', '\u22FD':'notnivc','\u2A14':'npolint','\u219B':'nrarr','\u2284':'nsub','\u2285':'nsup', '\xF1':'ntilde','\u03BD':'nu','#':'num','\u2116':'numero','\u2007':'numsp','\u22AD':'nvDash', '\u2904':'nvHarr','\u22AC':'nvdash','\u29DE':'nvinfin','\u2902':'nvlArr','\u2903':'nvrArr', '\u21D6':'nwArr','\u2923':'nwarhk','\u2927':'nwnear','\xF3':'oacute','\xF4':'ocirc','\u043E':'ocy', '\u0151':'odblac','\u2A38':'odiv','\u29BC':'odsold','\u0153':'oelig','\u29BF':'ofcir', '\u02DB':'ogon','\xF2':'ograve','\u29C1':'ogt','\u29B5':'ohbar','\u29BE':'olcir','\u29BB':'olcross', '\u29C0':'olt','\u014D':'omacr','\u03C9':'omega','\u03BF':'omicron','\u29B6':'omid','\u29B7':'opar', '\u29B9':'operp','\u2228':'or','\u2A5D':'ord','\u2134':'oscr','\xAA':'ordf','\xBA':'ordm', '\u22B6':'origof','\u2A56':'oror','\u2A57':'orslope','\u2A5B':'orv','\xF8':'oslash','\u2298':'osol', '\xF5':'otilde','\u2A36':'otimesas','\xF6':'ouml','\u233D':'ovbar','\xB6':'para','\u2AF3':'parsim', '\u2AFD':'parsl','\u043F':'pcy','%':'percnt','.':'period','\u2030':'permil','\u2031':'pertenk', '\u03C6':'phi','\u03D5':'phiv','\u260E':'phone','\u03C0':'pi','\u03D6':'piv','\u210E':'planckh', '+':'plus','\u2A23':'plusacir','\u2A22':'pluscir','\u2A25':'plusdu','\u2A72':'pluse', '\u2A26':'plussim','\u2A27':'plustwo','\u2A15':'pointint','\xA3':'pound','\u2AB3':'prE', '\u2AB7':'prap','\u2AB9':'prnap','\u2AB5':'prnE','\u22E8':'prnsim','\u2032':'prime', '\u232E':'profalar','\u2312':'profline','\u2313':'profsurf','\u22B0':'prurel','\u03C8':'psi', '\u2008':'puncsp','\u2057':'qprime','\u2A16':'quatint','?':'quest','\u291C':'rAtail','\u2964':'rHar', '\u0155':'racute','\u29B3':'raemptyv','\u2992':'rangd','\u29A5':'range','\xBB':'raquo', '\u2975':'rarrap','\u2920':'rarrbfs','\u2933':'rarrc','\u291E':'rarrfs','\u2945':'rarrpl', '\u2974':'rarrsim','\u21A3':'rarrtl','\u219D':'rarrw','\u291A':'ratail','\u2236':'ratio', '\u2773':'rbbrk','}':'rcub',']':'rsqb','\u298C':'rbrke','\u298E':'rbrksld','\u2990':'rbrkslu', '\u0159':'rcaron','\u0157':'rcedil','\u0440':'rcy','\u2937':'rdca','\u2969':'rdldhar', '\u21B3':'rdsh','\u25AD':'rect','\u297D':'rfisht','\u296C':'rharul','\u03C1':'rho','\u03F1':'rhov', '\u21C9':'rrarr','\u22CC':'rthree','\u02DA':'ring','\u200F':'rlm','\u23B1':'rmoust','\u2AEE':'rnmid', '\u27ED':'roang','\u21FE':'roarr','\u2986':'ropar','\u2A2E':'roplus','\u2A35':'rotimes',')':'rpar', '\u2994':'rpargt','\u2A12':'rppolint','\u203A':'rsaquo','\u22CA':'rtimes','\u25B9':'rtri', '\u29CE':'rtriltri','\u2968':'ruluhar','\u211E':'rx','\u015B':'sacute','\u2AB4':'scE', '\u2AB8':'scap','\u0161':'scaron','\u015F':'scedil','\u015D':'scirc','\u2AB6':'scnE', '\u2ABA':'scnap','\u22E9':'scnsim','\u2A13':'scpolint','\u0441':'scy','\u22C5':'sdot', '\u2A66':'sdote','\u21D8':'seArr','\xA7':'sect',';':'semi','\u2929':'tosa','\u2736':'sext', '\u266F':'sharp','\u0449':'shchcy','\u0448':'shcy','\xAD':'shy','\u03C3':'sigma','\u03C2':'sigmaf', '\u2A6A':'simdot','\u2A9E':'simg','\u2AA0':'simgE','\u2A9D':'siml','\u2A9F':'simlE','\u2246':'simne', '\u2A24':'simplus','\u2972':'simrarr','\u2A33':'smashp','\u29E4':'smeparsl','\u2323':'smile', '\u2AAA':'smt','\u2AAC':'smte','\u044C':'softcy','/':'sol','\u29C4':'solb','\u233F':'solbar', '\u2660':'spades','\u2606':'star','\u2282':'sub','\u2AC5':'subE','\u2ABD':'subdot', '\u2AC3':'subedot','\u2AC1':'submult','\u2ACB':'subnE','\u228A':'subne','\u2ABF':'subplus', '\u2979':'subrarr','\u2AC7':'subsim','\u2AD5':'subsub','\u2AD3':'subsup','\u266A':'sung', '\u2AC6':'supE','\u2ABE':'supdot','\u2AD8':'supdsub','\u2AC4':'supedot','\u27C9':'suphsol', '\u2AD7':'suphsub','\u297B':'suplarr','\u2AC2':'supmult','\u2ACC':'supnE','\u228B':'supne', '\u2AC0':'supplus','\u2AC8':'supsim','\u2AD4':'supsub','\u2AD6':'supsup','\u21D9':'swArr', '\u292A':'swnwar','\xDF':'szlig','\u2316':'target','\u03C4':'tau','\u0165':'tcaron', '\u0163':'tcedil','\u0442':'tcy','\u2315':'telrec','\u03B8':'theta','\u03D1':'thetav','\xFE':'thorn', '\xD7':'times','\u2A31':'timesbar','\u2A30':'timesd','\u2336':'topbot','\u2AF1':'topcir', '\u2ADA':'topfork','\u2034':'tprime','\u25B5':'utri','\u225C':'trie','\u25EC':'tridot', '\u2A3A':'triminus','\u2A39':'triplus','\u29CD':'trisb','\u2A3B':'tritime','\u23E2':'trpezium', '\u0446':'tscy','\u045B':'tshcy','\u0167':'tstrok','\u2963':'uHar','\xFA':'uacute','\u045E':'ubrcy', '\u016D':'ubreve','\xFB':'ucirc','\u0443':'ucy','\u0171':'udblac','\u297E':'ufisht','\xF9':'ugrave', '\u2580':'uhblk','\u231C':'ulcorn','\u230F':'ulcrop','\u25F8':'ultri','\u016B':'umacr', '\u0173':'uogon','\u03C5':'upsi','\u21C8':'uuarr','\u231D':'urcorn','\u230E':'urcrop', '\u016F':'uring','\u25F9':'urtri','\u22F0':'utdot','\u0169':'utilde','\xFC':'uuml', '\u29A7':'uwangle','\u2AE8':'vBar','\u2AE9':'vBarv','\u299C':'vangrt','\u0432':'vcy', '\u22BB':'veebar','\u225A':'veeeq','\u22EE':'vellip','\u299A':'vzigzag','\u0175':'wcirc', '\u2A5F':'wedbar','\u2259':'wedgeq','\u2118':'wp','\u03BE':'xi','\u22FB':'xnis','\xFD':'yacute', '\u044F':'yacy','\u0177':'ycirc','\u044B':'ycy','\xA5':'yen','\u0457':'yicy','\u044E':'yucy', '\xFF':'yuml','\u017A':'zacute','\u017E':'zcaron','\u0437':'zcy','\u017C':'zdot','\u03B6':'zeta', '\u0436':'zhcy','\u21DD':'zigrarr','\u200D':'zwj','\u200C':'zwnj', }; function toAlphaEntityReference(c) { var ent = ALPHA_ENTITY_REFERENCES[c]; if (ent) { return "&" + ent + ";"; } return null; } function escapeTildes(tildes, offset, string, ctx, opts) { if (!opts.strikethrough) { return tildes; } if (!opts.strikethrough.optimizeForDoubleTilde) { return tildes.replace(/./g, '\\$&'); } var atStart = (!ctx || ctx.atStart) && offset === 0; var atEnd = (!ctx || ctx.atEnd) && offset + tildes.length >= string.length; var lead = ''; var mid = tildes; var trail = ''; if (atStart && mid.length > 0) { lead = "\\" + mid.charAt(0); mid = mid.substring(1); } if (atEnd && mid.length > 0) { trail = "\\" + mid.charAt(mid.length - 1); mid = mid.slice(0, -1); } if (mid.length === 2) { mid = "\\" + mid.charAt(0) + mid.substring(1); } return "" + lead + mid + trail; } var LINK_ESCAPE_RE = new RegExp("([_*<>[\\]]|" + entityAmpersandReStr + ")|(~+)", 'g'); var ExtWebAutolinkTransformers = function () { function ExtWebAutolinkTransformers(ctx, opts) { this.ctx = ctx; this.opts = opts; } var _proto = ExtWebAutolinkTransformers.prototype; _proto.keep = function keep(link, trail) { return "" + link + trail; }; _proto.commonmark = function commonmark(link, trail) { var outLink = link.replace(entityAmpersandsRe, '&amp;'); var addScheme = this.ctx.scheme ? '' : 'http://'; this.ctx.mctx.skip(-trail.length); return "<" + addScheme + outLink + ">"; }; _proto.entities = function entities(link) { return "" + link + this.ctx.entityEncodedTrail; }; _proto.breakup = function breakup(link, trail) { this.ctx.unterminatedEntity = false; var giveBack = link.length - this.ctx.linkStart.length + trail.length; this.ctx.mctx.skip(-giveBack); return "" + this.ctx.linkStart + this.opts.extAutolink.breaker; }; _proto.breakafter = function breakafter(link, trail) { this.ctx.unterminatedEntity = false; this.ctx.mctx.skip(-trail.length); return "" + link + this.opts.extAutolink.breaker; }; _proto.backslashEscape = function backslashEscape(str) { var _this = this; return str.replace(LINK_ESCAPE_RE, function (m, single, tildes, offset, string) { if (single) { return "\\" + single; } if (tildes) { return escapeTildes(tildes, offset, string, _this.ctx, _this.opts); } return m; }); }; return ExtWebAutolinkTransformers; }(); var ENT_ENC_RE = /(^;)|([<>])|([()])|([^?!.,:"'])/g; var ExtWebAutolinkRenderer = function () { function ExtWebAutolinkRenderer(link, trail, ctx, opts) { this.link = link; this.trail = trail; this.ctx = ctx; this.opts = opts; this.ctx.wouldConfuseEntity = trail.startsWith(';') && /&[a-z]+$/i.test(link); } var _proto = ExtWebAutolinkRenderer.prototype; _proto.pickTransformer = function pickTransformer(t) { var _this = this; if (this.ctx.scheme && this.opts.extAutolink.breakUrl) { return t.breakup; } if (this.ctx.www && this.opts.extAutolink.breakWww) { return t.breakup; } if (!this.ctx.forceDelimiting && !this.ctx.wouldConfuseEntity) { this.ctx.backslashEscapedTrail = t.backslashEscape(this.trail); if (this.ctx.backslashEscapedTrail === this.trail) { return t.keep; } } var allowed = { breakup: true, breakafter: true }; var considered = {}; if (this.ctx.scheme || this.opts.extAutolink.allowAddHttpScheme) { allowed.commonmark = !linkForbiddenRe.test(this.link); } if (!this.ctx.forceDelimiting && !/[~a-z0-9]/i.test(this.trail)) { considered.entities = function () { return _this.tryEntityEncodeTrail(); }; } for (var i = 0; i < this.opts.extAutolink.allowedTransformations.length; i++) { var picked = this.opts.extAutolink.allowedTransformations[i]; if (allowed[picked]) { return t[picked]; } if (considered[picked] && considered[picked]()) { return t[picked]; } } return t.breakafter; }; _proto.tryEntityEncodeTrail = function tryEntityEncodeTrail() { var _this2 = this; var encodePar = false; var success = true; var enc = this.trail.replace(ENT_ENC_RE, function (m, semi, angle, par, other) { if (semi) { return _this2.ctx.wouldConfuseEntity ? toAlphaEntityReference(semi) : semi; } if (angle) { encodePar = true; return toAlphaEntityReference(angle); } if (par) { return encodePar ? toAlphaEntityReference(par) : par; } if (other) { var entref = toAlphaEntityReference(other); if (entref) { return entref; } success = false; } return m; }); if (success) { this.ctx.entityEncodedTrail = enc; } return success; }; _proto.render = function render() { var t = new ExtWebAutolinkTransformers(this.ctx, this.opts); return this.pickTransformer(t).call(t, this.link, this.trail); }; return ExtWebAutolinkRenderer; }(); function escapePipesIfInTable(str) { return this.escape.opts.table && this.gfmContext.inTable ? str.replace(/\|/g, '\\|') : str; } function wrapPostprocessor(processFn, postProcessFn) { return function wrapper() { return postProcessFn.call(this, processFn.apply(this, arguments)); }; } var defaultOpts$1 = Object.freeze({ breakUrl: false, breakWww: false, breaker: '<!-- -->', allowedTransformations: ['entities', 'commonmark'], allowAddHttpScheme: false, inImage: false }); var shouldProcess = function shouldProcess(_ref) { var gfmContext = _ref.gfmContext, opts = _ref.escape.opts; return !gfmContext.inLink && (!gfmContext.inImage || opts.autolink.inImage); }; var EXT_WEB_AUTOLINK_RE = function () { var MC_SD = "[^" + C.space + C.punct + "]"; var MC_D3 = "(?:" + MC_SD + "|[-_])"; var MC_D12 = "(?:" + MC_SD + "|-)"; var M_D = "(?![-_.<>])(?:(?:" + MC_D3 + "*\\.)*" + MC_D12 + "*\\.)?" + MC_D12 + "*(?!" + MC_D3 + ")"; var MC_AFTER_D = '[^ \\t\\n\\r]'; var M_URL = autolinkedSchemeReStr; var M_WWW = autolinkedWwwReStr; var M_BEFORE = "(?:\\b|_)(?=" + M_URL + ")|(?:^|[" + C.space + "*_(]|~+)(?=" + M_WWW + ")"; return new RegExp("(" + M_BEFORE + ")(((" + M_URL + ")|(" + M_WWW + "))" + M_D + MC_AFTER_D + "*)"); }(); var EXT_EMAIL_AUTOLINK_RE = /[-+.\w]+@(?:[-\w]+\.)+[-\w]*[^\W_](?![-@\w])/; function processExtWebAutolink(mctx) { var _mctx$match = mctx.match, m = _mctx$match[0], before = _mctx$match[1], linkMatch = _mctx$match[2], linkStart = _mctx$match[3], scheme = _mctx$match[4], www = _mctx$match[5]; var outBefore = before ? "\\" + before : ''; if (!shouldProcess(this)) { mctx.jump(before.length + linkStart.length); return "" + outBefore + linkStart; } var trail = ''; var linkEnd = linkMatch.search(/[<>]/); var link = linkMatch; if (linkEnd >= 0) { trail = link.substring(linkEnd); link = link.substring(0, linkEnd); } var forceDelimiting = false; if (trail.length >= 6) { forceDelimiting = EXT_EMAIL_AUTOLINK_RE.test(trail) || EXT_WEB_AUTOLINK_RE.test(trail); } linkEnd = link.search(/[?!.,:*_~'";)]+$/i); if (linkEnd >= 0) { var popen = 0; var pclose = 0; for (var i = 0; i < link.length; i++) { switch (link.charAt(i)) { case '(': popen++; break; case ')': pclose++; if (i >= linkEnd && pclose <= popen) { linkEnd = i + 1; } break; } } trail = link.substring(linkEnd) + trail; link = link.substring(0, linkEnd); } var ctx = { mctx: mctx, scheme: scheme, www: www, linkStart: linkStart, atEnd: mctx.match.index + m.length >= mctx.match.input.length, forceDelimiting: forceDelimiting }; var renderer = new ExtWebAutolinkRenderer(link, trail, ctx, this.escape.opts); return "" + outBefore + renderer.render(); } var GFM_EMAIL_UNDERSCORES_RE = /([a-z\d]_+)(?=[a-z\d])|_/gi; function processExtEmailAutolink(mctx) { var _mctx$match2 = mctx.match, emailMatch = _mctx$match2[0]; if (!shouldProcess(this)) { var emailShred = emailMatch.match(/^.*?@/)[0]; mctx.jump(emailShred.length); return this.escape.escape(emailShred, this.gfmContext, this.metadata); } return emailMatch.replace(GFM_EMAIL_UNDERSCORES_RE, function (m, keep) { return keep ? m : "\\" + m; }); } function extAutolinkReplace() { if (!mergeOpts(this.opts, 'extAutolink', defaultOpts$1)) { return; } this.replaces.push([EXT_WEB_AUTOLINK_RE, wrapPostprocessor(processExtWebAutolink, escapePipesIfInTable), true]); this.replaces.push([EXT_EMAIL_AUTOLINK_RE, processExtEmailAutolink, true]); } var INLINE_RE = new RegExp(['[*_[\\]`<>]', '\\\\(?=[-!"#$%&\'()*+,./:;<=>?@\\[\\\\\\]^_`{|}~]|$)', entityAmpersandReStr].join('|')); var HARD_LINE_BREAK_RE = /([ ]{2})$/; function inlineReplace() { this.replaces.push([INLINE_RE, '\\$&']); this.replaces.push([HARD_LINE_BREAK_RE, '$1<!-- spaces -->']); } var LINK_DESTINATION_SPECIALS_RE = /[()<>]/; function renderEmptyLinkDestination(output) { return output.length > 0 ? output : '<>'; } function linkDestinationReplace() { this.replaces.push([LINK_DESTINATION_SPECIALS_RE, '\\$&']); this.postprocessors.unshift(renderEmptyLinkDestination); } function processLink(_ref) { var m = _ref[0]; return encodeURIComponent(m); } function linkReplace() { this.replaces.push([linkForbiddenRe, processLink]); } var DOUBLE_Q = '"'; var SINGLE_Q = '\''; var PAREN = '()'; var defaultOpts$2 = Object.freeze({ delimiters: [DOUBLE_Q, SINGLE_Q, PAREN], alwaysEscapeDelimiters: [] }); var LINK_TITLE_DELIMS_RE = /['"()]/g; var charDelims = { '"': DOUBLE_Q, '\'': SINGLE_Q, '(': PAREN, ')': PAREN }; var bestDelimiter = function bestDelimiter(str, opts) { if (!Array.isArray(opts.delimiters)) { return opts.delimiters; } if (opts.delimiters.length === 1) { return opts.delimiters[0]; } var m = str.match(LINK_TITLE_DELIMS_RE); if (!m) { return opts.delimiters[0]; } var e = {}; e[DOUBLE_Q] = 0; e[SINGLE_Q] = 0; e[PAREN] = 0; m.forEach(function (c) { e[charDelims[c]] += 1; }); opts.alwaysEscapeDelimiters.forEach(function (d) { e[DOUBLE_Q] += d === DOUBLE_Q ? 0 : e[d]; e[SINGLE_Q] += d === SINGLE_Q ? 0 : e[d]; e[PAREN] += d === PAREN ? 0 : e[d]; }); return opts.delimiters.reduce(function (best, d) { return e[d] < e[best] ? d : best; }); }; function scanDelimiters$1(input) { var x = this.metadata; var opts = this.escape.opts.linkTitle; x.delimiter = bestDelimiter(input, opts); if (x.delimiter === PAREN) { x.startDelimiter = '('; x.endDelimiter = ')'; } else { x.startDelimiter = x.delimiter; x.endDelimiter = x.delimiter; } var escaped = {}; escaped[x.delimiter] = true; opts.alwaysEscapeDelimiters.forEach(function (d) { escaped[d] = true; }); this.linkTitleEscapedDelimiters = escaped; return input; } function processLinkTitleDelim(_ref) { var _ref$match = _ref.match, c = _ref$match[0]; if (this.linkTitleEscapedDelimiters[charDelims[c]]) { return "\\" + c; } return c; } function linkTitleReplace() { if (!mergeOpts(this.opts, 'linkTitle', defaultOpts$2, true)) { return; } this.preprocessors.push(scanDelimiters$1); this.replaces.push([LINK_TITLE_DELIMS_RE, processLinkTitleDelim, true]); } var defaultOpts$3 = Object.freeze({ optimizeForDoubleTilde: false }); var STRIKETHROUGH_RE = /~+/; function processStrikethrough(_ref) { var match = _ref.match; return escapeTildes(match[0], match.index, match.input, null, this.escape.opts); } function strikethroughReplace() { if (!mergeOpts(this.opts, 'strikethrough', defaultOpts$3)) { return; } this.replaces.push([STRIKETHROUGH_RE, processStrikethrough, true]); } var defaultOpts$4 = true; var TABLE_DELIMITER_ROW_RE = function () { var SP = '[ \\t]*'; var CELL = SP + ":?-+:?" + SP; var P = '[|]'; var L_OR_BOTH = SP + "(?:" + P + CELL + ")+" + P + "?"; var R_OR_NONE = CELL + "(?=" + P + ")(?:" + P + CELL + ")*" + P + "?"; return new RegExp("^(?:" + L_OR_BOTH + "|" + R_OR_NONE + ")" + SP + "$"); }(); function processTableDelimiterRow(_ref) { var _ref$match = _ref.match, delimiterRow = _ref$match[0]; return delimiterRow.replace(/\|/g, '\\|'); } function tableDelimiterRowReplace() { if (!mergeOpts(this.opts, 'table', defaultOpts$4)) { return; } this.replaces.push([TABLE_DELIMITER_ROW_RE, processTableDelimiterRow, true]); } var PIPE_RE = /\|/; function tablePipeReplace() { if (!this.opts.table) { return; } this.replaces.push([PIPE_RE, escapePipesIfInTable]); } var gfmSetupDefault = function gfmSetupDefault(s) { return [[codeSpanReplace, s.name === CodeSpanSyntax.name], [extAutolinkReplace, s.inlinesInterpreted && !s.isLink], [strikethroughReplace, s.inlinesInterpreted], [tableDelimiterRowReplace, s.blocksInterpreted], [blockReplace, s.blocksInterpreted], [tablePipeReplace, true], [linkDestinationReplace, s.name === LinkDestinationSyntax.name], [linkTitleReplace, s.name === LinkTitleSyntax.name], [linkReplace, s.isLink], [entityEntityReplace, s.isLink], [entityBackslashReplace, s.inlinesInterpreted], [emphasisNonDelimitersReplace, s.inlinesInterpreted], [inlineReplace, s.inlinesInterpreted]]; }; function applyProcessors(input, processors) { var _this = this; return processors.reduce(function (str, proc) { return proc.call(_this, str); }, input); } var GfmEscape = function () { function GfmEscape(opts, syntax, setup) { var _this = this; if (syntax === void 0) { syntax = Syntax.text; } if (setup === void 0) { setup = GfmEscape.defaultSetup; } this.syntax = syntax; this.opts = opts ? _extends({}, opts) : {}; this.replaces = []; this.preprocessors = []; this.postprocessors = []; setup(syntax).forEach(function (_ref) { var replace = _ref[0], enabled = _ref[1]; if (enabled) { replace.call(_this); } }); this.replacer = new UnionReplacer(this.replaces, 'gm'); } var _proto = GfmEscape.prototype; _proto.escape = function escape(input, gfmContext, metadata) { if (gfmContext === void 0) { gfmContext = {}; } if (metadata === void 0) { metadata = {}; } var escapeCtx = { escape: this, gfmContext: gfmContext, metadata: metadata }; var str = applyProcessors.call(escapeCtx, input, this.preprocessors); str = this.replacer.replace(str, escapeCtx); return applyProcessors.call(escapeCtx, str, this.postprocessors); }; return GfmEscape; }(); GfmEscape.Syntax = Syntax; GfmEscape.defaultSetup = gfmSetupDefault; module.exports = GfmEscape;