marked-typograf
Version:
marked extension for typograf
4 lines • 171 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../node_modules/typograf/dist/typograf.es.mjs", "../src/index.js"],
"sourcesContent": ["/*! typograf | \u00A9 2025 Denis Seleznev | MIT License | https://github.com/typograf/typograf */\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\n// http://www.w3.org/TR/html4/sgml/entities\nvar visibleEntities = [\n ['iexcl', 161],\n ['cent', 162],\n ['pound', 163],\n ['curren', 164],\n ['yen', 165],\n ['brvbar', 166],\n ['sect', 167],\n ['uml', 168],\n ['copy', 169],\n ['ordf', 170],\n ['laquo', 171],\n ['not', 172],\n ['reg', 174],\n ['macr', 175],\n ['deg', 176],\n ['plusmn', 177],\n ['sup2', 178],\n ['sup3', 179],\n ['acute', 180],\n ['micro', 181],\n ['para', 182],\n ['middot', 183],\n ['cedil', 184],\n ['sup1', 185],\n ['ordm', 186],\n ['raquo', 187],\n ['frac14', 188],\n ['frac12', 189],\n ['frac34', 190],\n ['iquest', 191],\n ['Agrave', 192],\n ['Aacute', 193],\n ['Acirc', 194],\n ['Atilde', 195],\n ['Auml', 196],\n ['Aring', 197],\n ['AElig', 198],\n ['Ccedil', 199],\n ['Egrave', 200],\n ['Eacute', 201],\n ['Ecirc', 202],\n ['Euml', 203],\n ['Igrave', 204],\n ['Iacute', 205],\n ['Icirc', 206],\n ['Iuml', 207],\n ['ETH', 208],\n ['Ntilde', 209],\n ['Ograve', 210],\n ['Oacute', 211],\n ['Ocirc', 212],\n ['Otilde', 213],\n ['Ouml', 214],\n ['times', 215],\n ['Oslash', 216],\n ['Ugrave', 217],\n ['Uacute', 218],\n ['Ucirc', 219],\n ['Uuml', 220],\n ['Yacute', 221],\n ['THORN', 222],\n ['szlig', 223],\n ['agrave', 224],\n ['aacute', 225],\n ['acirc', 226],\n ['atilde', 227],\n ['auml', 228],\n ['aring', 229],\n ['aelig', 230],\n ['ccedil', 231],\n ['egrave', 232],\n ['eacute', 233],\n ['ecirc', 234],\n ['euml', 235],\n ['igrave', 236],\n ['iacute', 237],\n ['icirc', 238],\n ['iuml', 239],\n ['eth', 240],\n ['ntilde', 241],\n ['ograve', 242],\n ['oacute', 243],\n ['ocirc', 244],\n ['otilde', 245],\n ['ouml', 246],\n ['divide', 247],\n ['oslash', 248],\n ['ugrave', 249],\n ['uacute', 250],\n ['ucirc', 251],\n ['uuml', 252],\n ['yacute', 253],\n ['thorn', 254],\n ['yuml', 255],\n ['fnof', 402],\n ['Alpha', 913],\n ['Beta', 914],\n ['Gamma', 915],\n ['Delta', 916],\n ['Epsilon', 917],\n ['Zeta', 918],\n ['Eta', 919],\n ['Theta', 920],\n ['Iota', 921],\n ['Kappa', 922],\n ['Lambda', 923],\n ['Mu', 924],\n ['Nu', 925],\n ['Xi', 926],\n ['Omicron', 927],\n ['Pi', 928],\n ['Rho', 929],\n ['Sigma', 931],\n ['Tau', 932],\n ['Upsilon', 933],\n ['Phi', 934],\n ['Chi', 935],\n ['Psi', 936],\n ['Omega', 937],\n ['alpha', 945],\n ['beta', 946],\n ['gamma', 947],\n ['delta', 948],\n ['epsilon', 949],\n ['zeta', 950],\n ['eta', 951],\n ['theta', 952],\n ['iota', 953],\n ['kappa', 954],\n ['lambda', 955],\n ['mu', 956],\n ['nu', 957],\n ['xi', 958],\n ['omicron', 959],\n ['pi', 960],\n ['rho', 961],\n ['sigmaf', 962],\n ['sigma', 963],\n ['tau', 964],\n ['upsilon', 965],\n ['phi', 966],\n ['chi', 967],\n ['psi', 968],\n ['omega', 969],\n ['thetasym', 977],\n ['upsih', 978],\n ['piv', 982],\n ['bull', 8226],\n ['hellip', 8230],\n ['prime', 8242],\n ['Prime', 8243],\n ['oline', 8254],\n ['frasl', 8260],\n ['weierp', 8472],\n ['image', 8465],\n ['real', 8476],\n ['trade', 8482],\n ['alefsym', 8501],\n ['larr', 8592],\n ['uarr', 8593],\n ['rarr', 8594],\n ['darr', 8595],\n ['harr', 8596],\n ['crarr', 8629],\n ['lArr', 8656],\n ['uArr', 8657],\n ['rArr', 8658],\n ['dArr', 8659],\n ['hArr', 8660],\n ['forall', 8704],\n ['part', 8706],\n ['exist', 8707],\n ['empty', 8709],\n ['nabla', 8711],\n ['isin', 8712],\n ['notin', 8713],\n ['ni', 8715],\n ['prod', 8719],\n ['sum', 8721],\n ['minus', 8722],\n ['lowast', 8727],\n ['radic', 8730],\n ['prop', 8733],\n ['infin', 8734],\n ['ang', 8736],\n ['and', 8743],\n ['or', 8744],\n ['cap', 8745],\n ['cup', 8746],\n ['int', 8747],\n ['there4', 8756],\n ['sim', 8764],\n ['cong', 8773],\n ['asymp', 8776],\n ['ne', 8800],\n ['equiv', 8801],\n ['le', 8804],\n ['ge', 8805],\n ['sub', 8834],\n ['sup', 8835],\n ['nsub', 8836],\n ['sube', 8838],\n ['supe', 8839],\n ['oplus', 8853],\n ['otimes', 8855],\n ['perp', 8869],\n ['sdot', 8901],\n ['lceil', 8968],\n ['rceil', 8969],\n ['lfloor', 8970],\n ['rfloor', 8971],\n ['lang', 9001],\n ['rang', 9002],\n ['spades', 9824],\n ['clubs', 9827],\n ['hearts', 9829],\n ['diams', 9830],\n ['loz', 9674],\n ['OElig', 338],\n ['oelig', 339],\n ['Scaron', 352],\n ['scaron', 353],\n ['Yuml', 376],\n ['circ', 710],\n ['tilde', 732],\n ['ndash', 8211],\n ['mdash', 8212],\n ['lsquo', 8216],\n ['rsquo', 8217],\n ['sbquo', 8218],\n ['ldquo', 8220],\n ['rdquo', 8221],\n ['bdquo', 8222],\n ['dagger', 8224],\n ['Dagger', 8225],\n ['permil', 8240],\n ['lsaquo', 8249],\n ['rsaquo', 8250],\n ['euro', 8364],\n ['NestedGreaterGreater', 8811],\n ['NestedLessLess', 8810]\n];\n\nvar invisibleEntities = [\n ['nbsp', 160],\n ['thinsp', 8201],\n ['ensp', 8194],\n ['emsp', 8195],\n ['shy', 173],\n ['zwnj', 8204],\n ['zwj', 8205],\n ['lrm', 8206],\n ['rlm', 8207]\n];\n\nvar HtmlEntities = /** @class */ (function () {\n function HtmlEntities() {\n var _this = this;\n this.entities = this.prepareEntities(__spreadArray(__spreadArray([], visibleEntities, true), invisibleEntities, true));\n this.entitiesByName = {};\n this.entitiesByNameEntity = {};\n this.entitiesByDigitEntity = {};\n this.entitiesByUtf = {};\n this.entities.forEach(function (entity) {\n _this.entitiesByName[entity.name] = entity;\n _this.entitiesByNameEntity[entity.nameEntity] = entity;\n _this.entitiesByDigitEntity[entity.digitEntity] = entity;\n _this.entitiesByUtf[entity.utf] = entity;\n });\n this.invisibleEntities = this.prepareEntities(invisibleEntities);\n }\n /**\n * Entities as name or digit to UTF-8.\n */\n HtmlEntities.prototype.toUtf = function (context) {\n var _this = this;\n if (context.text.search(/&#/) !== -1) {\n context.text = this.decHexToUtf(context.text);\n }\n if (context.text.search(/&[a-z]/i) !== -1) {\n // 2 - min length of entity without & and ;. Example: ⅅ\n // 31 - max length of entity without & and ;. Example: ∳\n context.text = context.text.replace(/&[a-z\\d]{2,31};/gi, function (key) {\n var entity = _this.entitiesByNameEntity[key];\n return entity ? entity.utf : key;\n });\n }\n };\n /**\n * Entities in decimal or hexadecimal form to UTF-8.\n */\n HtmlEntities.prototype.decHexToUtf = function (text) {\n return text\n .replace(/&#(\\d{1,6});/gi, function ($0, $1) {\n return String.fromCharCode(parseInt($1, 10));\n })\n .replace(/&#x([\\da-f]{1,6});/gi, function ($0, $1) {\n return String.fromCharCode(parseInt($1, 16));\n });\n };\n /**\n * Restore HTML entities in text.\n */\n HtmlEntities.prototype.restore = function (context) {\n var params = context.prefs.htmlEntity;\n var type = params.type;\n var entities = this.entities;\n if (type === 'name' || type === 'digit') {\n if (params.onlyInvisible || params.list) {\n entities = [];\n if (params.onlyInvisible) {\n entities = entities.concat(this.invisibleEntities);\n }\n if (params.list) {\n entities = entities.concat(this.prepareListParam(params.list));\n }\n }\n var entityType = type === 'name' ? 'nameEntity' : 'digitEntity';\n context.text = this.restoreEntitiesByIndex(context.text, entityType, entities);\n }\n };\n /**\n * Get a entity by utf using the type.\n */\n HtmlEntities.prototype.getByUtf = function (symbol, type) {\n var result;\n switch (type) {\n case 'digit':\n result = this.entitiesByDigitEntity[symbol];\n break;\n case 'name':\n result = this.entitiesByNameEntity[symbol];\n break;\n default:\n result = symbol;\n break;\n }\n return result;\n };\n HtmlEntities.prototype.prepareEntities = function (entities) {\n var result = [];\n entities.forEach(function (entity) {\n var name = entity[0], digit = entity[1];\n var utf = String.fromCharCode(digit);\n result.push({\n name: name,\n nameEntity: '&' + name + ';', // \n digitEntity: '&#' + digit + ';', //  \n utf: utf, // \\u00A0\n reName: new RegExp('&' + name + ';', 'g'),\n reUtf: new RegExp(utf, 'g')\n });\n });\n return result;\n };\n HtmlEntities.prototype.prepareListParam = function (list) {\n var _this = this;\n var result = [];\n list.forEach(function (name) {\n var entity = _this.entitiesByName[name];\n if (entity) {\n result.push(entity);\n }\n });\n return result;\n };\n HtmlEntities.prototype.restoreEntitiesByIndex = function (text, type, entities) {\n entities.forEach(function (entity) {\n text = text.replace(entity.reUtf, entity[type]);\n });\n return text;\n };\n return HtmlEntities;\n}());\nvar htmlEntities = new HtmlEntities();\n\nvar locales = [];\nfunction addLocale(locale) {\n var code = (locale || '').split('/')[0];\n if (code && code !== 'common' && !hasLocale(code)) {\n locales.push(code);\n locales.sort();\n }\n}\nfunction getLocales() {\n return locales;\n}\nfunction hasLocale(locale) {\n return locale === 'common' || locales.indexOf(locale) !== -1;\n}\nfunction prepareLocale(locale1, locale2) {\n var locale = locale1 || locale2;\n if (!locale) {\n return [];\n }\n return Array.isArray(locale) ? locale : [locale];\n}\nfunction checkLocales(locales) {\n if (!locales.length) {\n throw Error('Not defined the property \"locale\".');\n }\n locales.forEach(function (locale) {\n if (!hasLocale(locale)) {\n throw Error(\"\\\"\".concat(locale, \"\\\" is not supported locale.\"));\n }\n });\n}\n\nvar data$1 = {};\n/**\n * Get data for use in rules.\n */\nfunction getData(key) {\n return data$1[key];\n}\n/**\n * Set data for use in rules.\n */\nfunction setData(newData) {\n Object.keys(newData).forEach(function (key) {\n addLocale(key);\n data$1[key] = newData[key];\n });\n}\n\nvar inlineElements = [\n 'a',\n 'abbr',\n 'acronym',\n 'b',\n 'bdo',\n 'big',\n 'br',\n 'button',\n 'cite',\n 'code',\n 'dfn',\n 'em',\n 'i',\n 'img',\n 'input',\n 'kbd',\n 'label',\n 'map',\n 'object',\n 'q',\n 'samp',\n 'script',\n 'select',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'textarea',\n 'time',\n 'tt',\n 'var'\n];\n\nvar regExpUrl = new RegExp('(https?|file|ftp)://([a-zA-Z0-9/+-=%&:_.~?]+[a-zA-Z0-9#+]*)', 'g');\nvar regExpNumber = '\\\\d+([.,]\\\\d+)?';\nvar regExpDigit = /\\d/;\nfunction isDigit(symbol) {\n return symbol.search(regExpDigit) > -1;\n}\n\nvar privateLabel = '\\uF000';\nvar privateSeparateLabel = '\\uF001';\n\nvar SafeTags = /** @class */ (function () {\n function SafeTags() {\n this.groups = ['own', 'html', 'url'];\n this.hidden = {};\n this.counter = 0;\n var html = [\n ['<!--', '-->'],\n ['<!ENTITY', '>'],\n ['<!DOCTYPE', '>'],\n ['<\\\\?xml', '\\\\?>'],\n ['<!\\\\[CDATA\\\\[', '\\\\]\\\\]>']\n ];\n [\n 'code',\n 'kbd',\n 'object',\n 'pre',\n 'samp',\n 'script',\n 'style',\n 'var'\n ].forEach(function (tag) {\n html.push([\n \"<\".concat(tag, \"(\\\\s[^>]*?)?>\"),\n \"</\".concat(tag, \">\")\n ]);\n });\n this.tags = {\n own: [],\n html: html.map(this.prepareRegExp),\n url: [regExpUrl]\n };\n }\n /**\n * Add own safe tag.\n */\n SafeTags.prototype.add = function (tag) {\n this.tags.own.push(this.prepareRegExp(tag));\n };\n /**\n * Show safe tags.\n */\n SafeTags.prototype.show = function (context, group) {\n var reReplace = new RegExp(privateLabel + 'tf\\\\d+' + privateLabel, 'g');\n var reSearch = new RegExp(privateLabel + 'tf\\\\d');\n var replaceLabel = function (match) {\n return context.safeTags.hidden[group][match] || match;\n };\n for (var i = 0, len = this.tags[group].length; i < len; i++) {\n context.text = context.text.replace(reReplace, replaceLabel);\n if (context.text.search(reSearch) === -1) {\n break;\n }\n }\n };\n /**\n * Hide safe tags.\n */\n SafeTags.prototype.hide = function (context, group) {\n var _this = this;\n context.safeTags.hidden[group] = {};\n var pasteLabel = this.pasteLabel.bind(this, context, group);\n this.tags[group].forEach(function (tag) {\n context.text = context.text.replace(_this.prepareRegExp(tag), pasteLabel);\n });\n };\n /**\n * Hide HTML tags.\n */\n SafeTags.prototype.hideHTMLTags = function (context) {\n if (context.isHTML) {\n var pasteLabel = this.pasteLabel.bind(this, context, 'html');\n context.text = context.text\n .replace(/<\\/?[a-z][^]*?>/gi, pasteLabel) // Tags\n .replace(/<\\/?[a-z][^]*?>/gi, pasteLabel) // Escaping tags\n .replace(/&[gl]t;/gi, pasteLabel);\n }\n };\n /**\n * Get previous label.\n */\n SafeTags.prototype.getPrevLabel = function (text, position) {\n for (var i = position - 1; i >= 0; i--) {\n if (text[i] === privateLabel) {\n return text.slice(i, position + 1);\n }\n }\n return '';\n };\n SafeTags.prototype.getNextLabel = function (text, position) {\n for (var i = position + 1; i < text.length; i++) {\n if (text[i] === privateLabel) {\n return text.slice(position, i + 1);\n }\n }\n return '';\n };\n SafeTags.prototype.getTagByLabel = function (context, label) {\n var result = null;\n this.groups.some(function (group) {\n var value = context.safeTags.hidden[group][label];\n if (typeof value !== 'undefined') {\n result = {\n group: group,\n value: value\n };\n }\n return result;\n });\n return result;\n };\n SafeTags.prototype.getTagInfo = function (tag) {\n if (!tag) {\n return null;\n }\n var result = { group: tag.group };\n switch (tag.group) {\n case 'html':\n result.name = tag.value.split(/[<\\s>]/)[1];\n result.isInline = inlineElements.indexOf(result.name) > -1;\n result.isClosing = tag.value.search(/^<\\//) > -1;\n break;\n case 'url':\n result.isInline = true;\n break;\n case 'own':\n result.isInline = false;\n break;\n }\n return result;\n };\n SafeTags.prototype.pasteLabel = function (context, group, match) {\n var safeTags = context.safeTags;\n var key = privateLabel + 'tf' + safeTags.counter + privateLabel;\n safeTags.hidden[group][key] = match;\n safeTags.counter++;\n return key;\n };\n SafeTags.prototype.prepareRegExp = function (tag) {\n if (tag instanceof RegExp) {\n return tag;\n }\n var startTag = tag[0], endTag = tag[1], middle = tag[2];\n return new RegExp(startTag +\n (typeof middle === 'undefined' ? '[^]*?' : middle) +\n endTag, 'gi');\n };\n SafeTags.prototype.getPrevTagInfo = function (context, text, pos) {\n var prevLabel = this.getPrevLabel(text, pos - 1);\n if (prevLabel) {\n var prevTag = this.getTagByLabel(context, prevLabel);\n if (prevTag) {\n return this.getTagInfo(prevTag);\n }\n }\n return null;\n };\n SafeTags.prototype.getNextTagInfo = function (context, text, pos) {\n var nextLabel = this.getNextLabel(text, pos + 1);\n if (nextLabel) {\n var nextTag = this.getTagByLabel(context, nextLabel);\n if (nextTag) {\n return this.getTagInfo(nextTag);\n }\n }\n return null;\n };\n return SafeTags;\n}());\n\nfunction repeat(symbol, count) {\n var result = '';\n for (;;) {\n if ((count & 1) === 1) {\n result += symbol;\n }\n count >>>= 1;\n if (count === 0) {\n break;\n }\n symbol += symbol;\n }\n return result;\n}\nfunction replaceNbsp$1(text) {\n return text.replace(/\\u00A0/g, ' ');\n}\nfunction replace(text, re) {\n for (var i = 0; i < re.length; i++) {\n text = text.replace(re[i][0], re[i][1]);\n }\n return text;\n}\nfunction isHTML(text) {\n return text.search(/(<\\/?[a-z]|<!|&[lg]t;)/i) !== -1;\n}\nfunction removeCR(text) {\n return text.replace(/\\r\\n?/g, '\\n');\n}\nfunction fixLineEnding(text, type) {\n if (type === 'CRLF') { // Windows\n return text.replace(/\\n/g, '\\r\\n');\n }\n else if (type === 'CR') { // Mac\n return text.replace(/\\n/g, '\\r');\n }\n return text;\n}\n\n/**\n * Get a deep copy of a object.\n */\nfunction deepCopy(obj) {\n return typeof obj === 'object' ? JSON.parse(JSON.stringify(obj)) : obj;\n}\n\nvar groupIndexes = {\n symbols: 110,\n 'number': 150,\n space: 210,\n dash: 310,\n punctuation: 410,\n nbsp: 510,\n money: 710,\n date: 810,\n other: 910,\n optalign: 1010,\n typo: 1110,\n html: 1210\n};\n\nvar DEFAULT_RULE_INDEX = 0;\nvar DEFAULT_QUEUE_NAME = 'default';\nvar rules = [];\nvar innerRules = [];\nfunction addInnerRule(rule) {\n innerRules.push(prepareRule(rule));\n}\nfunction addRule(rule) {\n var preparedRule = prepareRule(rule);\n addLocale(preparedRule.locale);\n rules.push(preparedRule);\n}\nfunction sortRules(rules) {\n rules.sort(function (a, b) { return a.index > b.index ? 1 : -1; });\n}\nfunction getRules() {\n var result = __spreadArray([], rules, true);\n sortRules(result);\n return result;\n}\nfunction getInnerRules() {\n return __spreadArray([], innerRules, true);\n}\nfunction getRuleIndex(rule) {\n if (typeof rule.index === 'number') {\n return rule.index;\n }\n var _a = rule.name.split('/'), group = _a[1];\n var groupIndex = groupIndexes[group];\n if (typeof groupIndex === 'undefined') {\n groupIndex = DEFAULT_RULE_INDEX;\n }\n if (typeof rule.index === 'string') {\n return groupIndex + parseInt(rule.index, 10);\n }\n return groupIndex;\n}\nfunction prepareRule(rule) {\n var _a = rule.name.split('/'), locale = _a[0], group = _a[1], shortName = _a[2];\n var preparedRule = {\n name: rule.name,\n shortName: shortName,\n handler: rule.handler,\n queue: rule.queue || DEFAULT_QUEUE_NAME,\n enabled: rule.disabled === true ? false : true,\n locale: locale,\n group: group,\n index: getRuleIndex(rule),\n settings: rule.settings,\n live: rule.live,\n htmlAttrs: rule.htmlAttrs,\n };\n return preparedRule;\n}\n\nvar PACKAGE_VERSION = '7.4.2';\n\nfunction prepareHtmlEntity(htmlEntity) {\n var result = {\n type: (htmlEntity === null || htmlEntity === void 0 ? void 0 : htmlEntity.type) || 'default',\n list: htmlEntity === null || htmlEntity === void 0 ? void 0 : htmlEntity.list,\n onlyInvisible: Boolean(htmlEntity === null || htmlEntity === void 0 ? void 0 : htmlEntity.onlyInvisible),\n };\n return result;\n}\nfunction prepareLineEnding(lineEnding) {\n return lineEnding || 'LF';\n}\nfunction preparePrefs(prefs) {\n var result = {\n locale: prepareLocale(prefs.locale),\n lineEnding: prepareLineEnding(prefs.lineEnding),\n live: Boolean(prefs.live),\n ruleFilter: prefs.ruleFilter,\n enableRule: prefs.enableRule,\n disableRule: prefs.disableRule,\n processingSeparateParts: prefs.processingSeparateParts,\n htmlEntity: prepareHtmlEntity(prefs.htmlEntity),\n };\n return result;\n}\nfunction prepareContextPrefs(prefs, executePrefs) {\n var result = __assign({}, prefs);\n if (!executePrefs) {\n return result;\n }\n if ('locale' in executePrefs) {\n result.locale = prepareLocale(executePrefs.locale);\n }\n if ('htmlEntity' in executePrefs) {\n result.htmlEntity = prepareHtmlEntity(executePrefs.htmlEntity);\n }\n if ('lineEnding' in executePrefs) {\n result.lineEnding = prepareLineEnding(executePrefs.lineEnding);\n }\n if ('processingSeparateParts' in executePrefs) {\n result.processingSeparateParts = executePrefs.processingSeparateParts;\n }\n if ('ruleFilter' in executePrefs) {\n result.ruleFilter = executePrefs.ruleFilter;\n }\n return result;\n}\n\nvar Typograf = /** @class */ (function () {\n function Typograf(prefs) {\n var _this = this;\n this.rules = [];\n this.innerRules = [];\n this.rulesByQueues = {};\n this.innerRulesByQueues = {};\n this.separatePartsTags = [\n 'title',\n 'p',\n 'h[1-6]',\n 'select',\n 'legend',\n ];\n this.prefs = preparePrefs(prefs);\n checkLocales(this.prefs.locale);\n this.safeTags = new SafeTags();\n this.settings = {};\n this.enabledRules = {};\n this.innerRulesByQueues = {};\n this.innerRules = getInnerRules();\n this.innerRules.forEach(function (rule) {\n _this.innerRulesByQueues[rule.queue] = _this.innerRulesByQueues[rule.queue] || [];\n _this.innerRulesByQueues[rule.queue].push(rule);\n });\n this.rulesByQueues = {};\n this.rules = getRules();\n this.rules.forEach(function (rule) {\n _this.prepareRuleSettings(rule);\n _this.rulesByQueues[rule.queue] = _this.rulesByQueues[rule.queue] || [];\n _this.rulesByQueues[rule.queue].push(rule);\n });\n if (this.prefs.disableRule) {\n this.disableRule(this.prefs.disableRule);\n }\n if (this.prefs.enableRule) {\n this.enableRule(this.prefs.enableRule);\n }\n }\n Typograf.addRule = function (rule) {\n addRule(rule);\n };\n Typograf.addRules = function (rules) {\n var _this = this;\n rules.forEach(function (item) {\n _this.addRule(item);\n });\n };\n /**\n * Add internal rule.\n * Internal rules are executed before main rules.\n */\n Typograf.addInnerRule = function (rule) {\n addInnerRule(rule);\n };\n Typograf.addInnerRules = function (rules) {\n var _this = this;\n rules.forEach(function (item) {\n _this.addInnerRule(item);\n });\n };\n Typograf.getRule = function (ruleName) {\n var rule = null;\n var rules = getRules();\n rules.some(function (item) {\n if (item.name === ruleName) {\n rule = item;\n return true;\n }\n return false;\n });\n return rule;\n };\n Typograf.getRules = function () {\n return getRules();\n };\n Typograf.getInnerRules = function () {\n return getInnerRules();\n };\n Typograf.getLocales = function () {\n return getLocales();\n };\n Typograf.addLocale = function (locale) {\n addLocale(locale);\n };\n Typograf.hasLocale = function (locale) {\n return hasLocale(locale);\n };\n Typograf.setData = function (data) {\n setData(data);\n };\n Typograf.getData = function (key) {\n return getData(key);\n };\n /**\n * Execute typographical rules for text.\n */\n Typograf.prototype.execute = function (text, prefs) {\n text = '' + text;\n if (!text) {\n return '';\n }\n var contextPrefs = prepareContextPrefs(this.prefs, prefs);\n checkLocales(contextPrefs.locale);\n var context = this.prepareContext(text, contextPrefs);\n return this.process(context);\n };\n Typograf.prototype.getSetting = function (ruleName, setting) {\n return this.settings[ruleName] && this.settings[ruleName][setting];\n };\n Typograf.prototype.setSetting = function (ruleName, setting, value) {\n this.settings[ruleName] = this.settings[ruleName] || {};\n this.settings[ruleName][setting] = value;\n };\n Typograf.prototype.isEnabledRule = function (ruleName) {\n return this.enabledRules[ruleName] !== false;\n };\n Typograf.prototype.isDisabledRule = function (ruleName) {\n return !this.enabledRules[ruleName];\n };\n Typograf.prototype.enableRule = function (ruleName) {\n return this.enable(ruleName, true);\n };\n Typograf.prototype.disableRule = function (ruleName) {\n return this.enable(ruleName, false);\n };\n /**\n * Add safe tag.\n *\n * @example\n * // const typograf = new Typograf({ locale: 'ru' });\n * // typograf.addSafeTag('<mytag>', '</mytag>');\n * // typograf.addSafeTag('<mytag>', '</mytag>', '.*?');\n * // typograf.addSafeTag(/<mytag>.*?</mytag>/gi);\n */\n Typograf.prototype.addSafeTag = function (startTag, endTag, middle) {\n var tag = startTag instanceof RegExp ? startTag : [startTag, endTag, middle];\n this.safeTags.add(tag);\n };\n Typograf.prototype.prepareContext = function (text, prefs) {\n var context = {\n text: text,\n isHTML: isHTML(text),\n prefs: prefs,\n getData: function (key) {\n if (key === 'char') {\n return prefs.locale.map(function (item) {\n return getData(item + '/' + key);\n }).join('');\n }\n else {\n return getData(prefs.locale[0] + '/' + key);\n }\n },\n safeTags: this.safeTags,\n };\n return context;\n };\n Typograf.prototype.splitBySeparateParts = function (context) {\n if (!context.isHTML || context.prefs.processingSeparateParts === false) {\n return [context.text];\n }\n var text = [];\n var reTags = new RegExp('<(' + this.separatePartsTags.join('|') + ')(\\\\s[^>]*?)?>[^]*?</\\\\1>', 'gi');\n var position = 0;\n context.text.replace(reTags, function ($0, $1, $2, itemPosition) {\n if (position !== itemPosition) {\n text.push((position ? privateSeparateLabel : '') +\n context.text.slice(position, itemPosition) +\n privateSeparateLabel);\n }\n text.push($0);\n position = itemPosition + $0.length;\n return $0;\n });\n text.push(position ?\n (privateSeparateLabel + context.text.slice(position, context.text.length)) :\n context.text);\n return text;\n };\n Typograf.prototype.process = function (context) {\n var _this = this;\n context.text = removeCR(context.text);\n this.executeRules(context, 'start');\n this.safeTags.hide(context, 'own');\n this.executeRules(context, 'hide-safe-tags-own');\n this.safeTags.hide(context, 'html');\n this.executeRules(context, 'hide-safe-tags-html');\n var isRootHTML = context.isHTML;\n var re = new RegExp(privateSeparateLabel, 'g');\n context.text = this.splitBySeparateParts(context).map(function (item) {\n context.text = item;\n context.isHTML = isHTML(item);\n _this.safeTags.hideHTMLTags(context);\n _this.safeTags.hide(context, 'url');\n _this.executeRules(context, 'hide-safe-tags-url');\n _this.executeRules(context, 'hide-safe-tags');\n htmlEntities.toUtf(context);\n if (context.prefs.live) {\n context.text = replaceNbsp$1(context.text);\n }\n _this.executeRules(context, 'utf');\n _this.executeRules(context);\n htmlEntities.restore(context);\n _this.executeRules(context, 'html-entities');\n _this.safeTags.show(context, 'url');\n _this.executeRules(context, 'show-safe-tags-url');\n return context.text.replace(re, '');\n }).join('');\n context.isHTML = isRootHTML;\n this.safeTags.show(context, 'html');\n this.executeRules(context, 'show-safe-tags-html');\n this.safeTags.show(context, 'own');\n this.executeRules(context, 'show-safe-tags-own');\n this.executeRules(context, 'end');\n return fixLineEnding(context.text, context.prefs.lineEnding);\n };\n Typograf.prototype.executeRules = function (context, queue) {\n var _this = this;\n if (queue === void 0) { queue = DEFAULT_QUEUE_NAME; }\n var rules = this.rulesByQueues[queue];\n var innerRules = this.innerRulesByQueues[queue];\n if (innerRules) {\n innerRules.forEach(function (rule) {\n _this.ruleIterator(context, rule);\n });\n }\n if (rules) {\n rules.forEach(function (rule) {\n _this.ruleIterator(context, rule);\n });\n }\n };\n Typograf.prototype.ruleIterator = function (context, rule) {\n if ((context.prefs.live === true && rule.live === false) || (context.prefs.live === false && rule.live === true)) {\n return;\n }\n if ((rule.locale === 'common' || rule.locale === context.prefs.locale[0]) && this.isEnabledRule(rule.name)) {\n if (context.prefs.ruleFilter && !context.prefs.ruleFilter(rule)) {\n return;\n }\n if (this.onBeforeRule) {\n this.onBeforeRule(rule.name, context);\n }\n context.text = rule.handler.call(this, context.text, this.settings[rule.name], context);\n if (this.onAfterRule) {\n this.onAfterRule(rule.name, context);\n }\n }\n };\n Typograf.prototype.prepareRuleSettings = function (rule) {\n this.settings[rule.name] = deepCopy(rule.settings);\n this.enabledRules[rule.name] = rule.enabled;\n };\n Typograf.prototype.enable = function (ruleName, enabled) {\n var _this = this;\n if (Array.isArray(ruleName)) {\n ruleName.forEach(function (item) {\n _this.enableByMask(item, enabled);\n });\n }\n else {\n this.enableByMask(ruleName, enabled);\n }\n };\n Typograf.prototype.enableByMask = function (ruleName, enabled) {\n var _this = this;\n if (!ruleName) {\n return;\n }\n if (ruleName.search(/\\*/) !== -1) {\n var re_1 = new RegExp(ruleName\n .replace(/\\//g, '\\\\/')\n .replace(/\\*/g, '.*'));\n this.rules.forEach(function (el) {\n var name = el.name;\n if (re_1.test(name)) {\n _this.enabledRules[name] = enabled;\n }\n });\n }\n else {\n this.enabledRules[ruleName] = enabled;\n }\n };\n Typograf.groups = [];\n Typograf.titles = {};\n Typograf.version = PACKAGE_VERSION;\n return Typograf;\n}());\n\nvar common = {\n 'common/char': 'a-z',\n 'common/dash': '--?|\u2012|\u2013|\u2014', // --, ‒, &ndash, &mdash\n 'common/quote': '\u00AB\u2039\u00BB\u203A\u201E\u201C\u201F\u201D\"',\n};\n\nvar be = {\n 'be/char': '\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u044B\u044C\u044D\u044E\u044F\u0451\u0456\u045E\u0491',\n 'be/quote': {\n left: '\u00AB\u201C',\n right: '\u00BB\u201D',\n }\n};\n\nvar bg = {\n 'bg/char': '\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044C\u044E\u044F',\n 'bg/quote': {\n left: '\u201E\u2019',\n right: '\u201C\u2019',\n }\n};\n\nvar ca = {\n 'ca/char': 'abcdefghijlmnopqrstuvxyz\u00E0\u00E7\u00E8\u00E9\u00ED\u00EF\u00F2\u00F3\u00FA\u00FC',\n 'ca/quote': {\n left: '\u00AB\u201C',\n right: '\u00BB\u201D',\n }\n};\n\nvar cs = {\n 'cs/char': 'a-z\u00E1\u00E9\u00ED\u00F3\u00FA\u00FD\u010D\u010F\u011B\u0148\u0159\u0161\u0165\u016F\u017E',\n 'cs/quote': {\n left: '\u201E\u201A',\n right: '\u201C\u2018',\n }\n};\n\nvar da = {\n 'da/char': 'a-z\u00E5\u00E6\u00F8',\n 'da/quote': {\n left: '\u00BB\u203A',\n right: '\u00AB\u2039',\n }\n};\n\nvar de = {\n 'de/char': 'a-z\u00DF\u00E4\u00F6\u00FC',\n 'de/quote': {\n left: '\u201E\u201A',\n right: '\u201C\u2018',\n }\n};\n\nvar el = {\n 'el/char': '\u0390\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\u03F2\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D',\n 'el/quote': {\n left: '\u00AB\u201C',\n right: '\u00BB\u201D',\n }\n};\n\nvar enGB = {\n 'en-GB/char': 'a-z',\n 'en-GB/quote': {\n left: '\u2018\u201C',\n right: '\u2019\u201D',\n }\n};\n\nvar enUS = {\n 'en-US/char': 'a-z',\n 'en-US/quote': {\n left: '\u201C\u2018',\n right: '\u201D\u2019',\n },\n 'en-US/shortWord': 'a|an|and|as|at|bar|but|by|for|if|in|nor|not|of|off|on|or|out|per|pro|so|the|to|up|via|yet',\n};\n\nvar eo = {\n 'eo/char': 'abcdefghijklmnoprstuvz\u0109\u011D\u0125\u0135\u015D\u016D',\n 'eo/quote': {\n left: '\u201C\u2018',\n right: '\u201D\u2019',\n }\n};\n\nvar es = {\n 'es/char': 'a-z\u00E1\u00E9\u00ED\u00F1\u00F3\u00FA\u00FC',\n 'es/quote': {\n left: '\u00AB\u201C',\n right: '\u00BB\u201D',\n }\n};\n\nvar et = {\n 'et/char': 'abdefghijklmnoprstuvz\u00E4\u00F5\u00F6\u00FC\u0161\u017E',\n 'et/quote': {\n left: '\u201E\u00AB',\n right: '\u201C\u00BB',\n }\n};\n\nvar fi = {\n 'fi/char': 'abcdefghijklmnopqrstuvy\u00F6\u00E4\u00E5',\n 'fi/quote': {\n left: '\u201D\u2019',\n right: '\u201D\u2019',\n }\n};\n\nvar fr = {\n 'fr/char': 'a-z\u00E0\u00E2\u00E7\u00E8\u00E9\u00EA\u00EB\u00EE\u00EF\u00F4\u00FB\u00FC\u0153\u00E6',\n 'fr/quote': {\n left: '\u00AB\u2039',\n right: '\u00BB\u203A',\n spacing: true,\n }\n};\n\nvar ga = {\n 'ga/char': 'abcdefghilmnoprstuvwxyz\u00E1\u00E9\u00ED\u00F3\u00FA',\n 'ga/quote': {\n left: '\u201C\u2018',\n right: '\u201D\u2019',\n }\n};\n\nvar hu = {\n 'hu/char': 'a-z\u00E1\u00E4\u00E9\u00ED\u00F3\u00F6\u00FA\u00FC\u0151\u0171',\n 'hu/quote': {\n left: '\u201E\u00BB',\n right: '\u201D\u00AB',\n }\n};\n\nvar it = {\n 'it/char': 'a-z\u00E0\u00E9\u00E8\u00EC\u00F2\u00F9',\n 'it/quote': {\n left: '\u00AB\u201C',\n right: '\u00BB\u201D',\n }\n};\n\nvar lv = {\n 'lv/char': 'abcdefghijklmnopqrstuvxz\u00E6\u0153',\n 'lv/quote': {\n left: '\u00AB\u201E',\n right: '\u00BB\u201C',\n }\n};\n\nvar nl = {\n 'nl/char': 'a-z\u00E4\u00E7\u00E8\u00E9\u00EA\u00EB\u00EE\u00EF\u00F1\u00F6\u00FB\u00FC',\n 'nl/quote': {\n left: '\u2018\u201C',\n right: '\u2019\u201D',\n }\n};\n\nvar no = {\n 'no/char': 'a-z\u00E5\u00E6\u00E8\u00E9\u00EA\u00F2\u00F3\u00F4\u00F8',\n 'no/quote': {\n left: '\u00AB\u2019',\n right: '\u00BB\u2019',\n }\n};\n\nvar pl = {\n 'pl/char': 'abcdefghijklmnoprstuvwxyz\u00F3\u0105\u0107\u0119\u0142\u0144\u015B\u017A\u017C',\n 'pl/quote': {\n left: '\u201E\u00AB',\n right: '\u201D\u00BB',\n }\n};\n\nvar ro = {\n 'ro/char': 'abcdefghijklmnoprstuvxz\u00EE\u0103\u0219\u021B',\n 'ro/quote': {\n left: '\u201E\u00AB',\n right: '\u201D\u00BB',\n }\n};\n\nvar ru = {\n 'ru/char': '\u0430-\u044F\u0451',\n 'ru/dashBefore': '(^| |\\\\n)',\n 'ru/dashAfter': '(?=[\\u00A0 ,.?:!]|$)',\n 'ru/dashAfterDe': '(?=[,.?:!]|[\\u00A0 ][^\u0410-\u042F\u0401]|$)',\n 'ru/l': '\u0430-\u044F\u0451a-z',\n 'ru/L': '\u0410-\u042F\u0401A-Z',\n 'ru/month': '\u044F\u043D\u0432\u0430\u0440\u044C|\u0444\u0435\u0432\u0440\u0430\u043B\u044C|\u043C\u0430\u0440\u0442|\u0430\u043F\u0440\u0435\u043B\u044C|\u043C\u0430\u0439|\u0438\u044E\u043D\u044C|\u0438\u044E\u043B\u044C|\u0430\u0432\u0433\u0443\u0441\u0442|\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044C|\u043E\u043A\u0442\u044F\u0431\u0440\u044C|\u043D\u043E\u044F\u0431\u0440\u044C|\u0434\u0435\u043A\u0430\u0431\u0440\u044C',\n 'ru/monthGenCase': '\u044F\u043D\u0432\u0430\u0440\u044F|\u0444\u0435\u0432\u0440\u0430\u043B\u044F|\u043C\u0430\u0440\u0442\u0430|\u0430\u043F\u0440\u0435\u043B\u044F|\u043C\u0430\u044F|\u0438\u044E\u043D\u044F|\u0438\u044E\u043B\u044F|\u0430\u0432\u0433\u0443\u0441\u0442\u0430|\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044F|\u043E\u043A\u0442\u044F\u0431\u0440\u044F|\u043D\u043E\u044F\u0431\u0440\u044F|\u0434\u0435\u043A\u0430\u0431\u0440\u044F',\n 'ru/monthPreCase': '\u044F\u043D\u0432\u0430\u0440\u0435|\u0444\u0435\u0432\u0440\u0430\u043B\u0435|\u043C\u0430\u0440\u0442\u0435|\u0430\u043F\u0440\u0435\u043B\u0435|\u043C\u0430\u0435|\u0438\u044E\u043D\u0435|\u0438\u044E\u043B\u0435|\u0430\u0432\u0433\u0443\u0441\u0442\u0435|\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u0435|\u043E\u043A\u0442\u044F\u0431\u0440\u0435|\u043D\u043E\u044F\u0431\u0440\u0435|\u0434\u0435\u043A\u0430\u0431\u0440\u0435',\n 'ru/quote': {\n left: '\u00AB\u201E\u201A',\n right: '\u00BB\u201C\u2018',\n removeDuplicateQuotes: true,\n },\n 'ru/shortMonth': '\u044F\u043D\u0432|\u0444\u0435\u0432|\u043C\u0430\u0440|\u0430\u043F\u0440|\u043C\u0430[\u0435\u0439\u044F]|\u0438\u044E\u043D|\u0438\u044E\u043B|\u0430\u0432\u0433|\u0441\u0435\u043D|\u043E\u043A\u0442|\u043D\u043E\u044F|\u0434\u0435\u043A',\n 'ru/shortWord': '\u0430|\u0431\u044B|\u0432|\u0432\u043E|\u0434\u0430|\u0434\u043E|\u0436\u0435|\u0437\u0430|\u0438|\u0438\u0437|\u043A|\u043A\u043E|\u043B\u0438|\u043D\u0430|\u043D\u0435|\u043D\u0438|\u043D\u043E|\u043E|\u043E\u0431|\u043E\u0442|\u043F\u043E|\u0441|\u0441\u043E|\u0442\u043E|\u0443',\n 'ru/weekday': '\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A|\u0432\u0442\u043E\u0440\u043D\u0438\u043A|\u0441\u0440\u0435\u0434\u0430|\u0447\u0435\u0442\u0432\u0435\u0440\u0433|\u043F\u044F\u0442\u043D\u0438\u0446\u0430|\u0441\u0443\u0431\u0431\u043E\u0442\u0430|\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435',\n};\n\nvar sk = {\n 'sk/char': 'abcdefghijklmnoprstuvwxyz\u00E1\u00E4\u00E9\u00ED\u00F3\u00F4\u00FA\u00FD\u010D\u010F\u013E\u0148\u0155\u0161\u0165\u017E',\n 'sk/quote': {\n left: '\u201E\u201A',\n right: '\u201C\u2018',\n }\n};\n\nvar sl = {\n 'sl/char': 'a-z\u010D\u0161\u017E',\n 'sl/quote': {\n left: '\u201E\u201A',\n right: '\u201C\u2018',\n }\n};\n\nvar sr = {\n 'sr/char': 'abcdefghijklmnoprstuvz\u0107\u010D\u0111\u0161\u017E',\n 'sr/quote': {\n left: '\u201E\u2019',\n right: '\u201D\u2019',\n }\n};\n\nvar sv = {\n 'sv/char': 'a-z\u00E4\u00E5\u00E9\u00F6',\n 'sv/quote': {\n left: '\u201D\u2019',\n right: '\u201D\u2019',\n }\n};\n\nvar tr = {\n 'tr/char': 'abcdefghijklmnoprstuvyz\u00E2\u00E7\u00EE\u00F6\u00FB\u00FC\u011F\u0131\u015F',\n 'tr/quote': {\n left: '\u201C\u2018',\n right: '\u201D\u2019',\n }\n};\n\nvar uk = {\n 'uk/char': '\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044C\u044E\u044F\u0454\u0456\u0457\u0491',\n 'uk/quote': {\n left: '\u00AB\u201E',\n right: '\u00BB\u201C',\n }\n};\n\nvar data = [\n common,\n be,\n bg,\n ca,\n cs,\n da,\n de,\n el,\n enGB,\n enUS,\n eo,\n es,\n et,\n fi,\n fr,\n ga,\n hu,\n it,\n lv,\n nl,\n no,\n pl,\n ro,\n ru,\n sk,\n sl,\n sr,\n sv,\n tr,\n uk\n];\ndata.forEach(function (item) { return setData(item); });\n\nvar eMailRule = {\n name: 'common/html/e-mail',\n queue: 'end',\n handler: function (text, _settings, context) {\n return context.isHTML ? text : text.replace(/(^|[\\s;(])([\\w\\-.]{2,64})@([\\w\\-.]{2,64})\\.([a-z]{2,64})([)\\s.,!?]|$)/gi, '$1<a href=\"mailto:$2@$3.$4\">$2@$3.$4</a>$5');\n },\n disabled: true,\n htmlAttrs: false,\n};\n\nvar entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '/': '/'\n};\nvar escapeRule = {\n name: 'common/html/escape',\n index: '+100',\n queue: 'end',\n handler: function (text) {\n return text.replace(/[&<>\"'/]/g, function (key) { return entityMap[key]; });\n },\n disabled: true,\n};\n\nvar nbrRule = {\n name: 'common/html/nbr',\n index: '+10',\n queue: 'end',\n handler: function (text) {\n return text.replace(/([^\\n>])\\n(?=[^\\n])/g, '$1<br/>\\n');\n },\n disabled: true,\n htmlAttrs: false,\n};\n\nvar blockElements = [\n 'address',\n 'article',\n 'aside',\n 'blockquote',\n 'canvas',\n 'dd',\n 'div',\n 'dl',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'main',\n 'nav',\n 'noscript',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'section',\n 'table',\n 'tfoot',\n 'ul',\n 'video'\n];\n\nvar blockRe = new RegExp('<(' + blockElements.join('|') + ')[>\\\\s]');\nvar separator = '\\n\\n';\nvar pRule = {\n name: 'common/html/p',\n index: '+5',\n queue: 'end',\n handler: function (text) {\n var buffer = text.split(separator);\n buffer.forEach(function (text, i, data) {\n if (!text.trim()) {\n return;\n }\n if (!blockRe.test(text)) {\n data[i] = text.replace(/^(\\s*)/, '$1<p>').replace(/(\\s*)$/, '</p>$1');\n }\n });\n return buffer.join(separator);\n },\n disabled: true,\n htmlAttrs: false,\n};\n\nvar processingAttrsRule = {\n name: 'common/html/processingAttrs',\n queue: 'hide-safe-tags-own', // After \"hide-safe-tags-own\", before \"hide-safe-tags-html\".\n handler: function (text, settings, context) {\n var _this = this;\n var reAttrs = new RegExp('(^|\\\\s)(' + settings.attrs.join('|') + ')=(\"[^\"]*?\"|\\'[^\\']*?\\')', 'gi');\n var prefs = deepCopy(context.prefs);\n prefs.ruleFilter = function (rule) { return rule.htmlAttrs !== false; };\n return text.replace(/(<[-\\w]+\\s)([^>]+?)(?=>)/g, function (_match, tagName, attrs) {\n var resultAttrs = attrs.replace(reAttrs, function (_submatch, space, attrName, attrValue) {\n var lquote = attrValue[0];\n var rquote = attrValue[attrValue.length - 1];\n var value = attrValue.slice(1, -1);\n return space + attrName + '=' + lquote + _this.execute(value, prefs) + rquote;\n });\n return tagName + resultAttrs;\n });\n },\n settings: {\n attrs: ['title', 'placeholder']\n },\n disabled: true,\n htmlAttrs: false,\n};\n\nvar quotRule = {\n name: 'common/html/quot',\n queue: 'hide-safe-tags',\n handler: function (text) {\n return text.replace(/"/g, '\"');\n },\n};\n\nvar stripTagsRule = {\n name: 'common/html/stripTags',\n index: '+99',\n queue: 'end',\n handler: function (text) {\n return text.replace(/<[^>]+>/g, '');\n },\n disabled: true,\n};\n\nvar urlRule = {\n name: 'common/html/url',\n queue: 'end',\n handler: function (text, _settings, context) {\n return context.isHTML ? text : text.replace(regExpUrl, function ($0, protocol, path) {\n path = path\n .replace(/([^/]+\\/?)(\\?|#)$/, '$1') // Remove ending ? and #\n .replace(/^([^/]+)\\/$/, '$1'); // Remove ending /\n if (protocol === 'http') {\n path = path.replace(/^([^/]+)(:80)([^\\d]|\\/|$)/, '$1$3'); // Remove 80 port\n }\n else if (protocol === 'https') {\n path = path.replace(/^([^/]+)(:443)([^\\d]|\\/|$)/, '$1$3'); // Remove 443 port\n }\n var url = path;\n var fullUrl = protocol + '://' + path;\n var firstPart = '<a href=\"' + fullUrl + '\">';\n if (protocol === 'http' || protocol === 'https') {\n url = url.replace(/^www\\./, '');\n return firstPart + (protocol === 'http' ? url : protocol + '://' + url) + '</a>';\n }\n return firstPart + fullUrl + '</a>';\n });\n },\n disabled: true,\n htmlAttrs: false,\n};\n\nTypograf.addRules([\n eMailRule,\n escapeRule,\n nbrRule,\n pRule,\n processingAttrsRule,\n quotRule,\n stripTagsRule,\n urlRule,\n]);\n\nvar afterNumberRule = {\n name: 'common/nbsp/afterNumber',\n handler: function (text, _settings, context) {\n var char = context.getData('char');\n var re = '(^|\\\\s)(\\\\d{1,5}) ([' + char + ']+)';\n return text.replace(new RegExp(re, 'gi'), '$1$2\\u00A0$3');\n },\n disabled: true,\n};\n\nvar afterParagraphMarkRule = {\n name: 'common/nbsp/afterParagraphMark',\n handler: function (text) {\n return text.replace(/\u00B6 ?(?=\\d)/g, '\u00B6\\u00A0');\n },\n};\n\nvar afterSectionMarkRule = {\n name: 'common/nbsp/afterSectionMark',\n handler: function (text, _settings, context) {\n // \\u2009 - THIN SPACE\n // \\u202F - NARROW NO-BREAK SPACE\n var locale = context.prefs.locale[0];\n