Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

typograf

Package Overview
Dependencies
Maintainers
1
Versions
101
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

typograf - npm Package Compare versions

Comparing version 5.8.0 to 6.0.0

docs/LOCALES.en-US.md

45

CHANGELOG.md
# Changelog
#v6.0.0
Переименованы методы:
- `Typograf.rule()` → `Typograf.addRule()`
- `Typograf.innerRule()` → `Typograf.addInnerRule()`
- `Typograf.data()` → `Typograf.getData()` и `Typograf.setData()`
- `Typograf.setting()` → `Typograf.getSetting()` и `Typograf.setSetting()`
- `Typograf.prototype.data()` → `Typograf.prototype.getData()`
- `Typograf.prototype.disable()` → `Typograf.prototype.disableRule()`
- `Typograf.prototype.disabled()` → `Typograf.prototype.isDisabledRule()`
- `Typograf.prototype.enable()` → `Typograf.prototype.enableRule()`
- `Typograf.prototype.enabled()` → `Typograf.prototype.isEnabledRule()`
Переименованы свойства в параметрах конструктора:
- `disable` → `disableRule`
- `enable` → `enableRule`
- `lang` → `locale`
- `mode` → `htmlEntity`
```js
// Было:
var tp = new Typograf({
enable: 'ru/optalign/*',
lang: 'ru',
mode: 'digit'
});
// Стало:
var tp = new Typograf({
enableRule: 'ru/optalign/*',
locale: ['ru', 'en-US'],
htmlEntity: {type: 'digit'}
});
```
Добавлена поддержка начальной типографики для [нескольких десятков локалей](https://github.com/typograf/typograf/blob/dev/docs/LOCALES.en-US.md). Добавлены методы по работе с локалями: `Typograf.addLocale()`, `Typograf.hasLocale()` и `Typograf.getLocales()`.
Добавлено правило `common/punctuation/quoteLink` для выноса кавычек из ссылки.
Правило по расстановке кавычек стало общим `common/punctuation/quote`. Правила `ru/punctuation/quote` и `en/punctuation/quote` удалены.
Переработана сборка с помощью `gulp-include`, упрощены тесты и пр.
# v5.8.0

@@ -149,3 +192,3 @@ Доработки по расстановке кавычек и апострофа #143, #214. Правило `ru/punctuation/apostrophe` переименовано в `common/punctuation/apostrophe`.

- Неразрывный тонкий пробел после № и §
- Командный интерфейс перенесен в [отдельный репозитарий](https://github.com/typograf/typograf-cli)
- Командный интерфейс перенесен в [отдельный репозиторий](https://github.com/typograf/typograf-cli)
- Удалено свойство `index` у большинства правил

@@ -152,0 +195,0 @@ - Рефакторинг регулярных выражений в правилах

24

dist/typograf.groups.js

@@ -5,3 +5,3 @@ Typograf.groups = [

"title": {
"en": "Punctuation",
"en-US": "Punctuation",
"ru": "Пунктуация"

@@ -13,3 +13,3 @@ }

"title": {
"en": "Hanging punctuation",
"en-US": "Hanging punctuation",
"ru": "Висячая пунктуация"

@@ -21,3 +21,3 @@ }

"title": {
"en": "Dash and hyphen",
"en-US": "Dash and hyphen",
"ru": "Тире и дефис"

@@ -29,3 +29,3 @@ }

"title": {
"en": "Non-breaking space",
"en-US": "Non-breaking space",
"ru": "Неразрывный пробел"

@@ -37,3 +37,3 @@ }

"title": {
"en": "Space",
"en-US": "Space",
"ru": "Пробел"

@@ -45,3 +45,3 @@ }

"title": {
"en": "HTML",
"en-US": "HTML",
"ru": "HTML"

@@ -53,3 +53,3 @@ }

"title": {
"en": "Date",
"en-US": "Date",
"ru": "Дата"

@@ -61,3 +61,3 @@ }

"title": {
"en": "Money",
"en-US": "Money",
"ru": "Деньги"

@@ -69,3 +69,3 @@ }

"title": {
"en": "Numbers and mathematical expressions",
"en-US": "Numbers and mathematical expressions",
"ru": "Числа и математические выражения"

@@ -77,3 +77,3 @@ }

"title": {
"en": "Symbols and signs",
"en-US": "Symbols and signs",
"ru": "Символы и знаки"

@@ -85,3 +85,3 @@ }

"title": {
"en": "Typos",
"en-US": "Typos",
"ru": "Опечатки"

@@ -93,3 +93,3 @@ }

"title": {
"en": "Other",
"en-US": "Other",
"ru": "Прочее"

@@ -96,0 +96,0 @@ }

@@ -5,3 +5,3 @@ [

"title": {
"en": "Punctuation",
"en-US": "Punctuation",
"ru": "Пунктуация"

@@ -13,3 +13,3 @@ }

"title": {
"en": "Hanging punctuation",
"en-US": "Hanging punctuation",
"ru": "Висячая пунктуация"

@@ -21,3 +21,3 @@ }

"title": {
"en": "Dash and hyphen",
"en-US": "Dash and hyphen",
"ru": "Тире и дефис"

@@ -29,3 +29,3 @@ }

"title": {
"en": "Non-breaking space",
"en-US": "Non-breaking space",
"ru": "Неразрывный пробел"

@@ -37,3 +37,3 @@ }

"title": {
"en": "Space",
"en-US": "Space",
"ru": "Пробел"

@@ -45,3 +45,3 @@ }

"title": {
"en": "HTML",
"en-US": "HTML",
"ru": "HTML"

@@ -53,3 +53,3 @@ }

"title": {
"en": "Date",
"en-US": "Date",
"ru": "Дата"

@@ -61,3 +61,3 @@ }

"title": {
"en": "Money",
"en-US": "Money",
"ru": "Деньги"

@@ -69,3 +69,3 @@ }

"title": {
"en": "Numbers and mathematical expressions",
"en-US": "Numbers and mathematical expressions",
"ru": "Числа и математические выражения"

@@ -77,3 +77,3 @@ }

"title": {
"en": "Symbols and signs",
"en-US": "Symbols and signs",
"ru": "Символы и знаки"

@@ -85,3 +85,3 @@ }

"title": {
"en": "Typos",
"en-US": "Typos",
"ru": "Опечатки"

@@ -93,3 +93,3 @@ }

"title": {
"en": "Other",
"en-US": "Other",
"ru": "Прочее"

@@ -96,0 +96,0 @@ }

@@ -1,3 +0,3 @@

/*! Typograf | © 2015 Denis Seleznev | https://github.com/typograf/typograf/ */
!function(e,r){"function"==typeof define&&define.amd?define("typograf",[],r):"object"==typeof exports?module.exports=r():e.Typograf=r()}(this,function(){"use strict";function e(e){this._prefs="object"==typeof e?e:{},this._prefs.live=this._prefs.live||!1,this._safeTags=new r,this._settings={},this._enabledRules={},this._innerRulesByQueues={},this._innerRules=[].concat(this._innerRules),this._innerRules.forEach(function(e){var r=e.queue||"default";this._innerRulesByQueues[r]=this._innerRulesByQueues[r]||[],this._innerRulesByQueues[r].push(e)},this),this._rulesByQueues={},this._rules=[].concat(this._rules),this._rules.forEach(function(e){var r=e.queue||"default";this._prepareRule(e),this._rulesByQueues[r]=this._rulesByQueues[r]||[],this._rulesByQueues[r].push(e)},this),this._prefs.disable&&this.disable(this._prefs.disable),this._prefs.enable&&this.enable(this._prefs.enable)}function r(){var r=[["<!--","-->"],["<!ENTITY",">"],["<!DOCTYPE",">"],["<\\?xml","\\?>"],["<!\\[CDATA\\[","\\]\\]>"]];["code","kbd","object","pre","samp","script","style","var"].forEach(function(e){r.push(["<"+e+"(\\s[^>]*?)?>","</"+e+">"])},this),this._tags={own:[],html:r.map(this._prepareRegExp),url:[e._reUrl]},this._pasteLabel=this._pasteLabel.bind(this),this._replaceLabel=this._replaceLabel.bind(this),this._groups=["own","html","url"],this._reservedGroups=[].concat(this._groups).reverse()}e.rule=function(r){var n=r.name.split("/");return r._enabled=r.disabled!==!0,r._lang=n[0],r._group=n[1],r._name=n[2],e._setIndex(r),e.prototype._rules.push(r),e._needSortRules&&this._sortRules(),this},e._reUrl=new RegExp("(https?|file|ftp)://([a-zA-Z0-9/+-=%&:_.~?]+[a-zA-Z0-9#+]*)","g"),e._langs=["en","ru"],e._setIndex=function(r){var n=r.index,t=typeof n,a=e.groupIndexes[r._group];"undefined"===t?n=a:"string"===t&&(n=a+parseInt(r.index,10)),r._index=n},e.innerRule=function(r){return e.prototype._innerRules.push(r),r._lang=r.name.split("/")[0],this},e.data=function(r,n){if("string"==typeof r){if(1===arguments.length)return e._data[r];e._data[r]=n}else"object"==typeof r&&Object.keys(r).forEach(function(n){e._data[n]=r[n]})},e._data={},e._sortRules=function(){e.prototype._rules.sort(function(e,r){return e._index>r._index?1:-1})},e._replace=function(e,r){for(var n=0;n<r.length;n++)e=e.replace(r[n][0],r[n][1]);return e},e._replaceNbsp=function(e){return e.replace(/\u00A0/g," ")},e._privateLabel="\udbff",e._privateQuote="\udbfe",e.prototype={constructor:e,execute:function(r,t){if(r=""+r,!r)return"";t=t||{};var a=this,u=this._prepareHtmlEntityParam(t.mode||this._prefs.mode,t.htmlEntity||this._prefs.htmlEntity);return this._lang=t.lang||this._prefs.lang||"common",r=this._removeCR(r),this._isHTML=r.search(/(<\/?[a-z]|<!|&[lg]t;)/i)!==-1,r=this._executeRules(r,"start"),r=this._safeTags.hide(r,this._isHTML,function(e,r){return a._executeRules(e,"hide-safe-tags-"+r)}),r=this._executeRules(r,"hide-safe-tags"),r=n.toUtf(r),this._prefs.live&&(r=e._replaceNbsp(r)),r=this._executeRules(r,"utf"),r=this._executeRules(r),r=n.restore(r,u),r=this._executeRules(r,"entity"),r=this._safeTags.show(r,function(e,r){return a._executeRules(e,"show-safe-tags-"+r)}),r=this._executeRules(r,"end"),this._lang=null,this._isHTML=null,this._fixLineEnding(r,t.lineEnding||this._prefs.lineEnding)},setting:function(e,r,n){return arguments.length<=2?this._settings[e]&&this._settings[e][r]:(this._settings[e]=this._settings[e]||{},this._settings[e][r]=n,this)},enabled:function(e){return this._enabledRules[e]},disabled:function(e){return!this._enabledRules[e]},enable:function(e){return this._enable(e,!0)},disable:function(e){return this._enable(e,!1)},addSafeTag:function(e,r,n){var t=e instanceof RegExp?e:[e,r,n];return this._safeTags.add(t),this},data:function(r){var n="";return r.search("/")===-1&&(n=(this._lang||this._prefs.lang)+"/"),e.data(n+r)},_quote:function(r,n){var t=this.data("l")+"\u0301\\d",a=e._privateLabel,u=n.lquote,i=n.rquote,s=n.lquote2,l=n.rquote2,o="["+e.data("common/quote")+"]",c="["+t+")!?.:;#*,\u2026]*?",p=new RegExp('"(['+t+"])","gi"),d=new RegExp("("+c+')"('+c+")","gi"),h=new RegExp(o,"g"),g=new RegExp("^(\\s)?("+o+")","g"),m=new RegExp("(^|\\s)"+o+a,"g"),f=new RegExp(a+o+"([\\s!?.:;#*,]|$)","g"),$=0,_=this.data("lLd");return r=r.replace(new RegExp("(["+_+'])"(?=['+_+"])","g"),"$1"+e._privateQuote).replace(h,function(){return $++,'"'}).replace(p,u+"$1").replace(d,"$1"+i+"$2").replace(m,"$1"+u+a).replace(f,a+i+"$1").replace(g,"$1"+u),s&&l&&$%2===0&&(r=this._innerQuote(r,n)),r.replace(new RegExp(e._privateQuote,"g"),'"')},_innerQuote:function(r,n){var t=[n.lquote],a=[n.rquote];n.lquote2&&n.rquote2&&(t.push(n.lquote2),a.push(n.rquote2),n.lquote3&&n.rquote3&&(t.push(n.lquote3),a.push(n.rquote3)));for(var u=n.lquote,i=n.rquote,s=new Array(r.length),l=e._privateQuote,o=-1,c=t.length-1,p=o,d=0,h=r.length;d<h;d++){var g=r[d];g===u?(p++,p>c&&(p=c),s.push(t[p])):g===i?p<=o?(p=0,s.push(t[p])):(s.push(a[p]),p--,p<o&&(p=o)):(g===l&&(p=o),s.push(g))}return s.join("")},_executeRules:function(e,r){r=r||"default";var n=this._rulesByQueues[r],t=this._innerRulesByQueues[r];return t&&t.forEach(function(r){e=this._ruleIterator(e,r)},this),n&&n.forEach(function(r){e=this._ruleIterator(e,r)},this),e},_ruleIterator:function(e,r){var n=r._lang,t=this._prefs.live;return t===!0&&r.live===!1||t===!1&&r.live===!0?e:("common"!==n&&n!==this._lang||!this.enabled(r.name)||(this._onBeforeRule&&this._onBeforeRule(r.name,e),e=r.handler.call(this,e,this._settings[r.name]),this._onAfterRule&&this._onAfterRule(r.name,e)),e)},_removeCR:function(e){return e.replace(/\r\n?/g,"\n")},_fixLineEnding:function(e,r){return"CRLF"===r?e.replace(/\n/g,"\r\n"):"CR"===r?e.replace(/\n/g,"\r"):e},_prepareRule:function(e){var r=e.name,n={};"object"==typeof e.settings&&Object.keys(e.settings).forEach(function(r){n[r]=e.settings[r]}),this._settings[r]=n,this._enabledRules[r]=e._enabled},_enable:function(e,r){return Array.isArray(e)?e.forEach(function(e){this._enableByMask(e,r)},this):this._enableByMask(e,r),this},_enableByMask:function(e,r){var n;e.search(/\*/)!==-1?(n=new RegExp(e.replace(/\//g,"\\/").replace(/\*/g,".*")),this._rules.forEach(function(e){var t=e.name;n.test(t)&&(this._enabledRules[t]=r)},this)):this._enabledRules[e]=r},_rules:[],_innerRules:[],_getRule:function(e){var r=null;return this._rules.some(function(n){return n.name===e&&(r=n,!0)}),r},_prepareHtmlEntityParam:function(e,r){return e?{type:e}:r||{}}},e.version="5.8.0",e.groupIndexes={symbols:110,space:210,dash:310,punctuation:410,nbsp:510,number:610,money:710,date:810,other:910,optalign:1010,typo:1110,html:1210},r.prototype={constructor:r,add:function(e){this._tags.own.push(this._prepareRegExp(e))},show:function(r,n){var t=e._privateLabel,a=new RegExp(t+"tf\\d+"+t,"g"),u=new RegExp(t+"tf\\d");return this._reservedGroups.forEach(function(e){this._currentGroup=e;for(var t=0,i=this._tags[e].length;t<i&&(r=r.replace(a,this._replaceLabel),r.search(u)!==-1);t++);r=n(r,e)},this),this._hiddenTags=null,r},hide:function(e,r,n){return this._isHTML=r,this._hiddenTags={},this._groups.forEach(function(e){this._hiddenTags[e]={}},this),this._iLabel=0,this._groups.forEach(function(r){e=this._hide(e,r),e=n(e,r)},this),e},_hide:function(e,r){return this._currentGroup=r,this._tags[r].forEach(function(r){e=e.replace(this._prepareRegExp(r),this._pasteLabel)},this),"html"===r&&this._isHTML&&(e=e.replace(/<\/?[a-z][^]*?>/gi,this._pasteLabel).replace(/&lt;\/?[a-z][^]*?&gt;/gi,this._pasteLabel).replace(/&[gl]t;/gi,this._pasteLabel)),e},_prepareRegExp:function(e){var r;if(e instanceof RegExp)r=e;else{var n=e[0],t=e[1],a="undefined"==typeof e[2]?"[^]*?":e[2];r=new RegExp(n+a+t,"gi")}return r},_getPrivateLabel:function(r){var n=e._privateLabel;return n+"tf"+r+n},_pasteLabel:function(e){var r=this._getPrivateLabel(this._iLabel);return this._hiddenTags[this._currentGroup][r]=e,this._iLabel++,r},_replaceLabel:function(e){return this._hiddenTags[this._currentGroup][e]||e}};var n={init:function(){var e=[["iexcl",161],["cent",162],["pound",163],["curren",164],["yen",165],["brvbar",166],["sect",167],["uml",168],["copy",169],["ordf",170],["laquo",171],["not",172],["reg",174],["macr",175],["deg",176],["plusmn",177],["sup2",178],["sup3",179],["acute",180],["micro",181],["para",182],["middot",183],["cedil",184],["sup1",185],["ordm",186],["raquo",187],["frac14",188],["frac12",189],["frac34",190],["iquest",191],["Agrave",192],["Aacute",193],["Acirc",194],["Atilde",195],["Auml",196],["Aring",197],["AElig",198],["Ccedil",199],["Egrave",200],["Eacute",201],["Ecirc",202],["Euml",203],["Igrave",204],["Iacute",205],["Icirc",206],["Iuml",207],["ETH",208],["Ntilde",209],["Ograve",210],["Oacute",211],["Ocirc",212],["Otilde",213],["Ouml",214],["times",215],["Oslash",216],["Ugrave",217],["Uacute",218],["Ucirc",219],["Uuml",220],["Yacute",221],["THORN",222],["szlig",223],["agrave",224],["aacute",225],["acirc",226],["atilde",227],["auml",228],["aring",229],["aelig",230],["ccedil",231],["egrave",232],["eacute",233],["ecirc",234],["euml",235],["igrave",236],["iacute",237],["icirc",238],["iuml",239],["eth",240],["ntilde",241],["ograve",242],["oacute",243],["ocirc",244],["otilde",245],["ouml",246],["divide",247],["oslash",248],["ugrave",249],["uacute",250],["ucirc",251],["uuml",252],["yacute",253],["thorn",254],["yuml",255],["fnof",402],["Alpha",913],["Beta",914],["Gamma",915],["Delta",916],["Epsilon",917],["Zeta",918],["Eta",919],["Theta",920],["Iota",921],["Kappa",922],["Lambda",923],["Mu",924],["Nu",925],["Xi",926],["Omicron",927],["Pi",928],["Rho",929],["Sigma",931],["Tau",932],["Upsilon",933],["Phi",934],["Chi",935],["Psi",936],["Omega",937],["alpha",945],["beta",946],["gamma",947],["delta",948],["epsilon",949],["zeta",950],["eta",951],["theta",952],["iota",953],["kappa",954],["lambda",955],["mu",956],["nu",957],["xi",958],["omicron",959],["pi",960],["rho",961],["sigmaf",962],["sigma",963],["tau",964],["upsilon",965],["phi",966],["chi",967],["psi",968],["omega",969],["thetasym",977],["upsih",978],["piv",982],["bull",8226],["hellip",8230],["prime",8242],["Prime",8243],["oline",8254],["frasl",8260],["weierp",8472],["image",8465],["real",8476],["trade",8482],["alefsym",8501],["larr",8592],["uarr",8593],["rarr",8594],["darr",8595],["harr",8596],["crarr",8629],["lArr",8656],["uArr",8657],["rArr",8658],["dArr",8659],["hArr",8660],["forall",8704],["part",8706],["exist",8707],["empty",8709],["nabla",8711],["isin",8712],["notin",8713],["ni",8715],["prod",8719],["sum",8721],["minus",8722],["lowast",8727],["radic",8730],["prop",8733],["infin",8734],["ang",8736],["and",8743],["or",8744],["cap",8745],["cup",8746],["int",8747],["there4",8756],["sim",8764],["cong",8773],["asymp",8776],["ne",8800],["equiv",8801],["le",8804],["ge",8805],["sub",8834],["sup",8835],["nsub",8836],["sube",8838],["supe",8839],["oplus",8853],["otimes",8855],["perp",8869],["sdot",8901],["lceil",8968],["rceil",8969],["lfloor",8970],["rfloor",8971],["lang",9001],["rang",9002],["spades",9824],["clubs",9827],["hearts",9829],["diams",9830],["loz",9674],["OElig",338],["oelig",339],["Scaron",352],["scaron",353],["Yuml",376],["circ",710],["tilde",732],["ndash",8211],["mdash",8212],["lsquo",8216],["rsquo",8217],["sbquo",8218],["ldquo",8220],["rdquo",8221],["bdquo",8222],["dagger",8224],["Dagger",8225],["permil",8240],["lsaquo",8249],["rsaquo",8250],["euro",8364],["NestedGreaterGreater",8811],["NestedLessLess",8810]],r=[["nbsp",160],["thinsp",8201],["ensp",8194],["emsp",8195],["shy",173],["zwnj",8204],["zwj",8205],["lrm",8206],["rlm",8207]];this._entities=this._prepareEntities([].concat(e,r)),this._entitiesByName=this._entities.reduce(function(e,r){return e[r.name]=r,e},{}),this._invisibleEntities=this._prepareEntities(r)},toUtf:function(e){return e.search(/&#/)!==-1&&(e=this.decHexToUtf(e)),e.search(/&[a-z]/i)!==-1&&this._entities.forEach(function(r){e=e.replace(r.reName,r.utf)}),e.replace(/&quot;/g,'"')},decHexToUtf:function(e){return e.replace(/&#(\d{1,6});/gi,function(e,r){return String.fromCharCode(parseInt(r,10))}).replace(/&#x([\da-f]{1,6});/gi,function(e,r){return String.fromCharCode(parseInt(r,16))})},restore:function(e,r){var n=r.type,t=this._entities;return"name"!==n&&"digit"!==n||((r.onlyInvisible||r.list)&&(t=[],r.onlyInvisible&&(t=t.concat(this._invisibleEntities)),r.list&&(t=t.concat(this._prepareListParam(r.list)))),e=this._restoreEntitiesByIndex(e,n+"Entity",t)),e},_prepareEntities:function(e){var r=[];return e.forEach(function(e){var n=e[0],t=e[1],a=String.fromCharCode(t),u={name:n,nameEntity:"&"+n+";",digitEntity:"&#"+t+";",utf:a,reName:new RegExp("&"+n+";","g"),reUtf:new RegExp(a,"g")};r.push(u)},this),r},_prepareListParam:function(e){var r=[];return e.forEach(function(e){var n=this._entitiesByName[e];n&&r.push(n)},this),r},_restoreEntitiesByIndex:function(e,r,n){return n.forEach(function(n){e=e.replace(n.reUtf,n[r])}),e}};return n.init(),e.prototype.blockElements=["address","article","aside","blockquote","canvas","dd","div","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","noscript","ol","output","p","pre","section","table","tfoot","ul","video"],e.prototype.inlineElements=["a","abbr","acronym","b","bdo","big","br","button","cite","code","dfn","em","i","img","input","kbd","label","map","object","q","samp","script","select","small","span","strong","sub","sup","textarea","time","tt","var"],e.data("common/dash","--?|\u2012|\u2013|\u2014"),e.data("common/quote",'\xab\u2039\xbb\u203a\u201e\u201c\u201f\u201d"'),e.data({"en/l":"a-z","en/ld":"a-z\\d","en/L":"A-Z","en/Ld":"A-Z\\d","en/lL":"a-zA-Z","en/lLd":"a-zA-Z\\d"}),e.data("en/lquote","\u201c\u2018"),e.data("en/rquote","\u201d\u2019"),e.data({"ru/dashBefore":"(^| |\\n)","ru/dashAfter":"(?=[\xa0 ,.?:!]|$)","ru/dashAfterDe":"(?=[,.?:!]|[\xa0 ][^\u0410-\u042f\u0401]|$)"}),e.data({"ru/l":"\u0430-\u044f\u0451a-z","ru/ld":"\u0430-\u044f\u0451a-z\\d","ru/L":"\u0410-\u042f\u0401A-Z","ru/Ld":"\u0410-\u042f\u0401A-Z\\d","ru/lL":"\u0430-\u044f\u0451\u0410-\u042f\u0401a-zA-Z","ru/lLd":"\u0430-\u044f\u0451\u0410-\u042f\u0401a-zA-Z\\d"}),e.data("ru/lquote","\xab\u201e\u201a"),e.data({"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","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","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","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"}),e.data("ru/rquote","\xbb\u201c\u2018"),e.data("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"),e.rule({name:"common/html/e-mail",queue:"end",handler:function(e){return this._isHTML?e:e.replace(/(^|[\s;(])([\w\-.]{2,})@([\w\-.]{2,})\.([a-z]{2,6})([)\s.,!?]|$)/gi,'$1<a href="mailto:$2@$3.$4">$2@$3.$4</a>$5')},disabled:!0}),e.rule({name:"common/html/escape",index:"+100",queue:"end",handler:function(e){var r={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};return e.replace(/[&<>"'\/]/g,function(e){return r[e]})},disabled:!0}),e.rule({name:"common/html/nbr",index:"+5",queue:"end",handler:function(e){return e.replace(/([^\n>])\n(?=[^\n])/g,"$1<br/>\n")},disabled:!0}),e.rule({name:"common/html/p",queue:"end",handler:function(e){var r=new RegExp("<("+this.blockElements.join("|")+")[>s]"),n="\n\n",t=e.split(n);return t.forEach(function(e,n,t){e.trim()&&(r.test(e)||(t[n]=e.replace(/^(\s*)/,"$1<p>").replace(/(\s*)$/,"</p>$1")))}),t.join(n)},disabled:!0}),e.rule({name:"common/html/stripTags",index:"+99",queue:"end",handler:function(e){return e.replace(/<[^>]+>/g,"")},disabled:!0}),e.rule({name:"common/html/url",queue:"end",handler:function(r){return this._isHTML?r:r.replace(e._reUrl,function(e,r,n){n=n.replace(/([^\/]+\/?)(\?|#)$/,"$1").replace(/^([^\/]+)\/$/,"$1"),"http"===r?n=n.replace(/^([^\/]+)(:80)([^\d]|\/|$)/,"$1$3"):"https"===r&&(n=n.replace(/^([^\/]+)(:443)([^\d]|\/|$)/,"$1$3"));var t=n,a=r+"://"+n,u='<a href="'+a+'">';return"http"===r||"https"===r?(t=t.replace(/^www\./,""),u+("http"===r?t:r+"://"+t)+"</a>"):u+a+"</a>"})},disabled:!0}),e.rule({name:"common/nbsp/afterNumber",handler:function(e){var r="(^|\\D)(\\d{1,5}) (["+this.data("l")+"]{2,})";return e.replace(new RegExp(r,"gi"),"$1$2\xa0$3")},disabled:!0}),e.rule({name:"common/nbsp/afterParagraph",handler:function(e){return e.replace(/\u00A7[ \u00A0\u2009]?(\d|I|V|X)/g,"\xa7\u202f$1")}}),e.rule({name:"common/nbsp/afterShortWord",handler:function(r,n){var t=n.lengthShortWord,a=" \xa0("+e._privateLabel+this.data("common/quote"),u="(^|["+a+"])(["+this.data("l")+"]{1,"+t+"}) ",i="$1$2\xa0",s=new RegExp(u,"gim");return r.replace(s,i).replace(s,i)},settings:{lengthShortWord:2}}),e.rule({name:"common/nbsp/beforeShortLastNumber",handler:function(e,r){var n=new RegExp("(["+this.data("lL")+"]) (?=\\d{1,"+r.lengthLastNumber+"}[-+\u2212%'\""+this.data("rquote")+"]?([.!?\u2026]( ["+this.data("L")+"]|$)|$))","gm");return e.replace(n,"$1\xa0")},live:!1,settings:{lengthLastNumber:2}}),e.rule({name:"common/nbsp/beforeShortLastWord",handler:function(e,r){var n=new RegExp("(["+this.data("ld")+"]) (["+this.data("lL")+"]{1,"+r.lengthLastWord+"}[.!?\u2026])( ["+this.data("L")+"]|$)","g");return e.replace(n,"$1\xa0$2$3")},settings:{lengthLastWord:3}}),e.rule({name:"common/nbsp/dpi",handler:function(e){return e.replace(/(\d) ?(lpi|dpi)(?!\w)/,"$1\xa0$2")}}),function(){function r(e,r,n,t){return r+n.replace(/([^\u00A0])\u00A0([^\u00A0])/g,"$1 $2")+t}e.rule({name:"common/nbsp/nowrap",queue:"end",handler:function(e){return e.replace(/(<nowrap>)(.*?)(<\/nowrap>)/g,r).replace(/(<nobr>)(.*?)(<\/nobr>)/g,r)}})}(),e.rule({name:"common/nbsp/replaceNbsp",queue:"utf",live:!1,handler:e._replaceNbsp,disabled:!0}),e.rule({name:"common/number/fraction",handler:function(e){return e.replace(/(^|\D)1\/2(\D|$)/g,"$1\xbd$2").replace(/(^|\D)1\/4(\D|$)/g,"$1\xbc$2").replace(/(^|\D)3\/4(\D|$)/g,"$1\xbe$2")}}),e.rule({name:"common/number/mathSigns",handler:function(r){return e._replace(r,[[/!=/g,"\u2260"],[/<=/g,"\u2264"],[/(^|[^=])>=/g,"$1\u2265"],[/<=>/g,"\u21d4"],[/<</g,"\u226a"],[/>>/g,"\u226b"],[/~=/g,"\u2245"],[/(^|[^+])\+-/g,"$1\xb1"]])}}),e.rule({name:"common/number/times",handler:function(e){return e.replace(/(\d)[ \u00A0]?[x\u0445][ \u00A0]?(\d)/g,"$1\xd7$2")}}),e.rule({name:"common/other/delBOM",queue:"start",index:-1,handler:function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}}),e.rule({name:"common/other/repeatWord",handler:function(e,r){var n="[;:,.?! \n"+this.data("common/quote")+"]",t=new RegExp("("+n+"|^)(["+this.data("l")+"]{"+r.min+",}) \\2("+n+"|$)","gi");return e.replace(t,"$1$2$3")},settings:{min:2},disabled:!0}),e.rule({name:"common/punctuation/apostrophe",handler:function(e){var r="(["+this.data("l")+"])",n=new RegExp(r+"'"+r,"gi");return e.replace(n,"$1\u2019$2")}}),e.rule({name:"common/punctuation/delDoublePunctuation",handler:function(e){return e.replace(/(^|[^,]),,(?!,)/g,"$1,").replace(/(^|[^:])::(?!:)/g,"$1:").replace(/(^|[^!?\.])\.\.(?!\.)/g,"$1.").replace(/(^|[^;]);;(?!;)/g,"$1;").replace(/(^|[^?])\?\?(?!\?)/g,"$1?")}}),e.rule({name:"common/space/afterPunctuation",handler:function(r){var n=e._privateLabel,t=new RegExp("(!|;|\\?)([^).!;?\\s[\\])"+n+this.data("common/quote")+"])","g"),a=new RegExp('(\\D)(,|:)([^)",:.?\\s\\/\\\\'+n+"])","g");return r.replace(t,"$1 $2").replace(a,"$1$2 $3")}}),e.rule({name:"common/space/beforeBracket",handler:function(e){var r=new RegExp("(["+this.data("l")+".!?,;\u2026)])\\(","gi");return e.replace(r,"$1 (")}}),e.rule({name:"common/space/bracket",handler:function(e){return e.replace(/(\() +/g,"(").replace(/ +\)/g,")")}}),e.rule({name:"common/space/delBeforePercent",handler:function(e){return e.replace(/(\d)( |\u00A0)(%|\u2030|\u2031)/g,"$1$3")}}),e.rule({name:"common/space/delBeforePunctuation",handler:function(e){return e.replace(/ ([!;,?.:])(?!\))/g,"$1")}}),e.rule({name:"common/space/delLeadingBlanks",handler:function(e){return e.replace(/\n[ \t]+/g,"\n")},disabled:!0}),e.rule({name:"common/space/delRepeatN",index:"-1",handler:function(e){return e.replace(/\n{3,}/g,"\n\n")}}),e.rule({name:"common/space/delRepeatSpace",index:"-1",handler:function(e){return e.replace(/([^\n \t])[ \t]{2,}(?![\n \t])/g,"$1 ")}}),e.rule({name:"common/space/delTrailingBlanks",index:"-3",handler:function(e){return e.replace(/[ \t]+\n/g,"\n")}}),e.rule({name:"common/space/replaceTab",index:"-5",handler:function(e){return e.replace(/\t/g," ")}}),e.rule({name:"common/space/squareBracket",handler:function(e){return e.replace(/(\[) +/g,"[").replace(/ +\]/g,"]")}}),e.rule({name:"common/space/trimLeft",index:"-4",handler:String.prototype.trimLeft?function(e){return e.trimLeft()}:function(e){return e.replace(/^[\s\uFEFF\xA0]+/g,"")}}),e.rule({name:"common/space/trimRight",index:"-3",live:!1,handler:String.prototype.trimRight?function(e){return e.trimRight()}:function(e){return e.replace(/[\s\uFEFF\xA0]+$/g,"")}}),e.rule({name:"common/symbols/arrow",handler:function(r){return e._replace(r,[[/(^|[^-])->(?!>)/g,"$1\u2192"],[/(^|[^<])<-(?!-)/g,"$1\u2190"]])}}),e.rule({name:"common/symbols/cf",handler:function(e){var r=new RegExp('(^|[^%])(\\d+)( |\xa0)?(C|F)([\\W \\.,:!\\?"\\]\\)]|$)',"g");return e.replace(r,"$1$2\u2009\xb0$4$5")}}),e.rule({name:"common/symbols/copy",handler:function(r){return e._replace(r,[[/\(r\)/gi,"\xae"],[/(copyright )?\((c|\u0441)\)/gi,"\xa9"],[/\(tm\)/gi,"\u2122"]])}}),e.rule({name:"en/punctuation/quote",handler:function(e,r){return this._quote(e,r)},settings:{lquote:"\u201c",rquote:"\u201d",lquote2:"\u2018",rquote2:"\u2019"}}),e.rule({name:"ru/dash/centuries",handler:function(e,r){var n="("+this.data("common/dash")+")",t=new RegExp("(X|I|V)[ |\xa0]?"+n+"[ |\xa0]?(X|I|V)","g");return e.replace(t,"$1"+r.dash+"$3")},settings:{dash:"\u2013"}}),e.rule({name:"ru/dash/daysMonth",handler:function(e,r){var n=new RegExp("(^|\\s)([123]?\\d)("+this.data("common/dash")+")([123]?\\d)[ \xa0]("+this.data("ru/monthGenCase")+")","g");return e.replace(n,"$1$2"+r.dash+"$4\xa0$5")},settings:{dash:"\u2013"}}),e.rule({name:"ru/dash/de",handler:function(e){var r=new RegExp("([a-\u044f\u0451]+) \u0434\u0435"+this.data("ru/dashAfterDe"),"g");return e.replace(r,"$1-\u0434\u0435")},disabled:!0}),e.rule({name:"ru/dash/decade",handler:function(e,r){var n=new RegExp("(^|\\s)(\\d{3}|\\d)0("+this.data("common/dash")+")(\\d{3}|\\d)0(-\u0435[ \xa0])(?=\u0433\\.?[ \xa0]?\u0433|\u0433\u043e\u0434)","g");return e.replace(n,"$1$20"+r.dash+"$40$5")},settings:{dash:"\u2013"}}),e.rule({name:"ru/dash/directSpeech",handler:function(r){var n=this.data("common/dash"),t=new RegExp('(["\xbb\u2018\u201c,])[ |\xa0]?('+n+")[ |\xa0]","g"),a=new RegExp("(^|"+e._privateLabel+")("+n+")( |\xa0)","gm"),u=new RegExp("([.\u2026?!])[ \xa0]("+n+")[ \xa0]","g");return r.replace(t,"$1\xa0\u2014 ").replace(a,"$1\u2014\xa0").replace(u,"$1 \u2014\xa0")}}),e.rule({name:"ru/dash/izpod",handler:function(e){var r=new RegExp(this.data("ru/dashBefore")+"(\u0418|\u0438)\u0437 \u043f\u043e\u0434"+this.data("ru/dashAfter"),"g");return e.replace(r,"$1$2\u0437-\u043f\u043e\u0434")}}),e.rule({name:"ru/dash/izza",handler:function(e){var r=new RegExp(this.data("ru/dashBefore")+"(\u0418|\u0438)\u0437 \u0437\u0430"+this.data("ru/dashAfter"),"g");return e.replace(r,"$1$2\u0437-\u0437\u0430")}}),e.rule({name:"ru/dash/ka",handler:function(e){var r=new RegExp("([a-\u044f\u0451]+) \u043a\u0430(\u0441\u044c)?"+this.data("ru/dashAfter"),"g");return e.replace(r,"$1-\u043a\u0430$2")}}),e.rule({name:"ru/dash/koe",handler:function(e){var r=new RegExp(this.data("ru/dashBefore")+"([\u041a\u043a]\u043e[\u0435\u0439])\\s([\u0430-\u044f\u0451]{3,})"+this.data("ru/dashAfter"),"g");return e.replace(r,"$1$2-$3")}}),e.rule({name:"ru/dash/main",index:"-5",handler:function(e){var r=this.data("common/dash"),n=new RegExp("([ \xa0])("+r+")([ \xa0\\n])","g");return e.replace(n,"\xa0\u2014$3")}}),e.rule({name:"ru/dash/month",handler:function(e,r){var n="("+this.data("ru/month")+")",t="("+this.data("ru/monthPreCase")+")",a=this.data("common/dash"),u=new RegExp(n+" ?("+a+") ?"+n,"gi"),i=new RegExp(t+" ?("+a+") ?"+t,"gi"),s="$1"+r.dash+"$3";return e.replace(u,s).replace(i,s)},settings:{dash:"\u2013"}}),e.rule({name:"ru/dash/surname",handler:function(e){var r=new RegExp("([\u0410-\u042f\u0401][\u0430-\u044f\u0451]+)\\s-([\u0430-\u044f\u0451]{1,3})(?![^\u0430-\u044f\u0451]|$)","g");return e.replace(r,"$1\xa0\u2014$2")}}),e.rule({name:"ru/dash/taki",handler:function(e){var r=new RegExp("(\u0432\u0435\u0440\u043d\u043e|\u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e|\u043e\u043f\u044f\u0442\u044c|\u043f\u0440\u044f\u043c\u043e|\u0442\u0430\u043a|\u0432\u0441[\u0435\u0451]|\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e|\u043d\u0435\u0443\u0436\u0435\u043b\u0438)\\s(\u0442\u0430\u043a\u0438)"+this.data("ru/dashAfter"),"g");return e.replace(r,"$1-$2")}}),e.rule({name:"ru/dash/time",handler:function(e,r){var n=new RegExp(this.data("ru/dashBefore")+"(\\d?\\d:[0-5]\\d)"+this.data("common/dash")+"(\\d?\\d:[0-5]\\d)"+this.data("ru/dashAfter"),"g");return e.replace(n,"$1$2"+r.dash+"$3")},settings:{dash:"\u2013"}}),e.rule({name:"ru/dash/to",handler:function(e){var r=["\u043e\u0442\u043a\u0443\u0434\u0430","\u043a\u0443\u0434\u0430","\u0433\u0434\u0435","\u043a\u043e\u0433\u0434\u0430","\u0437\u0430\u0447\u0435\u043c","\u043f\u043e\u0447\u0435\u043c\u0443","\u043a\u0430\u043a","\u043a\u0430\u043a\u043e[\u0435\u0439\u043c]","\u043a\u0430\u043a\u0430\u044f","\u043a\u0430\u043a\u0438[\u0435\u043c\u0445]","\u043a\u0430\u043a\u0438\u043c\u0438","\u043a\u0430\u043a\u0443\u044e","\u0447\u0442\u043e","\u0447\u0435\u0433\u043e","\u0447\u0435[\u0439\u043c]","\u0447\u044c\u0438\u043c?","\u043a\u0442\u043e","\u043a\u043e\u0433\u043e","\u043a\u043e\u043c\u0443","\u043a\u0435\u043c"],n=new RegExp("("+r.join("|")+")( | -|- )(\u0442\u043e|\u043b\u0438\u0431\u043e|\u043d\u0438\u0431\u0443\u0434\u044c)"+this.data("ru/dashAfter"),"gi");return e.replace(n,"$1-$3")}}),e.rule({name:"ru/dash/weekday",handler:function(e,r){var n="("+this.data("ru/weekday")+")",t=new RegExp(n+" ?("+this.data("common/dash")+") ?"+n,"gi");return e.replace(t,"$1"+r.dash+"$3")},settings:{dash:"\u2013"}}),e.rule({name:"ru/dash/years",handler:function(e,r){var n=this.data("common/dash"),t=new RegExp("(\\D|^)(\\d{4})[ \xa0]?("+n+")[ \xa0]?(\\d{4})(?=[ \xa0]?\u0433)","g");return e.replace(t,function(e,n,t,a,u){return parseInt(t,10)<parseInt(u,10)?n+t+r.dash+u:e})},settings:{dash:"\u2013"}}),e.rule({name:"ru/date/fromISO",handler:function(e){var r="(-|\\.|\\/)",n="(-|\\/)",t=new RegExp("(^|\\D)(\\d{4})"+r+"(\\d{2})"+r+"(\\d{2})(\\D|$)","gi"),a=new RegExp("(^|\\D)(\\d{2})"+n+"(\\d{2})"+n+"(\\d{4})(\\D|$)","gi");return e.replace(t,"$1$6.$4.$2$7").replace(a,"$1$4.$2.$6$7")}}),e.rule({name:"ru/date/weekday",handler:function(e){var r="( |\xa0)",n=this.data("ru/monthGenCase"),t=this.data("ru/weekday"),a=new RegExp("(\\d)"+r+"("+n+"),"+r+"("+t+")","gi");return e.replace(a,function(){var e=arguments;return e[1]+e[2]+e[3].toLowerCase()+","+e[4]+e[5].toLowerCase()})}}),e.rule({name:"ru/money/currency",handler:function(e){var r="([$\u20ac\xa5\u04b0\xa3\u20a4\u20bd])",n=new RegExp("(^|[\\D]{2})"+r+" ?([\\d.,]+([ \xa0\u2009\u202f]\\d{3})*)","g"),t=new RegExp("(^|[\\D])([\\d.,]+) ?"+r,"g"),a="$1$3\xa0$2",u="$1$2\xa0$3";return e.replace(n,a).replace(t,u)}}),e.rule({name:"ru/money/ruble",handler:function(e){var r="$1\xa0\u20bd",n="(\\d+)( |\xa0)?(\u0440|\u0440\u0443\u0431)\\.",t=new RegExp("^"+n+"$","g"),a=new RegExp(n+"(?=[!?,:;])","g"),u=new RegExp(n+"(?=\\s+[A-\u042f\u0401])","g");return e.replace(t,r).replace(a,r).replace(u,r+".")},disabled:!0}),e.rule({name:"ru/nbsp/abbr",handler:function(r){function n(e,r,n,t){return["\u0440\u0444","\u0440\u0443","\u0440\u0443\u0441","\u043e\u0440\u0433","\u0443\u043a\u0440","\u0431\u0433","\u0441\u0440\u0431"].indexOf(t)>-1?e:r+n+".\xa0"+t+"."}var t=new RegExp("(^|\\s|"+e._privateLabel+")([\u0430-\u044f\u0451]{1,3})\\. ?([\u0430-\u044f\u0451]{1,3})\\.","g");return r.replace(t,n).replace(t,n)}}),e.rule({name:"ru/nbsp/addr",handler:function(e){return e.replace(/(\s|^)(\u0434\u043e\u043c|\u0434\.|\u043a\u0432\.|\u043f\u043e\u0434\.|\u043f\-\u0434) *(\d+)/gi,"$1$2\xa0$3").replace(/(\s|^)(\u043c\u043a\u0440-\u043d|\u043c\u043a-\u043d|\u043c\u043a\u0440\.|\u043c\u043a\u0440\u043d)\s/gi,"$1$2\xa0").replace(/(\s|^)(\u044d\u0442\.) *(-?\d+)/gi,"$1$2\xa0$3").replace(/(\s|^)(\d+) +\u044d\u0442\u0430\u0436([^\u0430-\u044f\u0451]|$)/gi,"$1$2\xa0\u044d\u0442\u0430\u0436$3").replace(/(\s|^)\u043b\u0438\u0442\u0435\u0440\s([\u0410-\u042f]|$)/gi,"$1\u043b\u0438\u0442\u0435\u0440\xa0$2").replace(/(\s|^)(\u043e\u0431\u043b|\u043a\u0440|\u0441\u0442|\u043f\u043e\u0441|\u0441|\u0434|\u0443\u043b|\u043f\u0435\u0440|\u043f\u0440|\u043f\u0440\-\u0442|\u043f\u0440\u043e\u0441\u043f|\u043f\u043b|\u0431\u0443\u043b|\u0431\-\u0440|\u043d\u0430\u0431|\u0448|\u0442\u0443\u043f|\u043e\u0444|\u043a\u043e\u043c\u043d?|\u0443\u0447|\u0432\u043b|\u0432\u043b\u0430\u0434|\u0441\u0442\u0440|\u043a\u043e\u0440)\. *([\u0430-\u044f\u0451a-z\d]+)/gi,"$1$2.\xa0$3").replace(/(\D[ \u00A0]|^)\u0433\. ?([\u0410-\u042f\u0401])/gm,"$1\u0433.\xa0$2")}}),e.rule({name:"ru/nbsp/afterNumberSign",handler:function(e){return e.replace(/\u2116[ \u00A0\u2009]?(\d|\u043f\/\u043f)/g,"\u2116\u202f$1")}}),e.rule({name:"ru/nbsp/beforeParticle",index:"+5",handler:function(e){var r="(\u043b\u0438|\u043b\u044c|\u0436\u0435|\u0436|\u0431\u044b|\u0431)",n=new RegExp("([\u0410-\u042f\u0401\u0430-\u044f\u0451]) "+r+'(?=[,;:?!"\u2018\u201c\xbb])',"g"),t=new RegExp("([\u0410-\u042f\u0401\u0430-\u044f\u0451])[ \xa0]"+r+"[ \xa0]","g");return e.replace(n,"$1\xa0$2").replace(t,"$1\xa0$2 ")}}),e.rule({name:"ru/nbsp/centuries",handler:function(e){var r=this.data("common/dash"),n="(^|\\s)([VIX]+)",t='(?=[,;:?!"\u2018\u201c\xbb]|$)',a=new RegExp(n+"[ \xa0]?\u0432\\.?"+t,"gm"),u=new RegExp(n+"("+r+")([VIX]+)[ \xa0]?\u0432\\.?([ \xa0]?\u0432\\.?)?"+t,"gm");return e.replace(a,"$1$2\xa0\u0432.").replace(u,"$1$2$3$4\xa0\u0432\u0432.")}}),e.rule({name:"ru/nbsp/dayMonth",handler:function(e){var r=new RegExp("(\\d{1,2}) ("+this.data("ru/shortMonth")+")","gi");return e.replace(r,"$1\xa0$2")}}),e.rule({name:"ru/nbsp/groupNumbers",handler:function(e){return e.replace(/(^ ?|\D )(\d{1,3}([ \u00A0\u202F\u2009]\d{3})+)(?! ?[\d-])/gm,function(e,r,n){return r+n.replace(/\s/g,"\u202f")})}}),e.rule({name:"ru/nbsp/initials",handler:function(r){var n="\xa0\u202f ",t=this.data("ru/lquote"),a=this.data("ru/rquote"),u=new RegExp("(^|["+n+t+e._privateLabel+'"])([\u0410-\u042f\u0401])\\.['+n+"]?([\u0410-\u042f\u0401])\\.["+n+']?([\u0410-\u042f\u0401][\u0430-\u044f\u0451]+)(?=[\\s.,;:?!"'+a+"]|$)","gm");
return r.replace(u,"$1$2.\xa0$3.\xa0$4")}}),e.rule({name:"ru/nbsp/m",index:"+5",handler:function(r){var n=e._privateLabel,t=new RegExp("(^|[\\s,."+n+"])(\\d+)[ \xa0]?(\u043c\u043c?|\u0441\u043c|\u043a\u043c|\u0434\u043c|\u0433\u043c|mm?|km|cm|dm)([23\xb2\xb3])?([\\s.!?,;"+n+"]|$)","gm");return r.replace(t,function(e,r,n,t,a,u){var i={2:"\xb2","\xb2":"\xb2",3:"\xb3","\xb3":"\xb3","":""}[a||""];return r+n+"\xa0"+t+i+("\xa0"===u?" ":u)})}}),e.rule({name:"ru/nbsp/ooo",handler:function(e){return e.replace(/(^|[^a-\u044f\u0451A-\u042f\u0401])(\u041e\u041e\u041e|\u041e\u0410\u041e|\u0417\u0410\u041e|\u041d\u0418\u0418|\u041f\u0411\u041e\u042e\u041b) /g,"$1$2\xa0")}}),e.rule({name:"ru/nbsp/page",handler:function(r){var n=new RegExp("(^|[)\\s"+e._privateLabel+"])(\u0441\u0442\u0440|\u0433\u043b|\u0440\u0438\u0441|\u0438\u043b\u043b?|\u0441\u0442|\u043f|c)\\. *(\\d+)([\\s.,?!;:]|$)","gim");return r.replace(n,"$1$2.\xa0$3$4")}}),e.rule({name:"ru/nbsp/ps",handler:function(r){var n=new RegExp("(^|\\s|"+e._privateLabel+")[p\u0437]\\.[ \xa0]?([p\u0437]\\.[ \xa0]?)?[s\u044b]\\.:? ","gim");return r.replace(n,function(e,r,n){return r+(n?"P.\xa0P.\xa0S. ":"P.\xa0S. ")})}}),e.rule({name:"ru/nbsp/rubleKopek",handler:function(e){return e.replace(/(\d) ?(?=(\u0440\u0443\u0431|\u043a\u043e\u043f)\.)/g,"$1\xa0")}}),e.rule({name:"ru/nbsp/see",handler:function(r){var n=new RegExp("(^|\\s|"+e._privateLabel+"|\\()(\u0441\u043c|\u0438\u043c)\\.[ \xa0]?([\u0430-\u044f\u04510-9a-z]+)([\\s.,?!]|$)","gi");return r.replace(n,function(e,r,n,t,a){return("\xa0"===r?" ":r)+n+".\xa0"+t+a})}}),e.rule({name:"ru/nbsp/year",handler:function(e){return e.replace(/(^|\D)(\d{4}) ?\u0433([ ,;.\n]|$)/g,"$1$2\xa0\u0433$3")}}),e.rule({name:"ru/nbsp/years",index:"+5",handler:function(e){var r=this.data("common/dash"),n=new RegExp("(^|\\D)(\\d{4})("+r+')(\\d{4})[ \xa0]?\u0433\\.?([ \xa0]?\u0433\\.)?(?=[,;:?!"\u2018\u201c\xbb\\s]|$)',"gm");return e.replace(n,"$1$2$3$4\xa0\u0433\u0433.")}}),e.rule({name:"ru/number/comma",handler:function(e){return e.replace(/(^|\s)(\d+)\.(\d+[\u00A0\u2009\u202F ]*?[%\u2030\xb0\xd7x])/gim,"$1$2,$3")}}),e.rule({name:"ru/number/ordinals",handler:function(e){var r=new RegExp("(\\d[%\u2030]?)-(\u044b\u0439|\u043e\u0439|\u0430\u044f|\u043e\u0435|\u044b\u0435|\u044b\u043c|\u043e\u043c|\u044b\u0445|\u043e\u0433\u043e|\u043e\u043c\u0443|\u044b\u043c\u0438)(?!["+this.data("l")+"])","g");return e.replace(r,function(e,r,n){var t={"\u043e\u0439":"\u0439","\u044b\u0439":"\u0439","\u0430\u044f":"\u044f","\u043e\u0435":"\u0435","\u044b\u0435":"\u0435","\u044b\u043c":"\u043c","\u043e\u043c":"\u043c","\u044b\u0445":"\u0445","\u043e\u0433\u043e":"\u0433\u043e","\u043e\u043c\u0443":"\u043c\u0443","\u044b\u043c\u0438":"\u043c\u0438"};return r+"-"+t[n]})}}),function(){var r=["typograf-oa-lbracket","typograf-oa-n-lbracket","typograf-oa-sp-lbracket"],n="ru/optalign/bracket";e.rule({name:n,handler:function(e){return e.replace(/( |\u00A0)\(/g,'<span class="typograf-oa-sp-lbracket">$1</span><span class="typograf-oa-lbracket">(</span>').replace(/^\(/gm,'<span class="typograf-oa-n-lbracket">(</span>')},disabled:!0}).innerRule({name:n,queue:"start",handler:function(n){return e._removeOptAlignTags(n,r)}}).innerRule({name:n,queue:"end",handler:function(n){return e._removeOptAlignTagsFromTitle(n,r)}})}(),function(){var r=["typograf-oa-comma","typograf-oa-comma-sp"],n="ru/optalign/comma";e.rule({name:n,handler:function(e){var r=new RegExp("(["+this.data("l")+"\\d\u0301]+), ","gi");return e.replace(r,'$1<span class="typograf-oa-comma">,</span><span class="typograf-oa-comma-sp"> </span>')},disabled:!0}).innerRule({name:n,queue:"start",handler:function(n){return e._removeOptAlignTags(n,r)}}).innerRule({name:n,queue:"end",handler:function(n){return e._removeOptAlignTagsFromTitle(n,r)}})}(),e._removeOptAlignTags=function(e,r){var n=new RegExp('<span class="('+r.join("|")+')">([^]*?)</span>',"g");return e.replace(n,"$2")},e._removeOptAlignTagsFromTitle=function(r,n){return r.replace(/<title>[^]*?<\/title>/i,function(r){return e._removeOptAlignTags(r,n)})},function(){var r=["typograf-oa-lquote","typograf-oa-n-lquote","typograf-oa-sp-lquote"],n="ru/optalign/quote";e.rule({name:n,handler:function(r){var n="ru/punctuation/quote",t='(["'+this.setting(n,"lquote")+this.setting(n,"lquote2")+"])",a=new RegExp("(^|\n\n|"+e._privateLabel+")("+t+")","g"),u=new RegExp("([^\n"+e._privateLabel+"])([ \xa0\n])("+t+")","gi");return r.replace(a,'$1<span class="typograf-oa-n-lquote">$2</span>').replace(u,'$1<span class="typograf-oa-sp-lquote">$2</span><span class="typograf-oa-lquote">$3</span>')},disabled:!0}).innerRule({name:n,queue:"start",handler:function(n){return e._removeOptAlignTags(n,r)}}).innerRule({name:n,queue:"end",handler:function(n){return e._removeOptAlignTagsFromTitle(n,r)}})}(),e.rule({name:"ru/other/accent",handler:function(e){return e.replace(/([\u0430-\u044f\u0451])([\u0410\u0415\u0401\u0418\u041e\u0423\u042b\u042d\u042e\u042f])([^\u0410-\u042f\u0401\w]|$)/g,function(e,r,n,t){return r+n.toLowerCase()+"\u0301"+t})},disabled:!0}),function(){function r(e){var r,a,c="",p=e[0];if(e.length<8)return t(e);if(e.length>10)if("+"===p){if(e[1]!==i)return e;r=!0,e=e.substr(2)}else"8"===p&&(a=!0,e=e.substr(1));for(var d=l;d>=o;d--){var h=+e.substr(0,d);if(s.indexOf(h)>-1){c=e.substr(0,d),e=e.substr(d);break}}return c||(c=e.substr(0,u),e=e.substr(u)),(r?"+"+i+"\xa0":"")+(a?"8\xa0":"")+n(c)+"\xa0"+t(e)}function n(e){var r=+e,n=e.length,t=[e],a=!1;if(n>3)switch(n){case 4:t=[e.substr(0,2),e.substr(2,4)];break;case 5:t=[e.substr(0,3),e.substr(3,5)];break;case 6:t=[e.substr(0,2),e.substr(2,4),e.substr(4,6)]}else a=r>900&&r<=999||495===r||499===r;return t=t.join("-"),a?t:"("+t+")"}function t(e){var r="";return e.length%2&&(r=e[0],r+=e.length<=5?"-":"",e=e.substr(1,e.length-1)),r+e.split(/(?=(?:\d\d)+$)/).join("-")}function a(e){return e.replace(/[^\d\+]/g,"")}var u=5,i="7",s=[],l=8,o=2;[4162,416332,8512,851111,4722,4725,391379,8442,4732,4152,4154451,4154459,4154455,41544513,8142,8332,8612,8622,3525,812,8342,8152,3812,4862,3422,342633,8112,9142,8452,3432,3434,3435,4812,3919,8432,8439,3822,4872,3412,3511,3512,3022,4112,4852,4855,3852,3854,8182,818,90,3472,4741,4764,4832,4922,8172,8202,8722,4932,493,3952,3951,3953,411533,4842,3842,3843,8212,4942,3912,4712,4742,8362,495,499,4966,4964,4967,498,8312,8313,3832,383612,3532,8412,4232,423370,423630,8632,8642,8482,4242,8672,8652,4752,4822,482502,4826300,3452,8422,4212,3466,3462,8712,8352,"901-934","936-939","950-953",958,"960-969","977-989","991-997",999].forEach(function(e){if("string"==typeof e)for(var r=e.split("-"),n=+r[0];n<=+r[1];n++)s.push(n);else s.push(e)}),e.rule({name:"ru/other/phone-number",live:!1,handler:function(n){var t=e._privateLabel,u=new RegExp("(^|,| |"+t+")(\\+7[\\d\\(\\) \xa0-]{10,18})(?=,|;|"+t+"|$)","gm");return n.replace(u,function(e,n,t){var u=a(t);return 12===u.length?n+r(u):e}).replace(/(^|[^\u0430-\u044f\u0451])(\u0442\.|\u0442\u0435\u043b\.|\u0444\.|\u043c\u043e\u0431\.|\u0444\u0430\u043a\u0441|\u0441\u043e\u0442\u043e\u0432\u044b\u0439|\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439|\u0442\u0435\u043b\u0435\u0444\u043e\u043d)(\:?\s*?)([\+\d\(][\d \u00A0\-\(\)]{3,}\d)/gi,function(e,n,t,u,i){var s=a(i);return s.length>=5?n+t+u+r(s):e})}})}(),e.rule({name:"ru/punctuation/ano",handler:function(e){var r=new RegExp("([^!?,:;\\-\u2012\u2013\u2014])([ \xa0\\n])(\u0430|\u043d\u043e)(?= |\xa0|\\n)","g");return e.replace(r,"$1,$2$3")}}),e.rule({name:"ru/punctuation/exclamation",live:!1,handler:function(e){return e.replace(/(^|[^!])!{2}($|[^!])/,"$1!$2").replace(/(^|[^!])!{4}($|[^!])/,"$1!!!$2")}}),e.rule({name:"ru/punctuation/exclamationQuestion",index:"+5",handler:function(e){var r=new RegExp("(^|[^!])!\\?([^?]|$)","g");return e.replace(r,"$1?!$2")}}),e.rule({name:"ru/punctuation/hellip",handler:function(e){return e.replace(/(^|[^.])\.{3,4}([^.]|$)/g,"$1\u2026$2").replace(/(^|[^.])(\.\.\.|\u2026),/g,"$1\u2026").replace(/(\!|\?)(\.\.\.|\u2026)([^.]|$)/g,"$1..$3")}}),e.rule({name:"ru/punctuation/quote",handler:function(e,r){var n=r.lquote,t=r.rquote;return e=this._quote(e,r),n===r.lquote2&&t===r.rquote2?e.replace(new RegExp(n+n,"g"),n).replace(new RegExp(t+t,"g"),t):e},settings:{lquote:"\xab",rquote:"\xbb",lquote2:"\u201e",rquote2:"\u201c",lquote3:"\u201a",rquote3:"\u2018"}}),e.rule({name:"ru/space/afterHellip",handler:function(e){return e.replace(/([\u0430-\u044f\u0451])(\.\.\.|\u2026)([\u0410-\u042f\u0401])/g,"$1$2 $3").replace(/([?!]\.\.)([\u0430-\u044f\u0451a-z])/gi,"$1 $2")}}),e.rule({name:"ru/space/year",handler:function(e){var r=new RegExp("(^| |\xa0)(\\d{3,4})(\u0433\u043e\u0434([\u0430\u0443\u0435]|\u043e\u043c)?)([^"+this.data("l")+"]|$)","g");return e.replace(r,"$1$2 $3$5")}}),e.rule({name:"ru/symbols/NN",handler:function(e){return e.replace(/\u2116\u2116/g,"\u2116")}}),function(){var r={A:"\u0410",a:"\u0430",B:"\u0412",E:"\u0415",e:"\u0435",K:"\u041a",M:"\u041c",H:"\u041d",O:"\u041e",o:"\u043e",P:"\u0420",p:"\u0440",C:"\u0421",c:"\u0441",T:"\u0422",y:"\u0443",X:"\u0425",x:"\u0445"},n=Object.keys(r).join("");e.rule({name:"ru/typo/switchingKeyboardLayout",handler:function(e){var t=new RegExp("(["+n+"]{1,3})(?=[\u0410-\u042f\u0401\u0430-\u044f\u0451]+?)","g");return e.replace(t,function(e,n){for(var t="",a=0;a<n.length;a++)t+=r[n[a]];return t})}})}(),e._sortRules(),e._needSortRules=!0,e});
/*! Typograf | © 2017 Denis Seleznev | https://github.com/typograf/typograf/ */
!function(e,t){"function"==typeof define&&define.amd?define("typograf",[],t):"object"==typeof exports?module.exports=t():e.Typograf=t()}(this,function(){"use strict";function e(a){this._prefs="object"==typeof a?a:{},this._prefs.live=this._prefs.live||!1,this._locale=e._prepareLocale(this._prefs.locale),this._safeTags=new t,this._settings={},this._enabledRules={},this._innerRulesByQueues={},this._innerRules=[].concat(this._innerRules),this._innerRules.forEach(function(e){var t=e.queue||"default";this._innerRulesByQueues[t]=this._innerRulesByQueues[t]||[],this._innerRulesByQueues[t].push(e)},this),this._rulesByQueues={},this._rules=[].concat(this._rules),this._rules.forEach(function(e){var t=e.queue||"default";this._prepareRule(e),this._rulesByQueues[t]=this._rulesByQueues[t]||[],this._rulesByQueues[t].push(e)},this),this._prefs.disableRule&&this.disableRule(this._prefs.disableRule),this._prefs.enableRule&&this.enableRule(this._prefs.enableRule)}function t(){var t=[["<!--","-->"],["<!ENTITY",">"],["<!DOCTYPE",">"],["<\\?xml","\\?>"],["<!\\[CDATA\\[","\\]\\]>"]];["code","kbd","object","pre","samp","script","style","var"].forEach(function(e){t.push(["<"+e+"(\\s[^>]*?)?>","</"+e+">"])},this),this._tags={own:[],html:t.map(this._prepareRegExp),url:[e._reUrl]},this._pasteLabel=this._pasteLabel.bind(this),this._replaceLabel=this._replaceLabel.bind(this),this._groups=["own","html","url"],this._reservedGroups=[].concat(this._groups).reverse()}return e._mix=function(e,t){Object.keys(t).forEach(function(a){e[a]=t[a]})},e._mix(e,{addRule:function(e){var t=e.name.split("/");return e._enabled=e.disabled!==!0,e._locale=t[0],e._group=t[1],e._name=t[2],this.addLocale(e._locale),this._setIndex(e),this.prototype._rules.push(e),this._sortRules(this.prototype._rules),this},addInnerRule:function(e){return this.prototype._innerRules.push(e),e._locale=e.name.split("/")[0],this},deepCopy:function(e){return"object"==typeof e?JSON.parse(JSON.stringify(e)):e},_privateLabel:"\udbff",_repeat:function(e,t){for(var a="";1===(1&t)&&(a+=e),t>>>=1,0!==t;)e+=e;return a},_replace:function(e,t){for(var a=0;a<t.length;a++)e=e.replace(t[a][0],t[a][1]);return e},_replaceNbsp:function(e){return e.replace(/\u00A0/g," ")},_setIndex:function(e){var t=e.index,a=typeof t,n=this.groupIndexes[e._group];"undefined"===a?t=n:"string"===a&&(t=n+parseInt(e.index,10)),e._index=t},_reUrl:new RegExp("(https?|file|ftp)://([a-zA-Z0-9/+-=%&:_.~?]+[a-zA-Z0-9#+]*)","g"),_sortRules:function(e){e.sort(function(e,t){return e._index>t._index?1:-1})}}),e.prototype={constructor:e,execute:function(t,a){if(t=""+t,!t)return"";a=a||{};var n=this;if(this._locale=e._prepareLocale(a.locale,this._prefs.locale),!this._locale.length||!this._locale[0])throw Error('Not defined the property "locale".');if(!e.hasLocale(this._locale[0]))throw Error('"'+this._locale[0]+'" is not supported locale.');return t=this._removeCR(t),this._isHTML=t.search(/(<\/?[a-z]|<!|&[lg]t;)/i)!==-1,t=this._executeRules(t,"start"),t=this._safeTags.hide(t,this._isHTML,function(e,t){return n._executeRules(e,"hide-safe-tags-"+t)}),t=this._executeRules(t,"hide-safe-tags"),t=e.HtmlEntities.toUtf(t),this._prefs.live&&(t=e._replaceNbsp(t)),t=this._executeRules(t,"utf"),t=this._executeRules(t),t=e.HtmlEntities.restore(t,a.htmlEntity||this._prefs.htmlEntity||{}),t=this._executeRules(t,"html-entities"),t=this._safeTags.show(t,function(e,t){return n._executeRules(e,"show-safe-tags-"+t)}),t=this._executeRules(t,"end"),this._isHTML=null,this._locale=e._prepareLocale(this._prefs.locale),this._fixLineEnding(t,a.lineEnding||this._prefs.lineEnding)},getSetting:function(e,t){return this._settings[e]&&this._settings[e][t]},setSetting:function(e,t,a){return this._settings[e]=this._settings[e]||{},this._settings[e][t]=a,this},isEnabledRule:function(e){return this._enabledRules[e]},isDisabledRule:function(e){return!this._enabledRules[e]},enableRule:function(e){return this._enable(e,!0)},disableRule:function(e){return this._enable(e,!1)},addSafeTag:function(e,t,a){var n=e instanceof RegExp?e:[e,t,a];return this._safeTags.add(n),this},_executeRules:function(e,t){t=t||"default";var a=this._rulesByQueues[t],n=this._innerRulesByQueues[t];return n&&n.forEach(function(t){e=this._ruleIterator(e,t)},this),a&&a.forEach(function(t){e=this._ruleIterator(e,t)},this),e},_ruleIterator:function(e,t){var a=t._locale,n=this._prefs.live;return n===!0&&t.live===!1||n===!1&&t.live===!0?e:("common"!==a&&a!==this._locale[0]||!this.isEnabledRule(t.name)||(this._onBeforeRule&&this._onBeforeRule(t.name,e),e=t.handler.call(this,e,this._settings[t.name]),this._onAfterRule&&this._onAfterRule(t.name,e)),e)},_removeCR:function(e){return e.replace(/\r\n?/g,"\n")},_fixLineEnding:function(e,t){return"CRLF"===t?e.replace(/\n/g,"\r\n"):"CR"===t?e.replace(/\n/g,"\r"):e},_prepareRule:function(t){var a=t.name,n=typeof t.settings,r={};"object"===n?r=e.deepCopy(t.settings):"function"===n&&(r=t.settings(t)),this._settings[a]=r,this._enabledRules[a]=t._enabled},_enable:function(e,t){return Array.isArray(e)?e.forEach(function(e){this._enableByMask(e,t)},this):this._enableByMask(e,t),this},_enableByMask:function(e,t){var a;e.search(/\*/)!==-1?(a=new RegExp(e.replace(/\//g,"\\/").replace(/\*/g,".*")),this._rules.forEach(function(e){var n=e.name;a.test(n)&&(this._enabledRules[n]=t)},this)):this._enabledRules[e]=t},_rules:[],_innerRules:[],_getRule:function(e){var t=null;return this._rules.some(function(a){return a.name===e&&(t=a,!0)}),t}},e.version="6.0.0",e._mix(e,{getData:function(e){return this._data[e]},setData:function(e,t){"string"==typeof e?(this.addLocale(e),this._data[e]=t):"object"==typeof e&&Object.keys(e).forEach(function(t){this.addLocale(t),this._data[t]=e[t]},this)},_data:{}}),e.prototype.getData=function(t){var a="";return t.search("/")===-1?"char"===t?(this._locale.forEach(function(n){a+=e.getData(n+"/"+t)},this),a):e.getData(this._locale[0]+"/"+t):e.getData(t)},e._mix(e,{addLocale:function(e){var t=(e||"").split("/")[0];t&&"common"!==t&&!this.hasLocale(t)&&(this._locales.push(t),this._locales.sort())},getLocales:function(){return this._locales},hasLocale:function(e){return"common"===e||this._locales.indexOf(e)!==-1},_prepareLocale:function(e,t){var a=e||t,n=a;return Array.isArray(a)||(n=[a]),n},_locales:[]}),t.prototype={constructor:t,add:function(e){this._tags.own.push(this._prepareRegExp(e))},show:function(t,a){var n=e._privateLabel,r=new RegExp(n+"tf\\d+"+n,"g"),i=new RegExp(n+"tf\\d");return this._reservedGroups.forEach(function(e){this._currentGroup=e;for(var n=0,s=this._tags[e].length;n<s&&(t=t.replace(r,this._replaceLabel),t.search(i)!==-1);n++);t=a(t,e)},this),this._hiddenTags=null,t},hide:function(e,t,a){return this._isHTML=t,this._hiddenTags={},this._groups.forEach(function(e){this._hiddenTags[e]={}},this),this._iLabel=0,this._groups.forEach(function(t){e=this._hide(e,t),e=a(e,t)},this),e},_hide:function(e,t){return this._currentGroup=t,this._tags[t].forEach(function(t){e=e.replace(this._prepareRegExp(t),this._pasteLabel)},this),"html"===t&&this._isHTML&&(e=e.replace(/<\/?[a-z][^]*?>/gi,this._pasteLabel).replace(/&lt;\/?[a-z][^]*?&gt;/gi,this._pasteLabel).replace(/&[gl]t;/gi,this._pasteLabel)),e},_prepareRegExp:function(e){var t;if(e instanceof RegExp)t=e;else{var a=e[0],n=e[1],r="undefined"==typeof e[2]?"[^]*?":e[2];t=new RegExp(a+r+n,"gi")}return t},_getPrivateLabel:function(t){var a=e._privateLabel;return a+"tf"+t+a},_pasteLabel:function(e){var t=this._getPrivateLabel(this._iLabel);return this._hiddenTags[this._currentGroup][t]=e,this._iLabel++,t},_replaceLabel:function(e){return this._hiddenTags[this._currentGroup][e]||e}},e.inlineElements=["a","abbr","acronym","b","bdo","big","br","button","cite","code","dfn","em","i","img","input","kbd","label","map","object","q","samp","script","select","small","span","strong","sub","sup","textarea","time","tt","var"],e.blockElements=["address","article","aside","blockquote","canvas","dd","div","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","noscript","ol","output","p","pre","section","table","tfoot","ul","video"],e.HtmlEntities={init:function(){var e=[["iexcl",161],["cent",162],["pound",163],["curren",164],["yen",165],["brvbar",166],["sect",167],["uml",168],["copy",169],["ordf",170],["laquo",171],["not",172],["reg",174],["macr",175],["deg",176],["plusmn",177],["sup2",178],["sup3",179],["acute",180],["micro",181],["para",182],["middot",183],["cedil",184],["sup1",185],["ordm",186],["raquo",187],["frac14",188],["frac12",189],["frac34",190],["iquest",191],["Agrave",192],["Aacute",193],["Acirc",194],["Atilde",195],["Auml",196],["Aring",197],["AElig",198],["Ccedil",199],["Egrave",200],["Eacute",201],["Ecirc",202],["Euml",203],["Igrave",204],["Iacute",205],["Icirc",206],["Iuml",207],["ETH",208],["Ntilde",209],["Ograve",210],["Oacute",211],["Ocirc",212],["Otilde",213],["Ouml",214],["times",215],["Oslash",216],["Ugrave",217],["Uacute",218],["Ucirc",219],["Uuml",220],["Yacute",221],["THORN",222],["szlig",223],["agrave",224],["aacute",225],["acirc",226],["atilde",227],["auml",228],["aring",229],["aelig",230],["ccedil",231],["egrave",232],["eacute",233],["ecirc",234],["euml",235],["igrave",236],["iacute",237],["icirc",238],["iuml",239],["eth",240],["ntilde",241],["ograve",242],["oacute",243],["ocirc",244],["otilde",245],["ouml",246],["divide",247],["oslash",248],["ugrave",249],["uacute",250],["ucirc",251],["uuml",252],["yacute",253],["thorn",254],["yuml",255],["fnof",402],["Alpha",913],["Beta",914],["Gamma",915],["Delta",916],["Epsilon",917],["Zeta",918],["Eta",919],["Theta",920],["Iota",921],["Kappa",922],["Lambda",923],["Mu",924],["Nu",925],["Xi",926],["Omicron",927],["Pi",928],["Rho",929],["Sigma",931],["Tau",932],["Upsilon",933],["Phi",934],["Chi",935],["Psi",936],["Omega",937],["alpha",945],["beta",946],["gamma",947],["delta",948],["epsilon",949],["zeta",950],["eta",951],["theta",952],["iota",953],["kappa",954],["lambda",955],["mu",956],["nu",957],["xi",958],["omicron",959],["pi",960],["rho",961],["sigmaf",962],["sigma",963],["tau",964],["upsilon",965],["phi",966],["chi",967],["psi",968],["omega",969],["thetasym",977],["upsih",978],["piv",982],["bull",8226],["hellip",8230],["prime",8242],["Prime",8243],["oline",8254],["frasl",8260],["weierp",8472],["image",8465],["real",8476],["trade",8482],["alefsym",8501],["larr",8592],["uarr",8593],["rarr",8594],["darr",8595],["harr",8596],["crarr",8629],["lArr",8656],["uArr",8657],["rArr",8658],["dArr",8659],["hArr",8660],["forall",8704],["part",8706],["exist",8707],["empty",8709],["nabla",8711],["isin",8712],["notin",8713],["ni",8715],["prod",8719],["sum",8721],["minus",8722],["lowast",8727],["radic",8730],["prop",8733],["infin",8734],["ang",8736],["and",8743],["or",8744],["cap",8745],["cup",8746],["int",8747],["there4",8756],["sim",8764],["cong",8773],["asymp",8776],["ne",8800],["equiv",8801],["le",8804],["ge",8805],["sub",8834],["sup",8835],["nsub",8836],["sube",8838],["supe",8839],["oplus",8853],["otimes",8855],["perp",8869],["sdot",8901],["lceil",8968],["rceil",8969],["lfloor",8970],["rfloor",8971],["lang",9001],["rang",9002],["spades",9824],["clubs",9827],["hearts",9829],["diams",9830],["loz",9674],["OElig",338],["oelig",339],["Scaron",352],["scaron",353],["Yuml",376],["circ",710],["tilde",732],["ndash",8211],["mdash",8212],["lsquo",8216],["rsquo",8217],["sbquo",8218],["ldquo",8220],["rdquo",8221],["bdquo",8222],["dagger",8224],["Dagger",8225],["permil",8240],["lsaquo",8249],["rsaquo",8250],["euro",8364],["NestedGreaterGreater",8811],["NestedLessLess",8810]],t=[["nbsp",160],["thinsp",8201],["ensp",8194],["emsp",8195],["shy",173],["zwnj",8204],["zwj",8205],["lrm",8206],["rlm",8207]];this._entities=this._prepareEntities([].concat(e,t)),this._entitiesByName={},this._entitiesByNameEntity={},this._entitiesByDigitEntity={},this._entitiesByUtf={},this._entities.forEach(function(e){this._entitiesByName[e.name]=e,this._entitiesByNameEntity[e.nameEntity]=e,this._entitiesByDigitEntity[e.digitEntity]=e,this._entitiesByUtf[e.utf]=e},this),this._invisibleEntities=this._prepareEntities(t)},toUtf:function(e){return e.search(/&#/)!==-1&&(e=this.decHexToUtf(e)),e.search(/&[a-z]/i)!==-1&&this._entities.forEach(function(t){e=e.replace(t.reName,t.utf)}),e.replace(/&quot;/g,'"')},decHexToUtf:function(e){return e.replace(/&#(\d{1,6});/gi,function(e,t){return String.fromCharCode(parseInt(t,10))}).replace(/&#x([\da-f]{1,6});/gi,function(e,t){return String.fromCharCode(parseInt(t,16))})},restore:function(e,t){var a=t.type,n=this._entities;return"name"!==a&&"digit"!==a||((t.onlyInvisible||t.list)&&(n=[],t.onlyInvisible&&(n=n.concat(this._invisibleEntities)),t.list&&(n=n.concat(this._prepareListParam(t.list)))),e=this._restoreEntitiesByIndex(e,a+"Entity",n)),e},getByUtf:function(e,t){var a="";switch(t){case"digit":a=this._entitiesByDigitEntity[e];break;case"name":a=this._entitiesByNameEntity[e];break;default:a=e}return a},_prepareEntities:function(e){var t=[];return e.forEach(function(e){var a=e[0],n=e[1],r=String.fromCharCode(n),i={name:a,nameEntity:"&"+a+";",digitEntity:"&#"+n+";",utf:r,reName:new RegExp("&"+a+";","g"),reUtf:new RegExp(r,"g")};t.push(i)},this),t},_prepareListParam:function(e){var t=[];return e.forEach(function(e){var a=this._entitiesByName[e];a&&t.push(a)},this),t},_restoreEntitiesByIndex:function(e,t,a){return a.forEach(function(a){e=e.replace(a.reUtf,a[t])}),e}},e.HtmlEntities.init(),e.groupIndexes={symbols:110,space:210,dash:310,punctuation:410,nbsp:510,number:610,money:710,date:810,other:910,optalign:1010,typo:1110,html:1210},e.setData("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"),e.setData("be/quote",{left:"\xab\u201c",right:"\xbb\u201d"}),e.setData("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"),e.setData("bg/quote",{left:"\u201e\u2019",right:"\u201c\u2019"}),e.setData("ca/char","abcdefghijlmnopqrstuvxyz\xe0\xe7\xe8\xe9\xed\xef\xf2\xf3\xfa\xfc"),e.setData("ca/quote",{left:"\xab\u201c",right:"\xbb\u201d"}),e.setData("common/char","a-z"),e.setData("common/dash","--?|\u2012|\u2013|\u2014"),e.setData("common/quote",'\xab\u2039\xbb\u203a\u201e\u201c\u201f\u201d"'),e.setData("cs/char","a-z\xe1\xe9\xed\xf3\xfa\xfd\u010d\u010f\u011b\u0148\u0159\u0161\u0165\u016f\u017e"),e.setData("cs/quote",{left:"\u201e\u201a",right:"\u201c\u2018"}),e.setData("da/char","a-z\xe5\xe6\xf8"),e.setData("da/quote",{left:"\xbb\u203a",right:"\xab\u2039"}),e.setData("de/char","a-z\xdf\xe4\xf6\xfc"),e.setData("de/quote",{left:"\u201e\u201a",right:"\u201c\u2018"}),e.setData("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"),e.setData("el/quote",{left:"\xab\u201c",right:"\xbb\u201d"}),e.setData("en-GB/char","a-z"),e.setData("en-GB/quote",{left:"\u201c\u2018",right:"\u201d\u2019"}),e.setData("en-US/char","a-z"),e.setData("en-US/quote",{left:"\u201c\u2018",right:"\u201d\u2019"}),e.setData("eo/char","abcdefghijklmnoprstuvz\u0109\u011d\u0125\u0135\u015d\u016d"),e.setData("eo/quote",{left:"\u201c\u2018",right:"\u201d\u2019"}),e.setData("es/char","a-z\xe1\xe9\xed\xf1\xf3\xfa\xfc"),e.setData("es/quote",{left:"\xab\u201c",right:"\xbb\u201d"}),e.setData("et/char","abdefghijklmnoprstuvz\xe4\xf5\xf6\xfc\u0161\u017e"),e.setData("et/quote",{left:"\u201e\xab",right:"\u201c\xbb"}),e.setData("fi/char","abcdefghijklmnopqrstuvy\xf6\xe4\xe5"),e.setData("fi/quote",{left:"\u201d\u2019",right:"\u201d\u2019"}),e.setData("fr/char","a-z\xe0\xe2\xe7\xe8\xe9\xea\xeb\xee\xef\xf4\xfb\xfc\u0153\xe6"),e.setData("fr/quote",{left:"\xab\u201c",right:"\xbb\u201d"}),e.setData("ga/char","abcdefghilmnoprstuvwxyz\xe1\xe9\xed\xf3\xfa"),e.setData("ga/quote",{left:"\u201c\u2018",right:"\u201d\u2019"}),e.setData("hu/char","a-z\xe1\xe4\xe9\xed\xf3\xf6\xfa\xfc\u0151\u0171"),e.setData("hu/quote",{left:"\u201e\xbb",right:"\u201d\xab"}),e.setData("it/char","a-z\xe0\xe9\xe8\xec\xf2\xf9"),e.setData("it/quote",{left:"\xab\u201c",right:"\xbb\u201d"}),e.setData("lv/char","abcdefghijklmnopqrstuvxz\xe6\u0153"),e.setData("lv/quote",{left:"\xab\u201e",right:"\xbb\u201c"}),e.setData("nl/char","a-z\xe4\xe7\xe8\xe9\xea\xeb\xee\xef\xf1\xf6\xfb\xfc"),e.setData("nl/quote",{left:"\u2018\u201c",right:"\u2019\u201d"}),e.setData("no/char","a-z\xe5\xe6\xe8\xe9\xea\xf2\xf3\xf4\xf8"),e.setData("no/quote",{left:"\xab\u2019",right:"\xbb\u2019"}),e.setData("pl/char","abcdefghijklmnoprstuvwxyz\xf3\u0105\u0107\u0119\u0142\u0144\u015b\u017a\u017c"),e.setData("pl/quote",{left:"\u201e\xab",right:"\u201d\xbb"}),e.setData("ro/char","abcdefghijklmnoprstuvxz\xee\u0103\u0219\u021b"),e.setData("ro/quote",{left:"\u201e\xab",right:"\u201d\xbb"}),e.setData("ru/char","\u0430-\u044f\u0451"),e.setData({"ru/dashBefore":"(^| |\\n)","ru/dashAfter":"(?=[\xa0 ,.?:!]|$)","ru/dashAfterDe":"(?=[,.?:!]|[\xa0 ][^\u0410-\u042f\u0401]|$)"}),e.setData({"ru/l":"\u0430-\u044f\u0451a-z","ru/L":"\u0410-\u042f\u0401A-Z"}),e.setData({"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","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","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","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"}),e.setData("ru/quote",{left:"\xab\u201e\u201a",right:"\xbb\u201c\u2018",removeDuplicateQuotes:!0}),e.setData("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"),e.setData("sk/char","abcdefghijklmnoprstuvwxyz\xe1\xe4\xe9\xed\xf3\xf4\xfa\xfd\u010d\u010f\u013e\u0148\u0155\u0161\u0165\u017e"),e.setData("sk/quote",{left:"\u201e\u201a",right:"\u201c\u2018"}),e.setData("sl/char","a-z\u010d\u0161\u017e"),e.setData("sl/quote",{left:"\u201e\u201a",right:"\u201c\u2018"}),e.setData("sr/char","abcdefghijklmnoprstuvz\u0107\u010d\u0111\u0161\u017e"),e.setData("sr/quote",{left:"\u201e\u2019",right:"\u201d\u2019"}),e.setData("sv/char","a-z\xe4\xe5\xe9\xf6"),e.setData("sv/quote",{left:"\u201d\u2019",right:"\u201d\u2019"}),e.setData("tr/char","abcdefghijklmnoprstuvyz\xe2\xe7\xee\xf6\xfb\xfc\u011f\u0131\u015f"),e.setData("tr/quote",{left:"\u201c\u2018",right:"\u201d\u2019"}),e.setData("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"),e.setData("uk/quote",{left:"\xab\u201e",right:"\xbb\u201c"}),e.addRule({name:"common/html/e-mail",queue:"end",handler:function(e){return this._isHTML?e:e.replace(/(^|[\s;(])([\w\-.]{2,})@([\w\-.]{2,})\.([a-z]{2,6})([)\s.,!?]|$)/gi,'$1<a href="mailto:$2@$3.$4">$2@$3.$4</a>$5')},disabled:!0}),e.addRule({name:"common/html/escape",index:"+100",queue:"end",handler:function(e){var t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};return e.replace(/[&<>"'\/]/g,function(e){return t[e]})},disabled:!0}),e.addRule({name:"common/html/nbr",index:"+5",queue:"end",handler:function(e){return e.replace(/([^\n>])\n(?=[^\n])/g,"$1<br/>\n")},disabled:!0}),e.addRule({name:"common/html/p",queue:"end",handler:function(t){var a=new RegExp("<("+e.blockElements.join("|")+")[>s]"),n="\n\n",r=t.split(n);return r.forEach(function(e,t,n){e.trim()&&(a.test(e)||(n[t]=e.replace(/^(\s*)/,"$1<p>").replace(/(\s*)$/,"</p>$1")))}),r.join(n)},disabled:!0}),e.addRule({name:"common/html/stripTags",index:"+99",queue:"end",handler:function(e){return e.replace(/<[^>]+>/g,"")},disabled:!0}),e.addRule({name:"common/html/url",queue:"end",handler:function(t){return this._isHTML?t:t.replace(e._reUrl,function(e,t,a){a=a.replace(/([^\/]+\/?)(\?|#)$/,"$1").replace(/^([^\/]+)\/$/,"$1"),"http"===t?a=a.replace(/^([^\/]+)(:80)([^\d]|\/|$)/,"$1$3"):"https"===t&&(a=a.replace(/^([^\/]+)(:443)([^\d]|\/|$)/,"$1$3"));var n=a,r=t+"://"+a,i='<a href="'+r+'">';return"http"===t||"https"===t?(n=n.replace(/^www\./,""),i+("http"===t?n:t+"://"+n)+"</a>"):i+r+"</a>"})},disabled:!0}),e.addRule({name:"common/nbsp/afterNumber",handler:function(e){var t="(^|\\D)(\\d{1,5}) (["+this.getData("char")+"]{2,})";return e.replace(new RegExp(t,"gi"),"$1$2\xa0$3")},disabled:!0}),e.addRule({name:"common/nbsp/afterParagraph",handler:function(e){return e.replace(/\u00A7[ \u00A0\u2009]?(\d|I|V|X)/g,"\xa7\u202f$1")}}),e.addRule({name:"common/nbsp/afterShortWord",handler:function(t,a){var n=a.lengthShortWord,r=" \xa0("+e._privateLabel+this.getData("common/quote"),i="(^|["+r+"])(["+this.getData("char")+"]{1,"+n+"}) ",s="$1$2\xa0",u=new RegExp(i,"gim");return t.replace(u,s).replace(u,s)},settings:{lengthShortWord:2}}),e.addRule({name:"common/nbsp/beforeShortLastNumber",handler:function(e,t){var a=this.getData("char"),n=a.toUpperCase(),r=new RegExp("(["+a+n+"]) (?=\\d{1,"+t.lengthLastNumber+"}[-+\u2212%'\""+this.getData("quote").right+"]?([.!?\u2026]( ["+n+"]|$)|$))","gm");return e.replace(r,"$1\xa0")},live:!1,settings:{lengthLastNumber:2}}),e.addRule({name:"common/nbsp/beforeShortLastWord",handler:function(e,t){var a=this.getData("char"),n=a.toUpperCase(),r=new RegExp("(["+a+"\\d]) (["+a+n+"]{1,"+t.lengthLastWord+"}[.!?\u2026])( ["+n+"]|$)","g");return e.replace(r,"$1\xa0$2$3")},settings:{lengthLastWord:3}}),e.addRule({name:"common/nbsp/dpi",handler:function(e){return e.replace(/(\d) ?(lpi|dpi)(?!\w)/,"$1\xa0$2")}}),function(){function t(e,t,a,n){return t+a.replace(/([^\u00A0])\u00A0([^\u00A0])/g,"$1 $2")+n}e.addRule({name:"common/nbsp/nowrap",queue:"end",handler:function(e){return e.replace(/(<nowrap>)(.*?)(<\/nowrap>)/g,t).replace(/(<nobr>)(.*?)(<\/nobr>)/g,t)}})}(),e.addRule({name:"common/nbsp/replaceNbsp",queue:"utf",live:!1,handler:e._replaceNbsp,disabled:!0}),e.addRule({name:"common/number/fraction",handler:function(e){return e.replace(/(^|\D)1\/2(\D|$)/g,"$1\xbd$2").replace(/(^|\D)1\/4(\D|$)/g,"$1\xbc$2").replace(/(^|\D)3\/4(\D|$)/g,"$1\xbe$2")}}),e.addRule({name:"common/number/mathSigns",handler:function(t){return e._replace(t,[[/!=/g,"\u2260"],[/<=/g,"\u2264"],[/(^|[^=])>=/g,"$1\u2265"],[/<=>/g,"\u21d4"],[/<</g,"\u226a"],[/>>/g,"\u226b"],[/~=/g,"\u2245"],[/(^|[^+])\+-/g,"$1\xb1"]])}}),e.addRule({name:"common/number/times",handler:function(e){return e.replace(/(\d)[ \u00A0]?[x\u0445][ \u00A0]?(\d)/g,"$1\xd7$2")}}),e.addRule({name:"common/other/delBOM",queue:"start",index:-1,handler:function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}}),e.addRule({name:"common/other/repeatWord",handler:function(e,t){var a="[;:,.?! \n"+this.getData("common/quote")+"]",n=new RegExp("("+a+"|^)(["+this.getData("char")+"]{"+t.min+",}) \\2("+a+"|$)","gi");return e.replace(n,"$1$2$3")},settings:{min:2},disabled:!0}),e.addRule({name:"common/punctuation/apostrophe",handler:function(e){var t="(["+this.getData("char")+"])",a=new RegExp(t+"'"+t,"gi");return e.replace(a,"$1\u2019$2")}}),e.addRule({name:"common/punctuation/delDoublePunctuation",handler:function(e){return e.replace(/(^|[^,]),,(?!,)/g,"$1,").replace(/(^|[^:])::(?!:)/g,"$1:").replace(/(^|[^!?\.])\.\.(?!\.)/g,"$1.").replace(/(^|[^;]);;(?!;)/g,"$1;").replace(/(^|[^?])\?\?(?!\?)/g,"$1?")}}),e.addRule({name:"common/punctuation/quote",handler:function(e,t){var a=this._locale[0],n=t[a];if(!n)return e;var r=n.left[0],i=n.right[0],s=n.left[1]||r;return e=this._setQuotes(e,n),n.removeDuplicateQuotes&&r===s&&(e=e.replace(new RegExp(r+r,"g"),r).replace(new RegExp(i+i,"g"),i)),e},settings:function(){var t={};return e.getLocales().forEach(function(a){t[a]=e.deepCopy(e.getData(a+"/quote"))}),t}}),e.prototype._setQuotes=function(t,a){var n=e._privateLabel,r=a.left[0],i=a.right[0],s=a.left[1]||r,u="["+e.getData("common/quote")+"]",l=new RegExp('(^|[\\s[(])("{1,3})(?=\\S)',"gim"),o=new RegExp('(\\S)("{1,3})(?=[!?.:;#*,\u2026)\\s'+n+"]|$)","gim"),c=new RegExp(u,"g"),d=new RegExp("("+n+')"(?=[^\\s'+n+"]|$)","gm"),h=0;return t=t.replace(c,function(){return h++,'"'}).replace(l,function(t,a,n){return a+e._repeat(r,n.length)}).replace(o,function(t,a,n){return a+e._repeat(i,n.length)}).replace(d,"$1"+i),r!==s&&h%2===0&&(t=this._setInnerQuotes(t,a)),t},e.prototype._setInnerQuotes=function(e,t){for(var a=[],n=[],r=0;r<t.left.length;r++)a.push(t.left[r]),n.push(t.right[r]);for(var i=t.left[0],s=t.right[0],u=new Array(e.length),l=-1,o=a.length-1,c=l,d=0,h=e.length;d<h;d++){var p=e[d];p===i?(c++,c>o&&(c=o),u.push(a[c])):p===s?c<=l?(c=0,u.push(a[c])):(u.push(n[c]),c--,c<l&&(c=l)):('"'===p&&(c=l),u.push(p))}return u.join("")},e.addRule({name:"common/punctuation/quoteLink",queue:"show-safe-tags-html",handler:function(t){var a=this.getSetting("common/punctuation/quote",this._locale[0]);if(!a)return t;var n=e.HtmlEntities,r=n.getByUtf(a.left[0]),i=n.getByUtf(a.right[0]),s=n.getByUtf(a.left[1]),u=n.getByUtf(a.right[1]);s=s?"|"+s:"",u=u?"|"+u:"";var l=new RegExp("(<[aA]\\s[^>]*?>)("+r+s+")([^]*?)("+i+u+")(</[aA]>)","g");return t.replace(l,"$2$1$3$5$4")}}),e.addRule({name:"common/space/afterPunctuation",handler:function(t){var a=e._privateLabel,n=new RegExp("(!|;|\\?)([^).!;?\\s[\\])"+a+this.getData("common/quote")+"])","g"),r=new RegExp('(\\D)(,|:)([^)",:.?\\s\\/\\\\'+a+"])","g");return t.replace(n,"$1 $2").replace(r,"$1$2 $3")}}),e.addRule({name:"common/space/beforeBracket",handler:function(e){var t=new RegExp("(["+this.getData("char")+".!?,;\u2026)])\\(","gi");return e.replace(t,"$1 (")}}),e.addRule({name:"common/space/bracket",handler:function(e){return e.replace(/(\() +/g,"(").replace(/ +\)/g,")")}}),e.addRule({name:"common/space/delBeforePercent",handler:function(e){return e.replace(/(\d)( |\u00A0)(%|\u2030|\u2031)/g,"$1$3")}}),e.addRule({name:"common/space/delBeforePunctuation",handler:function(e){return e.replace(/ ([!;,?.:])(?!\))/g,"$1")}}),e.addRule({name:"common/space/delLeadingBlanks",handler:function(e){return e.replace(/\n[ \t]+/g,"\n")},disabled:!0}),e.addRule({name:"common/space/delRepeatN",index:"-1",handler:function(e){return e.replace(/\n{3,}/g,"\n\n")}}),e.addRule({name:"common/space/delRepeatSpace",index:"-1",handler:function(e){return e.replace(/([^\n \t])[ \t]{2,}(?![\n \t])/g,"$1 ")}}),e.addRule({name:"common/space/delTrailingBlanks",index:"-3",handler:function(e){return e.replace(/[ \t]+\n/g,"\n")}}),e.addRule({name:"common/space/replaceTab",index:"-5",handler:function(e){return e.replace(/\t/g," ")}}),e.addRule({name:"common/space/squareBracket",handler:function(e){return e.replace(/(\[) +/g,"[").replace(/ +\]/g,"]")}}),e.addRule({name:"common/space/trimLeft",index:"-4",handler:String.prototype.trimLeft?function(e){return e.trimLeft()}:function(e){return e.replace(/^[\s\uFEFF\xA0]+/g,"")}}),e.addRule({name:"common/space/trimRight",index:"-3",live:!1,handler:String.prototype.trimRight?function(e){return e.trimRight()}:function(e){return e.replace(/[\s\uFEFF\xA0]+$/g,"")}}),e.addRule({name:"common/symbols/arrow",handler:function(t){return e._replace(t,[[/(^|[^-])->(?!>)/g,"$1\u2192"],[/(^|[^<])<-(?!-)/g,"$1\u2190"]])}}),e.addRule({name:"common/symbols/cf",handler:function(e){var t=new RegExp('(^|[^%])(\\d+)( |\xa0)?(C|F)([\\W \\.,:!\\?"\\]\\)]|$)',"g");return e.replace(t,"$1$2\u2009\xb0$4$5")}}),e.addRule({name:"common/symbols/copy",handler:function(t){return e._replace(t,[[/\(r\)/gi,"\xae"],[/(copyright )?\((c|\u0441)\)/gi,"\xa9"],[/\(tm\)/gi,"\u2122"]])}}),e.addRule({name:"ru/dash/centuries",handler:function(e,t){var a="("+this.getData("common/dash")+")",n=new RegExp("(X|I|V)[ |\xa0]?"+a+"[ |\xa0]?(X|I|V)","g");return e.replace(n,"$1"+t.dash+"$3")},settings:{dash:"\u2013"}}),e.addRule({name:"ru/dash/daysMonth",handler:function(e,t){var a=new RegExp("(^|\\s)([123]?\\d)("+this.getData("common/dash")+")([123]?\\d)[ \xa0]("+this.getData("ru/monthGenCase")+")","g");return e.replace(a,"$1$2"+t.dash+"$4\xa0$5")},settings:{dash:"\u2013"}}),e.addRule({name:"ru/dash/de",handler:function(e){var t=new RegExp("([a-\u044f\u0451]+) \u0434\u0435"+this.getData("ru/dashAfterDe"),"g");return e.replace(t,"$1-\u0434\u0435")},disabled:!0}),e.addRule({name:"ru/dash/decade",handler:function(e,t){var a=new RegExp("(^|\\s)(\\d{3}|\\d)0("+this.getData("common/dash")+")(\\d{3}|\\d)0(-\u0435[ \xa0])(?=\u0433\\.?[ \xa0]?\u0433|\u0433\u043e\u0434)","g");return e.replace(a,"$1$20"+t.dash+"$40$5")},settings:{dash:"\u2013"}}),e.addRule({name:"ru/dash/directSpeech",handler:function(t){var a=this.getData("common/dash"),n=new RegExp('(["\xbb\u2018\u201c,])[ |\xa0]?('+a+")[ |\xa0]","g"),r=new RegExp("(^|"+e._privateLabel+")("+a+")( |\xa0)","gm"),i=new RegExp("([.\u2026?!])[ \xa0]("+a+")[ \xa0]","g");return t.replace(n,"$1\xa0\u2014 ").replace(r,"$1\u2014\xa0").replace(i,"$1 \u2014\xa0")}}),e.addRule({name:"ru/dash/izpod",handler:function(e){var t=new RegExp(this.getData("ru/dashBefore")+"(\u0418|\u0438)\u0437 \u043f\u043e\u0434"+this.getData("ru/dashAfter"),"g");return e.replace(t,"$1$2\u0437-\u043f\u043e\u0434")}}),e.addRule({name:"ru/dash/izza",handler:function(e){var t=new RegExp(this.getData("ru/dashBefore")+"(\u0418|\u0438)\u0437 \u0437\u0430"+this.getData("ru/dashAfter"),"g");return e.replace(t,"$1$2\u0437-\u0437\u0430")}}),e.addRule({name:"ru/dash/ka",handler:function(e){var t=new RegExp("([a-\u044f\u0451]+) \u043a\u0430(\u0441\u044c)?"+this.getData("ru/dashAfter"),"g");return e.replace(t,"$1-\u043a\u0430$2")}}),e.addRule({name:"ru/dash/koe",handler:function(e){var t=new RegExp(this.getData("ru/dashBefore")+"([\u041a\u043a]\u043e[\u0435\u0439])\\s([\u0430-\u044f\u0451]{3,})"+this.getData("ru/dashAfter"),"g");return e.replace(t,"$1$2-$3")}}),e.addRule({name:"ru/dash/main",index:"-5",handler:function(e){var t=this.getData("common/dash"),a=new RegExp("([ \xa0])("+t+")([ \xa0\\n])","g");return e.replace(a,"\xa0\u2014$3")}}),e.addRule({name:"ru/dash/month",handler:function(e,t){var a="("+this.getData("ru/month")+")",n="("+this.getData("ru/monthPreCase")+")",r=this.getData("common/dash"),i=new RegExp(a+" ?("+r+") ?"+a,"gi"),s=new RegExp(n+" ?("+r+") ?"+n,"gi"),u="$1"+t.dash+"$3";return e.replace(i,u).replace(s,u)},settings:{dash:"\u2013"}}),e.addRule({name:"ru/dash/surname",handler:function(e){var t=new RegExp("([\u0410-\u042f\u0401][\u0430-\u044f\u0451]+)\\s-([\u0430-\u044f\u0451]{1,3})(?![^\u0430-\u044f\u0451]|$)","g");
return e.replace(t,"$1\xa0\u2014$2")}}),e.addRule({name:"ru/dash/taki",handler:function(e){var t=new RegExp("(\u0432\u0435\u0440\u043d\u043e|\u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e|\u043e\u043f\u044f\u0442\u044c|\u043f\u0440\u044f\u043c\u043e|\u0442\u0430\u043a|\u0432\u0441[\u0435\u0451]|\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e|\u043d\u0435\u0443\u0436\u0435\u043b\u0438)\\s(\u0442\u0430\u043a\u0438)"+this.getData("ru/dashAfter"),"g");return e.replace(t,"$1-$2")}}),e.addRule({name:"ru/dash/time",handler:function(e,t){var a=new RegExp(this.getData("ru/dashBefore")+"(\\d?\\d:[0-5]\\d)"+this.getData("common/dash")+"(\\d?\\d:[0-5]\\d)"+this.getData("ru/dashAfter"),"g");return e.replace(a,"$1$2"+t.dash+"$3")},settings:{dash:"\u2013"}}),e.addRule({name:"ru/dash/to",handler:function(e){var t=["\u043e\u0442\u043a\u0443\u0434\u0430","\u043a\u0443\u0434\u0430","\u0433\u0434\u0435","\u043a\u043e\u0433\u0434\u0430","\u0437\u0430\u0447\u0435\u043c","\u043f\u043e\u0447\u0435\u043c\u0443","\u043a\u0430\u043a","\u043a\u0430\u043a\u043e[\u0435\u0439\u043c]","\u043a\u0430\u043a\u0430\u044f","\u043a\u0430\u043a\u0438[\u0435\u043c\u0445]","\u043a\u0430\u043a\u0438\u043c\u0438","\u043a\u0430\u043a\u0443\u044e","\u0447\u0442\u043e","\u0447\u0435\u0433\u043e","\u0447\u0435[\u0439\u043c]","\u0447\u044c\u0438\u043c?","\u043a\u0442\u043e","\u043a\u043e\u0433\u043e","\u043a\u043e\u043c\u0443","\u043a\u0435\u043c"],a=new RegExp("("+t.join("|")+")( | -|- )(\u0442\u043e|\u043b\u0438\u0431\u043e|\u043d\u0438\u0431\u0443\u0434\u044c)"+this.getData("ru/dashAfter"),"gi");return e.replace(a,"$1-$3")}}),e.addRule({name:"ru/dash/weekday",handler:function(e,t){var a="("+this.getData("ru/weekday")+")",n=new RegExp(a+" ?("+this.getData("common/dash")+") ?"+a,"gi");return e.replace(n,"$1"+t.dash+"$3")},settings:{dash:"\u2013"}}),e.addRule({name:"ru/dash/years",handler:function(e,t){var a=this.getData("common/dash"),n=new RegExp("(\\D|^)(\\d{4})[ \xa0]?("+a+")[ \xa0]?(\\d{4})(?=[ \xa0]?\u0433)","g");return e.replace(n,function(e,a,n,r,i){return parseInt(n,10)<parseInt(i,10)?a+n+t.dash+i:e})},settings:{dash:"\u2013"}}),e.addRule({name:"ru/date/fromISO",handler:function(e){var t="(-|\\.|\\/)",a="(-|\\/)",n=new RegExp("(^|\\D)(\\d{4})"+t+"(\\d{2})"+t+"(\\d{2})(\\D|$)","gi"),r=new RegExp("(^|\\D)(\\d{2})"+a+"(\\d{2})"+a+"(\\d{4})(\\D|$)","gi");return e.replace(n,"$1$6.$4.$2$7").replace(r,"$1$4.$2.$6$7")}}),e.addRule({name:"ru/date/weekday",handler:function(e){var t="( |\xa0)",a=this.getData("ru/monthGenCase"),n=this.getData("ru/weekday"),r=new RegExp("(\\d)"+t+"("+a+"),"+t+"("+n+")","gi");return e.replace(r,function(){var e=arguments;return e[1]+e[2]+e[3].toLowerCase()+","+e[4]+e[5].toLowerCase()})}}),e.addRule({name:"ru/money/currency",handler:function(e){var t="([$\u20ac\xa5\u04b0\xa3\u20a4\u20bd])",a=new RegExp("(^|[\\D]{2})"+t+" ?([\\d.,]+([ \xa0\u2009\u202f]\\d{3})*)","g"),n=new RegExp("(^|[\\D])([\\d.,]+) ?"+t,"g"),r="$1$3\xa0$2",i="$1$2\xa0$3";return e.replace(a,r).replace(n,i)}}),e.addRule({name:"ru/money/ruble",handler:function(e){var t="$1\xa0\u20bd",a="(\\d+)( |\xa0)?(\u0440|\u0440\u0443\u0431)\\.",n=new RegExp("^"+a+"$","g"),r=new RegExp(a+"(?=[!?,:;])","g"),i=new RegExp(a+"(?=\\s+[A-\u042f\u0401])","g");return e.replace(n,t).replace(r,t).replace(i,t+".")},disabled:!0}),e.addRule({name:"ru/nbsp/abbr",handler:function(t){function a(e,t,a,n){return["\u0440\u0444","\u0440\u0443","\u0440\u0443\u0441","\u043e\u0440\u0433","\u0443\u043a\u0440","\u0431\u0433","\u0441\u0440\u0431"].indexOf(n)>-1?e:t+a+".\xa0"+n+"."}var n=new RegExp("(^|\\s|"+e._privateLabel+")([\u0430-\u044f\u0451]{1,3})\\. ?([\u0430-\u044f\u0451]{1,3})\\.","g");return t.replace(n,a).replace(n,a)}}),e.addRule({name:"ru/nbsp/addr",handler:function(e){return e.replace(/(\s|^)(\u0434\u043e\u043c|\u0434\.|\u043a\u0432\.|\u043f\u043e\u0434\.|\u043f\-\u0434) *(\d+)/gi,"$1$2\xa0$3").replace(/(\s|^)(\u043c\u043a\u0440-\u043d|\u043c\u043a-\u043d|\u043c\u043a\u0440\.|\u043c\u043a\u0440\u043d)\s/gi,"$1$2\xa0").replace(/(\s|^)(\u044d\u0442\.) *(-?\d+)/gi,"$1$2\xa0$3").replace(/(\s|^)(\d+) +\u044d\u0442\u0430\u0436([^\u0430-\u044f\u0451]|$)/gi,"$1$2\xa0\u044d\u0442\u0430\u0436$3").replace(/(\s|^)\u043b\u0438\u0442\u0435\u0440\s([\u0410-\u042f]|$)/gi,"$1\u043b\u0438\u0442\u0435\u0440\xa0$2").replace(/(\s|^)(\u043e\u0431\u043b|\u043a\u0440|\u0441\u0442|\u043f\u043e\u0441|\u0441|\u0434|\u0443\u043b|\u043f\u0435\u0440|\u043f\u0440|\u043f\u0440\-\u0442|\u043f\u0440\u043e\u0441\u043f|\u043f\u043b|\u0431\u0443\u043b|\u0431\-\u0440|\u043d\u0430\u0431|\u0448|\u0442\u0443\u043f|\u043e\u0444|\u043a\u043e\u043c\u043d?|\u0443\u0447|\u0432\u043b|\u0432\u043b\u0430\u0434|\u0441\u0442\u0440|\u043a\u043e\u0440)\. *([\u0430-\u044f\u0451a-z\d]+)/gi,"$1$2.\xa0$3").replace(/(\D[ \u00A0]|^)\u0433\. ?([\u0410-\u042f\u0401])/gm,"$1\u0433.\xa0$2")}}),e.addRule({name:"ru/nbsp/afterNumberSign",handler:function(e){return e.replace(/\u2116[ \u00A0\u2009]?(\d|\u043f\/\u043f)/g,"\u2116\u202f$1")}}),e.addRule({name:"ru/nbsp/beforeParticle",index:"+5",handler:function(e){var t="(\u043b\u0438|\u043b\u044c|\u0436\u0435|\u0436|\u0431\u044b|\u0431)",a=new RegExp("([\u0410-\u042f\u0401\u0430-\u044f\u0451]) "+t+'(?=[,;:?!"\u2018\u201c\xbb])',"g"),n=new RegExp("([\u0410-\u042f\u0401\u0430-\u044f\u0451])[ \xa0]"+t+"[ \xa0]","g");return e.replace(a,"$1\xa0$2").replace(n,"$1\xa0$2 ")}}),e.addRule({name:"ru/nbsp/centuries",handler:function(e){var t=this.getData("common/dash"),a="(^|\\s)([VIX]+)",n='(?=[,;:?!"\u2018\u201c\xbb]|$)',r=new RegExp(a+"[ \xa0]?\u0432\\.?"+n,"gm"),i=new RegExp(a+"("+t+")([VIX]+)[ \xa0]?\u0432\\.?([ \xa0]?\u0432\\.?)?"+n,"gm");return e.replace(r,"$1$2\xa0\u0432.").replace(i,"$1$2$3$4\xa0\u0432\u0432.")}}),e.addRule({name:"ru/nbsp/dayMonth",handler:function(e){var t=new RegExp("(\\d{1,2}) ("+this.getData("ru/shortMonth")+")","gi");return e.replace(t,"$1\xa0$2")}}),e.addRule({name:"ru/nbsp/groupNumbers",handler:function(e){return e.replace(/(^ ?|\D )(\d{1,3}([ \u00A0\u202F\u2009]\d{3})+)(?! ?[\d-])/gm,function(e,t,a){return t+a.replace(/\s/g,"\u202f")})}}),e.addRule({name:"ru/nbsp/initials",handler:function(t){var a="\xa0\u202f ",n=this.getData("ru/quote"),r=new RegExp("(^|["+a+n.left+e._privateLabel+'"])([\u0410-\u042f\u0401])\\.['+a+"]?([\u0410-\u042f\u0401])\\.["+a+']?([\u0410-\u042f\u0401][\u0430-\u044f\u0451]+)(?=[\\s.,;:?!"'+n.right+"]|$)","gm");return t.replace(r,"$1$2.\xa0$3.\xa0$4")}}),e.addRule({name:"ru/nbsp/m",index:"+5",handler:function(t){var a=e._privateLabel,n=new RegExp("(^|[\\s,."+a+"])(\\d+)[ \xa0]?(\u043c\u043c?|\u0441\u043c|\u043a\u043c|\u0434\u043c|\u0433\u043c|mm?|km|cm|dm)([23\xb2\xb3])?([\\s.!?,;"+a+"]|$)","gm");return t.replace(n,function(e,t,a,n,r,i){var s={2:"\xb2","\xb2":"\xb2",3:"\xb3","\xb3":"\xb3","":""}[r||""];return t+a+"\xa0"+n+s+("\xa0"===i?" ":i)})}}),e.addRule({name:"ru/nbsp/ooo",handler:function(e){return e.replace(/(^|[^a-\u044f\u0451A-\u042f\u0401])(\u041e\u041e\u041e|\u041e\u0410\u041e|\u0417\u0410\u041e|\u041d\u0418\u0418|\u041f\u0411\u041e\u042e\u041b) /g,"$1$2\xa0")}}),e.addRule({name:"ru/nbsp/page",handler:function(t){var a=new RegExp("(^|[)\\s"+e._privateLabel+"])(\u0441\u0442\u0440|\u0433\u043b|\u0440\u0438\u0441|\u0438\u043b\u043b?|\u0441\u0442|\u043f|c)\\. *(\\d+)([\\s.,?!;:]|$)","gim");return t.replace(a,"$1$2.\xa0$3$4")}}),e.addRule({name:"ru/nbsp/ps",handler:function(t){var a=new RegExp("(^|\\s|"+e._privateLabel+")[p\u0437]\\.[ \xa0]?([p\u0437]\\.[ \xa0]?)?[s\u044b]\\.:? ","gim");return t.replace(a,function(e,t,a){return t+(a?"P.\xa0P.\xa0S. ":"P.\xa0S. ")})}}),e.addRule({name:"ru/nbsp/rubleKopek",handler:function(e){return e.replace(/(\d) ?(?=(\u0440\u0443\u0431|\u043a\u043e\u043f)\.)/g,"$1\xa0")}}),e.addRule({name:"ru/nbsp/see",handler:function(t){var a=new RegExp("(^|\\s|"+e._privateLabel+"|\\()(\u0441\u043c|\u0438\u043c)\\.[ \xa0]?([\u0430-\u044f\u04510-9a-z]+)([\\s.,?!]|$)","gi");return t.replace(a,function(e,t,a,n,r){return("\xa0"===t?" ":t)+a+".\xa0"+n+r})}}),e.addRule({name:"ru/nbsp/year",handler:function(e){return e.replace(/(^|\D)(\d{4}) ?\u0433([ ,;.\n]|$)/g,"$1$2\xa0\u0433$3")}}),e.addRule({name:"ru/nbsp/years",index:"+5",handler:function(e){var t=this.getData("common/dash"),a=new RegExp("(^|\\D)(\\d{4})("+t+')(\\d{4})[ \xa0]?\u0433\\.?([ \xa0]?\u0433\\.)?(?=[,;:?!"\u2018\u201c\xbb\\s]|$)',"gm");return e.replace(a,"$1$2$3$4\xa0\u0433\u0433.")}}),e.addRule({name:"ru/number/comma",handler:function(e){return e.replace(/(^|\s)(\d+)\.(\d+[\u00A0\u2009\u202F ]*?[%\u2030\xb0\xd7x])/gim,"$1$2,$3")}}),e.addRule({name:"ru/number/ordinals",handler:function(e){var t=new RegExp("(\\d[%\u2030]?)-(\u044b\u0439|\u043e\u0439|\u0430\u044f|\u043e\u0435|\u044b\u0435|\u044b\u043c|\u043e\u043c|\u044b\u0445|\u043e\u0433\u043e|\u043e\u043c\u0443|\u044b\u043c\u0438)(?!["+this.getData("char")+"])","g");return e.replace(t,function(e,t,a){var n={"\u043e\u0439":"\u0439","\u044b\u0439":"\u0439","\u0430\u044f":"\u044f","\u043e\u0435":"\u0435","\u044b\u0435":"\u0435","\u044b\u043c":"\u043c","\u043e\u043c":"\u043c","\u044b\u0445":"\u0445","\u043e\u0433\u043e":"\u0433\u043e","\u043e\u043c\u0443":"\u043c\u0443","\u044b\u043c\u0438":"\u043c\u0438"};return t+"-"+n[a]})}}),function(){var t=["typograf-oa-lbracket","typograf-oa-n-lbracket","typograf-oa-sp-lbracket"],a="ru/optalign/bracket";e.addRule({name:a,handler:function(e){return e.replace(/( |\u00A0)\(/g,'<span class="typograf-oa-sp-lbracket">$1</span><span class="typograf-oa-lbracket">(</span>').replace(/^\(/gm,'<span class="typograf-oa-n-lbracket">(</span>')},disabled:!0}).addInnerRule({name:a,queue:"start",handler:function(a){return e._removeOptAlignTags(a,t)}}).addInnerRule({name:a,queue:"end",handler:function(a){return e._removeOptAlignTagsFromTitle(a,t)}})}(),function(){var t=["typograf-oa-comma","typograf-oa-comma-sp"],a="ru/optalign/comma";e.addRule({name:a,handler:function(e){var t=new RegExp("(["+this.getData("char")+"\\d\u0301]+), ","gi");return e.replace(t,'$1<span class="typograf-oa-comma">,</span><span class="typograf-oa-comma-sp"> </span>')},disabled:!0}).addInnerRule({name:a,queue:"start",handler:function(a){return e._removeOptAlignTags(a,t)}}).addInnerRule({name:a,queue:"end",handler:function(a){return e._removeOptAlignTagsFromTitle(a,t)}})}(),e._removeOptAlignTags=function(e,t){var a=new RegExp('<span class="('+t.join("|")+')">([^]*?)</span>',"g");return e.replace(a,"$2")},e._removeOptAlignTagsFromTitle=function(t,a){return t.replace(/<title>[^]*?<\/title>/i,function(t){return e._removeOptAlignTags(t,a)})},function(){var t=["typograf-oa-lquote","typograf-oa-n-lquote","typograf-oa-sp-lquote"],a="ru/optalign/quote";e.addRule({name:a,handler:function(t){var a=this.getSetting("common/punctuation/quote","ru"),n="(["+a.left[0]+(a.left[1]||"")+"])",r=new RegExp("(^|\n\n|"+e._privateLabel+")("+n+")","g"),i=new RegExp("([^\n"+e._privateLabel+"])([ \xa0\n])("+n+")","gi");return t.replace(r,'$1<span class="typograf-oa-n-lquote">$2</span>').replace(i,'$1<span class="typograf-oa-sp-lquote">$2</span><span class="typograf-oa-lquote">$3</span>')},disabled:!0}).addInnerRule({name:a,queue:"start",handler:function(a){return e._removeOptAlignTags(a,t)}}).addInnerRule({name:a,queue:"end",handler:function(a){return e._removeOptAlignTagsFromTitle(a,t)}})}(),e.addRule({name:"ru/other/accent",handler:function(e){return e.replace(/([\u0430-\u044f\u0451])([\u0410\u0415\u0401\u0418\u041e\u0423\u042b\u042d\u042e\u042f])([^\u0410-\u042f\u0401\w]|$)/g,function(e,t,a,n){return t+a.toLowerCase()+"\u0301"+n})},disabled:!0}),function(){function t(e){var t,r,c="",d=e[0];if(e.length<8)return n(e);if(e.length>10)if("+"===d){if(e[1]!==s)return e;t=!0,e=e.substr(2)}else"8"===d&&(r=!0,e=e.substr(1));for(var h=l;h>=o;h--){var p=+e.substr(0,h);if(u.indexOf(p)>-1){c=e.substr(0,h),e=e.substr(h);break}}return c||(c=e.substr(0,i),e=e.substr(i)),(t?"+"+s+"\xa0":"")+(r?"8\xa0":"")+a(c)+"\xa0"+n(e)}function a(e){var t=+e,a=e.length,n=[e],r=!1;if(a>3)switch(a){case 4:n=[e.substr(0,2),e.substr(2,2)];break;case 5:n=[e.substr(0,3),e.substr(3,3)];break;case 6:n=[e.substr(0,2),e.substr(2,2),e.substr(4,2)]}else r=t>900&&t<=999||495===t||499===t;return n=n.join("-"),r?n:"("+n+")"}function n(e){var t="";return e.length%2&&(t=e[0],t+=e.length<=5?"-":"",e=e.substr(1,e.length-1)),t+e.split(/(?=(?:\d\d)+$)/).join("-")}function r(e){return e.replace(/[^\d\+]/g,"")}var i=5,s="7",u=[],l=8,o=2;[4162,416332,8512,851111,4722,4725,391379,8442,4732,4152,4154451,4154459,4154455,41544513,8142,8332,8612,8622,3525,812,8342,8152,3812,4862,3422,342633,8112,9142,8452,3432,3434,3435,4812,3919,8432,8439,3822,4872,3412,3511,3512,3022,4112,4852,4855,3852,3854,8182,818,90,3472,4741,4764,4832,4922,8172,8202,8722,4932,493,3952,3951,3953,411533,4842,3842,3843,8212,4942,3912,4712,4742,8362,495,499,4966,4964,4967,498,8312,8313,3832,383612,3532,8412,4232,423370,423630,8632,8642,8482,4242,8672,8652,4752,4822,482502,4826300,3452,8422,4212,3466,3462,8712,8352,"901-934","936-939","950-953",958,"960-969","977-989","991-997",999].forEach(function(e){if("string"==typeof e)for(var t=e.split("-"),a=+t[0];a<=+t[1];a++)u.push(a);else u.push(e)}),e.addRule({name:"ru/other/phone-number",live:!1,handler:function(a){var n=e._privateLabel,i=new RegExp("(^|,| |"+n+")(\\+7[\\d\\(\\) \xa0-]{10,18})(?=,|;|"+n+"|$)","gm");return a.replace(i,function(e,a,n){var i=r(n);return 12===i.length?a+t(i):e}).replace(/(^|[^\u0430-\u044f\u0451])(\u0442\.|\u0442\u0435\u043b\.|\u0444\.|\u043c\u043e\u0431\.|\u0444\u0430\u043a\u0441|\u0441\u043e\u0442\u043e\u0432\u044b\u0439|\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439|\u0442\u0435\u043b\u0435\u0444\u043e\u043d)(\:?\s*?)([\+\d\(][\d \u00A0\-\(\)]{3,}\d)/gi,function(e,a,n,i,s){var u=r(s);return u.length>=5?a+n+i+t(u):e})}})}(),e.addRule({name:"ru/punctuation/ano",handler:function(e){var t=new RegExp("([^!?,:;\\-\u2012\u2013\u2014])([ \xa0\\n])(\u0430|\u043d\u043e)(?= |\xa0|\\n)","g");return e.replace(t,"$1,$2$3")}}),e.addRule({name:"ru/punctuation/exclamation",live:!1,handler:function(e){return e.replace(/(^|[^!])!{2}($|[^!])/,"$1!$2").replace(/(^|[^!])!{4}($|[^!])/,"$1!!!$2")}}),e.addRule({name:"ru/punctuation/exclamationQuestion",index:"+5",handler:function(e){var t=new RegExp("(^|[^!])!\\?([^?]|$)","g");return e.replace(t,"$1?!$2")}}),e.addRule({name:"ru/punctuation/hellip",handler:function(e){return e.replace(/(^|[^.])\.{3,4}([^.]|$)/g,"$1\u2026$2").replace(/(^|[^.])(\.\.\.|\u2026),/g,"$1\u2026").replace(/(\!|\?)(\.\.\.|\u2026)([^.]|$)/g,"$1..$3")}}),e.addRule({name:"ru/space/afterHellip",handler:function(e){return e.replace(/([\u0430-\u044f\u0451])(\.\.\.|\u2026)([\u0410-\u042f\u0401])/g,"$1$2 $3").replace(/([?!]\.\.)([\u0430-\u044f\u0451a-z])/gi,"$1 $2")}}),e.addRule({name:"ru/space/year",handler:function(e){var t=new RegExp("(^| |\xa0)(\\d{3,4})(\u0433\u043e\u0434([\u0430\u0443\u0435]|\u043e\u043c)?)([^"+this.getData("char")+"]|$)","g");return e.replace(t,"$1$2 $3$5")}}),e.addRule({name:"ru/symbols/NN",handler:function(e){return e.replace(/\u2116\u2116/g,"\u2116")}}),function(){var t={A:"\u0410",a:"\u0430",B:"\u0412",E:"\u0415",e:"\u0435",K:"\u041a",M:"\u041c",H:"\u041d",O:"\u041e",o:"\u043e",P:"\u0420",p:"\u0440",C:"\u0421",c:"\u0441",T:"\u0422",y:"\u0443",X:"\u0425",x:"\u0445"},a=Object.keys(t).join("");e.addRule({name:"ru/typo/switchingKeyboardLayout",handler:function(e){var n=new RegExp("(["+a+"]{1,3})(?=[\u0410-\u042f\u0401\u0430-\u044f\u0451]+?)","g");return e.replace(n,function(e,a){for(var n="",r=0;r<a.length;r++)n+=t[a[r]];return n})}})}(),e});
Typograf.titles = {
"common/html/e-mail": {
"en": "Placement of links for e-mail",
"en-US": "Placement of links for e-mail",
"ru": "Расстановка ссылок для эл. почты"
},
"common/html/escape": {
"en": "Escaping HTML",
"en-US": "Escaping HTML",
"ru": "Экранирование HTML"
},
"common/html/nbr": {
"en": "Replacement line break on <br/>",
"en-US": "Replacement line break on <br/>",
"ru": "Замена перевода строки на <br/>"
},
"common/html/p": {
"en": "Placement of paragraph",
"en-US": "Placement of paragraph",
"ru": "Расстановка абзацев"
},
"common/html/stripTags": {
"en": "Removing HTML-tags",
"en-US": "Removing HTML-tags",
"ru": "Удаление HTML-тегов"
},
"common/html/url": {
"en": "Placement of links",
"en-US": "Placement of links",
"ru": "Расстановка ссылок"
},
"common/nbsp/afterNumber": {
"en": "Non-breaking space between number and word",
"en-US": "Non-breaking space between number and word",
"ru": "Нераз. пробел между числом и словом"
},
"common/nbsp/afterParagraph": {
"en": "Non-breaking thin space after §",
"en-US": "Non-breaking thin space after §",
"ru": "Нераз. узкий пробел после §"
},
"common/nbsp/afterShortWord": {
"en": "Non-breaking space after short word",
"en-US": "Non-breaking space after short word",
"ru": "Нераз. пробел после короткого слова"
},
"common/nbsp/beforeShortLastNumber": {
"en": "Non-breaking space before number (maximum 2 digits) at end of sentence",
"en-US": "Non-breaking space before number (maximum 2 digits) at end of sentence",
"ru": "Нераз. пробел перед числом (не более 2 цифр) в конце предложения"
},
"common/nbsp/beforeShortLastWord": {
"en": "Non-breaking space before last short word in sentence",
"en-US": "Non-breaking space before last short word in sentence",
"ru": "Нераз. пробел перед последним коротким словом в предложении"
},
"common/nbsp/dpi": {
"en": "Non-breaking space before lpi and dpi",
"en-US": "Non-breaking space before lpi and dpi",
"ru": "Нераз. пробел перед lpi и dpi"
},
"common/nbsp/nowrap": {
"en": "Replace non-breaking space to normal space in tags nowrap and nobr",
"en-US": "Replace non-breaking space to normal space in tags nowrap and nobr",
"ru": "Заменять нераз. пробел на обычный пробел в тегах nowrap и nobr"
},
"common/nbsp/replaceNbsp": {
"en": "Replacing non-breaking space in the ordinary",
"en-US": "Replacing non-breaking space in the ordinary",
"ru": "Замена неразрывного пробела на обычный"

@@ -68,67 +68,75 @@ },

"common/other/delBOM": {
"en": "Delete character BOM (Byte Order Mark)",
"en-US": "Delete character BOM (Byte Order Mark)",
"ru": "Удаление символа BOM (Byte Order Mark)"
},
"common/other/repeatWord": {
"en": "Removing repeat words",
"en-US": "Removing repeat words",
"ru": "Удаление повтора слова"
},
"common/punctuation/apostrophe": {
"en": "Placement of correct apostrophe",
"en-US": "Placement of correct apostrophe",
"ru": "Расстановка правильного апострофа"
},
"common/punctuation/delDoublePunctuation": {
"en": "Removing double punctuation",
"en-US": "Removing double punctuation",
"ru": "Удаление двойной пунктуации"
},
"common/punctuation/quote": {
"en-US": "Placement of quotation marks in texts",
"ru": "Расстановка кавычек в текстах"
},
"common/punctuation/quoteLink": {
"en-US": "Removal quotes outside a link",
"ru": "Вынос кавычек за пределы ссылки"
},
"common/space/afterPunctuation": {
"en": "space after punctuation",
"en-US": "space after punctuation",
"ru": "Пробел после знаков пунктуации"
},
"common/space/beforeBracket": {
"en": "Space before opening bracket",
"en-US": "Space before opening bracket",
"ru": "Пробел перед открывающей скобкой"
},
"common/space/bracket": {
"en": "Remove extra spaces after opening and before closing bracket",
"en-US": "Remove extra spaces after opening and before closing bracket",
"ru": "Удаление лишних пробелов после открывающей и перед закрывающей скобки"
},
"common/space/delBeforePercent": {
"en": "Remove space before %, ‰ and ‱",
"en-US": "Remove space before %, ‰ and ‱",
"ru": "Удаление пробела перед %, ‰ и ‱"
},
"common/space/delBeforePunctuation": {
"en": "Remove spaces before punctuation",
"en-US": "Remove spaces before punctuation",
"ru": "Удаление пробелов перед знаками пунктуации"
},
"common/space/delLeadingBlanks": {
"en": "Remove spaces at start of line",
"en-US": "Remove spaces at start of line",
"ru": "Удаление пробелов в начале строки"
},
"common/space/delRepeatN": {
"en": "Remove duplicate line breaks (three or more)",
"en-US": "Remove duplicate line breaks (three or more)",
"ru": "Удаление повторяющихся переносов строки (от трёх и более)"
},
"common/space/delRepeatSpace": {
"en": "Removing duplicate spaces between characters",
"en-US": "Removing duplicate spaces between characters",
"ru": "Удаление повторяющихся пробелов между символами"
},
"common/space/delTrailingBlanks": {
"en": "Remove spaces at end of line",
"en-US": "Remove spaces at end of line",
"ru": "Удаление пробелов в конце строки"
},
"common/space/replaceTab": {
"en": "Replacement of tab to 4 spaces",
"en-US": "Replacement of tab to 4 spaces",
"ru": "Замена таба на 4 пробела"
},
"common/space/squareBracket": {
"en": "Remove extra spaces after opening and before closing square bracket",
"en-US": "Remove extra spaces after opening and before closing square bracket",
"ru": "Удаление лишних пробелов после открывающей и перед закрывающей квадратной скобки"
},
"common/space/trimLeft": {
"en": "Remove spaces and line breaks in beginning of text",
"en-US": "Remove spaces and line breaks in beginning of text",
"ru": "Удаление пробелов и переносов строк в начале текста"
},
"common/space/trimRight": {
"en": "Remove spaces and line breaks at end of text",
"en-US": "Remove spaces and line breaks at end of text",
"ru": "Удаление пробелов и переносов строк в конце текста"

@@ -140,3 +148,3 @@ },

"common/symbols/cf": {
"en": "Adding ° to C and F",
"en-US": "Adding ° to C and F",
"ru": "Добавление ° к C и F"

@@ -147,76 +155,72 @@ },

},
"en/punctuation/quote": {
"en": "Placement of quotation marks in texts in English",
"ru": "Расстановка кавычек в текстах на английском"
},
"ru/dash/centuries": {
"en": "Hyphen to dash in centuries",
"en-US": "Hyphen to dash in centuries",
"ru": "Замена дефиса на тире в веках"
},
"ru/dash/daysMonth": {
"en": "Dash between days of one month",
"en-US": "Dash between days of one month",
"ru": "Тире между днями одного месяца"
},
"ru/dash/de": {
"en": "Hyphen before “де”",
"en-US": "Hyphen before “де”",
"ru": "Дефис перед «де»"
},
"ru/dash/decade": {
"en": "Dash in decade",
"en-US": "Dash in decade",
"ru": "Тире в десятилетиях, 80—90-е гг."
},
"ru/dash/directSpeech": {
"en": "Dash in direct speech",
"en-US": "Dash in direct speech",
"ru": "Тире в прямой речи"
},
"ru/dash/izpod": {
"en": "Hyphen between “из-под”",
"en-US": "Hyphen between “из-под”",
"ru": "Дефис между «из-под»"
},
"ru/dash/izza": {
"en": "Hyphen between “из-за”",
"en-US": "Hyphen between “из-за”",
"ru": "Дефис между «из-за»"
},
"ru/dash/ka": {
"en": "Hyphen before “ка” and “кась”",
"en-US": "Hyphen before “ка” and “кась”",
"ru": "Дефис перед «ка» и «кась»"
},
"ru/dash/koe": {
"en": "Hyphen after “кое” and “кой”",
"en-US": "Hyphen after “кое” and “кой”",
"ru": "Дефис после «кое» и «кой»"
},
"ru/dash/main": {
"en": "Replacement hyphen with dash",
"en-US": "Replacement hyphen with dash",
"ru": "Замена дефиса на тире"
},
"ru/dash/month": {
"en": "Dash between months",
"en-US": "Dash between months",
"ru": "Тире между месяцами"
},
"ru/dash/surname": {
"en": "Acronyms with a dash",
"en-US": "Acronyms with a dash",
"ru": "Сокращения с помощью тире"
},
"ru/dash/taki": {
"en": "Hyphen between “верно-таки” and etc.",
"en-US": "Hyphen between “верно-таки” and etc.",
"ru": "Дефис между «верно-таки» и т. д."
},
"ru/dash/time": {
"en": "Dash in time intervals",
"en-US": "Dash in time intervals",
"ru": "Тире в интервалах времени"
},
"ru/dash/to": {
"en": "Hyphen before “то”, “либо”, “нибудь”",
"en-US": "Hyphen before “то”, “либо”, “нибудь”",
"ru": "Дефис перед «то», «либо», «нибудь»"
},
"ru/dash/weekday": {
"en": "Dash between the days of the week",
"en-US": "Dash between the days of the week",
"ru": "Тире между днями недели"
},
"ru/dash/years": {
"en": "Hyphen to dash in years",
"en-US": "Hyphen to dash in years",
"ru": "Замена дефиса на тире в годах"
},
"ru/date/fromISO": {
"en": "Converting dates YYYY-MM-DD type DD.MM.YYYY",
"en-US": "Converting dates YYYY-MM-DD type DD.MM.YYYY",
"ru": "Преобразование дат YYYY-MM-DD к виду DD.MM.YYYY"

@@ -228,3 +232,3 @@ },

"ru/money/currency": {
"en": "Currency symbol ($, €, ¥, Ұ, £ and ₤) after the number, $100 → 100 $",
"en-US": "Currency symbol ($, €, ¥, Ұ, £ and ₤) after the number, $100 → 100 $",
"ru": "Символ валюты ($, €, ¥, Ұ, £ и ₤) после числа, $100 → 100 $"

@@ -236,67 +240,67 @@ },

"ru/nbsp/abbr": {
"en": "Non-breaking space in abbreviations, e.g. “т. д.”",
"en-US": "Non-breaking space in abbreviations, e.g. “т. д.”",
"ru": "Нераз. пробел в сокращениях, например, в «т. д.»"
},
"ru/nbsp/addr": {
"en": "Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al.",
"en-US": "Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al.",
"ru": "Расстановка неразрывного пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др."
},
"ru/nbsp/afterNumberSign": {
"en": "Non-breaking thin space after №",
"en-US": "Non-breaking thin space after №",
"ru": "Нераз. узкий пробел после №"
},
"ru/nbsp/beforeParticle": {
"en": "Non-breaking space before “ли”, “ль”, “же”, “бы”, “б”",
"en-US": "Non-breaking space before “ли”, “ль”, “же”, “бы”, “б”",
"ru": "Нераз. пробел перед «ли», «ль», «же», «бы», «б»"
},
"ru/nbsp/centuries": {
"en": "Remove spaces and extra points in “вв.”",
"en-US": "Remove spaces and extra points in “вв.”",
"ru": "Удаление пробелов и лишних точек в «вв.»"
},
"ru/nbsp/dayMonth": {
"en": "Non-breaking space between number and month",
"en-US": "Non-breaking space between number and month",
"ru": "Нераз. пробел между числом и месяцем"
},
"ru/nbsp/groupNumbers": {
"en": "Replacement space on a narrow non-breaking space in groups of numbers",
"en-US": "Replacement space on a narrow non-breaking space in groups of numbers",
"ru": "Замена пробела на неразрывный узкий пробел в группах чисел"
},
"ru/nbsp/initials": {
"en": "Binding of initials to the name",
"en-US": "Binding of initials to the name",
"ru": "Привязка инициалов к фамилии"
},
"ru/nbsp/m": {
"en": "m2 → м², m3 → м³ and non-breaking space",
"en-US": "m2 → м², m3 → м³ and non-breaking space",
"ru": "м2 → м², м3 → м³ и нераз. пробел"
},
"ru/nbsp/ooo": {
"en": "Non-breaking space after “OOO, ОАО, ЗАО, НИИ, ПБОЮЛ”",
"en-US": "Non-breaking space after “OOO, ОАО, ЗАО, НИИ, ПБОЮЛ”",
"ru": "Нераз. пробел после OOO, ОАО, ЗАО, НИИ и ПБОЮЛ"
},
"ru/nbsp/page": {
"en": "Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.”",
"en-US": "Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.”",
"ru": "Нераз. пробел после «стр.», «гл.», «рис.», «илл.»"
},
"ru/nbsp/ps": {
"en": "Non-breaking space in P. S. and P. P. S.",
"en-US": "Non-breaking space in P. S. and P. P. S.",
"ru": "Нераз. пробел в P. S. и P. P. S."
},
"ru/nbsp/rubleKopek": {
"en": "Not once. space before the “rub” and “cop.”",
"en-US": "Not once. space before the “rub” and “cop.”",
"ru": "Нераз. пробел перед «руб.» и «коп.»"
},
"ru/nbsp/see": {
"en": "Non-breaking space after abbreviation «см.» and «им.»",
"en-US": "Non-breaking space after abbreviation «см.» and «им.»",
"ru": "Нераз. пробел после сокращений «см.» и «им.»"
},
"ru/nbsp/year": {
"en": "Non-breaking space before XXXX г. (2012 г.)",
"en-US": "Non-breaking space before XXXX г. (2012 г.)",
"ru": "Нераз. пробел после XXXX г. (2012 г.)"
},
"ru/nbsp/years": {
"en": "г.г. → гг. and non-breaking space",
"en-US": "г.г. → гг. and non-breaking space",
"ru": "г.г. → гг. и нераз. пробел"
},
"ru/number/comma": {
"en": "Commas in numbers",
"en-US": "Commas in numbers",
"ru": "Замена точки на запятую в числах"

@@ -308,23 +312,23 @@ },

"ru/optalign/bracket": {
"en": "for opening bracket",
"en-US": "for opening bracket",
"ru": "для открывающей скобки"
},
"ru/optalign/comma": {
"en": "for comma",
"en-US": "for comma",
"ru": "для запятой"
},
"ru/optalign/quote": {
"en": "for opening quotation marks",
"en-US": "for opening quotation marks",
"ru": "для открывающей кавычки"
},
"ru/other/accent": {
"en": "Replacement capital letters to lowercase with addition of accent",
"en-US": "Replacement capital letters to lowercase with addition of accent",
"ru": "Замена заглавной буквы на строчную с добавлением ударения"
},
"ru/other/phone-number": {
"en": "Formatting phone numbers",
"en-US": "Formatting phone numbers",
"ru": "Форматирование телефонных номеров"
},
"ru/punctuation/ano": {
"en": "Placement of commas before “а” and “но”",
"en-US": "Placement of commas before “а” and “но”",
"ru": "Расстановка запятых перед «а» и «но»"

@@ -339,15 +343,11 @@ },

"ru/punctuation/hellip": {
"en": "Three points on ellipsis",
"en-US": "Three points on ellipsis",
"ru": "Три точки на многоточие, ?... → ?.. и пр."
},
"ru/punctuation/quote": {
"en": "Placement of quotation marks in texts in Russian",
"ru": "Расстановка кавычек в текстах на русском"
},
"ru/space/afterHellip": {
"en": "Space after ..., !.. and ?..",
"en-US": "Space after ..., !.. and ?..",
"ru": "Пробел после ..., !.. и ?.."
},
"ru/space/year": {
"en": "Space between number and word “год”",
"en-US": "Space between number and word “год”",
"ru": "Пробел между числом и словом «год»"

@@ -359,5 +359,5 @@ },

"ru/typo/switchingKeyboardLayout": {
"en": "Replacement of Latin letters in Russian. Typos occur when you switch keyboard layouts",
"en-US": "Replacement of Latin letters in Russian. Typos occur when you switch keyboard layouts",
"ru": "Замена латинских букв на русские. Опечатки, возникающие при переключении клавиатурной раскладки"
}
};
{
"common/html/e-mail": {
"en": "Placement of links for e-mail",
"en-US": "Placement of links for e-mail",
"ru": "Расстановка ссылок для эл. почты"
},
"common/html/escape": {
"en": "Escaping HTML",
"en-US": "Escaping HTML",
"ru": "Экранирование HTML"
},
"common/html/nbr": {
"en": "Replacement line break on <br/>",
"en-US": "Replacement line break on <br/>",
"ru": "Замена перевода строки на <br/>"
},
"common/html/p": {
"en": "Placement of paragraph",
"en-US": "Placement of paragraph",
"ru": "Расстановка абзацев"
},
"common/html/stripTags": {
"en": "Removing HTML-tags",
"en-US": "Removing HTML-tags",
"ru": "Удаление HTML-тегов"
},
"common/html/url": {
"en": "Placement of links",
"en-US": "Placement of links",
"ru": "Расстановка ссылок"
},
"common/nbsp/afterNumber": {
"en": "Non-breaking space between number and word",
"en-US": "Non-breaking space between number and word",
"ru": "Нераз. пробел между числом и словом"
},
"common/nbsp/afterParagraph": {
"en": "Non-breaking thin space after §",
"en-US": "Non-breaking thin space after §",
"ru": "Нераз. узкий пробел после §"
},
"common/nbsp/afterShortWord": {
"en": "Non-breaking space after short word",
"en-US": "Non-breaking space after short word",
"ru": "Нераз. пробел после короткого слова"
},
"common/nbsp/beforeShortLastNumber": {
"en": "Non-breaking space before number (maximum 2 digits) at end of sentence",
"en-US": "Non-breaking space before number (maximum 2 digits) at end of sentence",
"ru": "Нераз. пробел перед числом (не более 2 цифр) в конце предложения"
},
"common/nbsp/beforeShortLastWord": {
"en": "Non-breaking space before last short word in sentence",
"en-US": "Non-breaking space before last short word in sentence",
"ru": "Нераз. пробел перед последним коротким словом в предложении"
},
"common/nbsp/dpi": {
"en": "Non-breaking space before lpi and dpi",
"en-US": "Non-breaking space before lpi and dpi",
"ru": "Нераз. пробел перед lpi и dpi"
},
"common/nbsp/nowrap": {
"en": "Replace non-breaking space to normal space in tags nowrap and nobr",
"en-US": "Replace non-breaking space to normal space in tags nowrap and nobr",
"ru": "Заменять нераз. пробел на обычный пробел в тегах nowrap и nobr"
},
"common/nbsp/replaceNbsp": {
"en": "Replacing non-breaking space in the ordinary",
"en-US": "Replacing non-breaking space in the ordinary",
"ru": "Замена неразрывного пробела на обычный"

@@ -68,67 +68,75 @@ },

"common/other/delBOM": {
"en": "Delete character BOM (Byte Order Mark)",
"en-US": "Delete character BOM (Byte Order Mark)",
"ru": "Удаление символа BOM (Byte Order Mark)"
},
"common/other/repeatWord": {
"en": "Removing repeat words",
"en-US": "Removing repeat words",
"ru": "Удаление повтора слова"
},
"common/punctuation/apostrophe": {
"en": "Placement of correct apostrophe",
"en-US": "Placement of correct apostrophe",
"ru": "Расстановка правильного апострофа"
},
"common/punctuation/delDoublePunctuation": {
"en": "Removing double punctuation",
"en-US": "Removing double punctuation",
"ru": "Удаление двойной пунктуации"
},
"common/punctuation/quote": {
"en-US": "Placement of quotation marks in texts",
"ru": "Расстановка кавычек в текстах"
},
"common/punctuation/quoteLink": {
"en-US": "Removal quotes outside a link",
"ru": "Вынос кавычек за пределы ссылки"
},
"common/space/afterPunctuation": {
"en": "space after punctuation",
"en-US": "space after punctuation",
"ru": "Пробел после знаков пунктуации"
},
"common/space/beforeBracket": {
"en": "Space before opening bracket",
"en-US": "Space before opening bracket",
"ru": "Пробел перед открывающей скобкой"
},
"common/space/bracket": {
"en": "Remove extra spaces after opening and before closing bracket",
"en-US": "Remove extra spaces after opening and before closing bracket",
"ru": "Удаление лишних пробелов после открывающей и перед закрывающей скобки"
},
"common/space/delBeforePercent": {
"en": "Remove space before %, ‰ and ‱",
"en-US": "Remove space before %, ‰ and ‱",
"ru": "Удаление пробела перед %, ‰ и ‱"
},
"common/space/delBeforePunctuation": {
"en": "Remove spaces before punctuation",
"en-US": "Remove spaces before punctuation",
"ru": "Удаление пробелов перед знаками пунктуации"
},
"common/space/delLeadingBlanks": {
"en": "Remove spaces at start of line",
"en-US": "Remove spaces at start of line",
"ru": "Удаление пробелов в начале строки"
},
"common/space/delRepeatN": {
"en": "Remove duplicate line breaks (three or more)",
"en-US": "Remove duplicate line breaks (three or more)",
"ru": "Удаление повторяющихся переносов строки (от трёх и более)"
},
"common/space/delRepeatSpace": {
"en": "Removing duplicate spaces between characters",
"en-US": "Removing duplicate spaces between characters",
"ru": "Удаление повторяющихся пробелов между символами"
},
"common/space/delTrailingBlanks": {
"en": "Remove spaces at end of line",
"en-US": "Remove spaces at end of line",
"ru": "Удаление пробелов в конце строки"
},
"common/space/replaceTab": {
"en": "Replacement of tab to 4 spaces",
"en-US": "Replacement of tab to 4 spaces",
"ru": "Замена таба на 4 пробела"
},
"common/space/squareBracket": {
"en": "Remove extra spaces after opening and before closing square bracket",
"en-US": "Remove extra spaces after opening and before closing square bracket",
"ru": "Удаление лишних пробелов после открывающей и перед закрывающей квадратной скобки"
},
"common/space/trimLeft": {
"en": "Remove spaces and line breaks in beginning of text",
"en-US": "Remove spaces and line breaks in beginning of text",
"ru": "Удаление пробелов и переносов строк в начале текста"
},
"common/space/trimRight": {
"en": "Remove spaces and line breaks at end of text",
"en-US": "Remove spaces and line breaks at end of text",
"ru": "Удаление пробелов и переносов строк в конце текста"

@@ -140,3 +148,3 @@ },

"common/symbols/cf": {
"en": "Adding ° to C and F",
"en-US": "Adding ° to C and F",
"ru": "Добавление ° к C и F"

@@ -147,76 +155,72 @@ },

},
"en/punctuation/quote": {
"en": "Placement of quotation marks in texts in English",
"ru": "Расстановка кавычек в текстах на английском"
},
"ru/dash/centuries": {
"en": "Hyphen to dash in centuries",
"en-US": "Hyphen to dash in centuries",
"ru": "Замена дефиса на тире в веках"
},
"ru/dash/daysMonth": {
"en": "Dash between days of one month",
"en-US": "Dash between days of one month",
"ru": "Тире между днями одного месяца"
},
"ru/dash/de": {
"en": "Hyphen before “де”",
"en-US": "Hyphen before “де”",
"ru": "Дефис перед «де»"
},
"ru/dash/decade": {
"en": "Dash in decade",
"en-US": "Dash in decade",
"ru": "Тире в десятилетиях, 80—90-е гг."
},
"ru/dash/directSpeech": {
"en": "Dash in direct speech",
"en-US": "Dash in direct speech",
"ru": "Тире в прямой речи"
},
"ru/dash/izpod": {
"en": "Hyphen between “из-под”",
"en-US": "Hyphen between “из-под”",
"ru": "Дефис между «из-под»"
},
"ru/dash/izza": {
"en": "Hyphen between “из-за”",
"en-US": "Hyphen between “из-за”",
"ru": "Дефис между «из-за»"
},
"ru/dash/ka": {
"en": "Hyphen before “ка” and “кась”",
"en-US": "Hyphen before “ка” and “кась”",
"ru": "Дефис перед «ка» и «кась»"
},
"ru/dash/koe": {
"en": "Hyphen after “кое” and “кой”",
"en-US": "Hyphen after “кое” and “кой”",
"ru": "Дефис после «кое» и «кой»"
},
"ru/dash/main": {
"en": "Replacement hyphen with dash",
"en-US": "Replacement hyphen with dash",
"ru": "Замена дефиса на тире"
},
"ru/dash/month": {
"en": "Dash between months",
"en-US": "Dash between months",
"ru": "Тире между месяцами"
},
"ru/dash/surname": {
"en": "Acronyms with a dash",
"en-US": "Acronyms with a dash",
"ru": "Сокращения с помощью тире"
},
"ru/dash/taki": {
"en": "Hyphen between “верно-таки” and etc.",
"en-US": "Hyphen between “верно-таки” and etc.",
"ru": "Дефис между «верно-таки» и т. д."
},
"ru/dash/time": {
"en": "Dash in time intervals",
"en-US": "Dash in time intervals",
"ru": "Тире в интервалах времени"
},
"ru/dash/to": {
"en": "Hyphen before “то”, “либо”, “нибудь”",
"en-US": "Hyphen before “то”, “либо”, “нибудь”",
"ru": "Дефис перед «то», «либо», «нибудь»"
},
"ru/dash/weekday": {
"en": "Dash between the days of the week",
"en-US": "Dash between the days of the week",
"ru": "Тире между днями недели"
},
"ru/dash/years": {
"en": "Hyphen to dash in years",
"en-US": "Hyphen to dash in years",
"ru": "Замена дефиса на тире в годах"
},
"ru/date/fromISO": {
"en": "Converting dates YYYY-MM-DD type DD.MM.YYYY",
"en-US": "Converting dates YYYY-MM-DD type DD.MM.YYYY",
"ru": "Преобразование дат YYYY-MM-DD к виду DD.MM.YYYY"

@@ -228,3 +232,3 @@ },

"ru/money/currency": {
"en": "Currency symbol ($, €, ¥, Ұ, £ and ₤) after the number, $100 → 100 $",
"en-US": "Currency symbol ($, €, ¥, Ұ, £ and ₤) after the number, $100 → 100 $",
"ru": "Символ валюты ($, €, ¥, Ұ, £ и ₤) после числа, $100 → 100 $"

@@ -236,67 +240,67 @@ },

"ru/nbsp/abbr": {
"en": "Non-breaking space in abbreviations, e.g. “т. д.”",
"en-US": "Non-breaking space in abbreviations, e.g. “т. д.”",
"ru": "Нераз. пробел в сокращениях, например, в «т. д.»"
},
"ru/nbsp/addr": {
"en": "Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al.",
"en-US": "Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al.",
"ru": "Расстановка неразрывного пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др."
},
"ru/nbsp/afterNumberSign": {
"en": "Non-breaking thin space after №",
"en-US": "Non-breaking thin space after №",
"ru": "Нераз. узкий пробел после №"
},
"ru/nbsp/beforeParticle": {
"en": "Non-breaking space before “ли”, “ль”, “же”, “бы”, “б”",
"en-US": "Non-breaking space before “ли”, “ль”, “же”, “бы”, “б”",
"ru": "Нераз. пробел перед «ли», «ль», «же», «бы», «б»"
},
"ru/nbsp/centuries": {
"en": "Remove spaces and extra points in “вв.”",
"en-US": "Remove spaces and extra points in “вв.”",
"ru": "Удаление пробелов и лишних точек в «вв.»"
},
"ru/nbsp/dayMonth": {
"en": "Non-breaking space between number and month",
"en-US": "Non-breaking space between number and month",
"ru": "Нераз. пробел между числом и месяцем"
},
"ru/nbsp/groupNumbers": {
"en": "Replacement space on a narrow non-breaking space in groups of numbers",
"en-US": "Replacement space on a narrow non-breaking space in groups of numbers",
"ru": "Замена пробела на неразрывный узкий пробел в группах чисел"
},
"ru/nbsp/initials": {
"en": "Binding of initials to the name",
"en-US": "Binding of initials to the name",
"ru": "Привязка инициалов к фамилии"
},
"ru/nbsp/m": {
"en": "m2 → м², m3 → м³ and non-breaking space",
"en-US": "m2 → м², m3 → м³ and non-breaking space",
"ru": "м2 → м², м3 → м³ и нераз. пробел"
},
"ru/nbsp/ooo": {
"en": "Non-breaking space after “OOO, ОАО, ЗАО, НИИ, ПБОЮЛ”",
"en-US": "Non-breaking space after “OOO, ОАО, ЗАО, НИИ, ПБОЮЛ”",
"ru": "Нераз. пробел после OOO, ОАО, ЗАО, НИИ и ПБОЮЛ"
},
"ru/nbsp/page": {
"en": "Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.”",
"en-US": "Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.”",
"ru": "Нераз. пробел после «стр.», «гл.», «рис.», «илл.»"
},
"ru/nbsp/ps": {
"en": "Non-breaking space in P. S. and P. P. S.",
"en-US": "Non-breaking space in P. S. and P. P. S.",
"ru": "Нераз. пробел в P. S. и P. P. S."
},
"ru/nbsp/rubleKopek": {
"en": "Not once. space before the “rub” and “cop.”",
"en-US": "Not once. space before the “rub” and “cop.”",
"ru": "Нераз. пробел перед «руб.» и «коп.»"
},
"ru/nbsp/see": {
"en": "Non-breaking space after abbreviation «см.» and «им.»",
"en-US": "Non-breaking space after abbreviation «см.» and «им.»",
"ru": "Нераз. пробел после сокращений «см.» и «им.»"
},
"ru/nbsp/year": {
"en": "Non-breaking space before XXXX г. (2012 г.)",
"en-US": "Non-breaking space before XXXX г. (2012 г.)",
"ru": "Нераз. пробел после XXXX г. (2012 г.)"
},
"ru/nbsp/years": {
"en": "г.г. → гг. and non-breaking space",
"en-US": "г.г. → гг. and non-breaking space",
"ru": "г.г. → гг. и нераз. пробел"
},
"ru/number/comma": {
"en": "Commas in numbers",
"en-US": "Commas in numbers",
"ru": "Замена точки на запятую в числах"

@@ -308,23 +312,23 @@ },

"ru/optalign/bracket": {
"en": "for opening bracket",
"en-US": "for opening bracket",
"ru": "для открывающей скобки"
},
"ru/optalign/comma": {
"en": "for comma",
"en-US": "for comma",
"ru": "для запятой"
},
"ru/optalign/quote": {
"en": "for opening quotation marks",
"en-US": "for opening quotation marks",
"ru": "для открывающей кавычки"
},
"ru/other/accent": {
"en": "Replacement capital letters to lowercase with addition of accent",
"en-US": "Replacement capital letters to lowercase with addition of accent",
"ru": "Замена заглавной буквы на строчную с добавлением ударения"
},
"ru/other/phone-number": {
"en": "Formatting phone numbers",
"en-US": "Formatting phone numbers",
"ru": "Форматирование телефонных номеров"
},
"ru/punctuation/ano": {
"en": "Placement of commas before “а” and “но”",
"en-US": "Placement of commas before “а” and “но”",
"ru": "Расстановка запятых перед «а» и «но»"

@@ -339,15 +343,11 @@ },

"ru/punctuation/hellip": {
"en": "Three points on ellipsis",
"en-US": "Three points on ellipsis",
"ru": "Три точки на многоточие, ?... → ?.. и пр."
},
"ru/punctuation/quote": {
"en": "Placement of quotation marks in texts in Russian",
"ru": "Расстановка кавычек в текстах на русском"
},
"ru/space/afterHellip": {
"en": "Space after ..., !.. and ?..",
"en-US": "Space after ..., !.. and ?..",
"ru": "Пробел после ..., !.. и ?.."
},
"ru/space/year": {
"en": "Space between number and word “год”",
"en-US": "Space between number and word “год”",
"ru": "Пробел между числом и словом «год»"

@@ -359,5 +359,5 @@ },

"ru/typo/switchingKeyboardLayout": {
"en": "Replacement of Latin letters in Russian. Typos occur when you switch keyboard layouts",
"en-US": "Replacement of Latin letters in Russian. Typos occur when you switch keyboard layouts",
"ru": "Замена латинских букв на русские. Опечатки, возникающие при переключении клавиатурной раскладки"
}
}

@@ -8,72 +8,72 @@ ## Правила типографа по порядку выполнения

| 3. | [common/symbols/copy](../src/rules/common/symbols/copy.js) | (c) → ©, (tm) → ™, (r) → ® | 110 | | ✓ |
| 4. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 4. | [common/punctuation/quoteLink](../src/rules/common/punctuation/quoteLink.js) | Вынос кавычек за пределы ссылки | 410 | show-safe-tags-html | ✓ |
| 5. | [ru/symbols/NN](../src/rules/ru/symbols/NN.js) | №№ → № | 110 | | ✓ |
| 6. | [common/symbols/cf](../src/rules/common/symbols/cf.js) | Добавление ° к C и F | 110 | | ✓ |
| 7. | [common/space/replaceTab](../src/rules/common/space/replaceTab.js) | Замена таба на 4 пробела | 205 | | ✓ |
| 8. | [common/space/trimLeft](../src/rules/common/space/trimLeft.js) | Удаление пробелов и переносов строк в начале текста | 206 | | ✓ |
| 9. | [common/space/delTrailingBlanks](../src/rules/common/space/delTrailingBlanks.js) | Удаление пробелов в конце строки | 207 | | ✓ |
| 10. | [common/space/trimRight](../src/rules/common/space/trimRight.js) | Удаление пробелов и переносов строк в конце текста | 207 | | ✓ |
| 11. | [common/space/delRepeatN](../src/rules/common/space/delRepeatN.js) | Удаление повторяющихся переносов строки (от трёх и более) | 209 | | ✓ |
| 6. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 7. | [common/symbols/cf](../src/rules/common/symbols/cf.js) | Добавление ° к C и F | 110 | | ✓ |
| 8. | [common/space/replaceTab](../src/rules/common/space/replaceTab.js) | Замена таба на 4 пробела | 205 | | ✓ |
| 9. | [common/space/trimLeft](../src/rules/common/space/trimLeft.js) | Удаление пробелов и переносов строк в начале текста | 206 | | ✓ |
| 10. | [common/space/delTrailingBlanks](../src/rules/common/space/delTrailingBlanks.js) | Удаление пробелов в конце строки | 207 | | ✓ |
| 11. | [common/space/trimRight](../src/rules/common/space/trimRight.js) | Удаление пробелов и переносов строк в конце текста | 207 | | ✓ |
| 12. | [common/space/delRepeatSpace](../src/rules/common/space/delRepeatSpace.js) | Удаление повторяющихся пробелов между символами | 209 | | ✓ |
| 13. | [common/space/delLeadingBlanks](../src/rules/common/space/delLeadingBlanks.js) | Удаление пробелов в начале строки | 210 | | |
| 14. | [common/space/delBeforePunctuation](../src/rules/common/space/delBeforePunctuation.js) | Удаление пробелов перед знаками пунктуации | 210 | | ✓ |
| 13. | [common/space/delRepeatN](../src/rules/common/space/delRepeatN.js) | Удаление повторяющихся переносов строки (от трёх и более) | 209 | | ✓ |
| 14. | [common/space/delLeadingBlanks](../src/rules/common/space/delLeadingBlanks.js) | Удаление пробелов в начале строки | 210 | | |
| 15. | [ru/space/afterHellip](../src/rules/ru/space/afterHellip.js) | Пробел после ..., !.. и ?.. | 210 | | ✓ |
| 16. | [common/space/afterPunctuation](../src/rules/common/space/afterPunctuation.js) | Пробел после знаков пунктуации | 210 | | ✓ |
| 17. | [common/space/beforeBracket](../src/rules/common/space/beforeBracket.js) | Пробел перед открывающей скобкой | 210 | | ✓ |
| 18. | [common/space/squareBracket](../src/rules/common/space/squareBracket.js) | Удаление лишних пробелов после открывающей и перед закрывающей квадратной скобки | 210 | | ✓ |
| 19. | [common/space/bracket](../src/rules/common/space/bracket.js) | Удаление лишних пробелов после открывающей и перед закрывающей скобки | 210 | | ✓ |
| 20. | [common/space/delBeforePercent](../src/rules/common/space/delBeforePercent.js) | Удаление пробела перед %, ‰ и ‱ | 210 | | ✓ |
| 21. | [ru/space/year](../src/rules/ru/space/year.js) | Пробел между числом и словом «год» | 210 | | ✓ |
| 22. | [ru/dash/main](../src/rules/ru/dash/main.js) | Замена дефиса на тире | 305 | | ✓ |
| 23. | [ru/dash/directSpeech](../src/rules/ru/dash/directSpeech.js) | Тире в прямой речи | 310 | | ✓ |
| 24. | [ru/dash/month](../src/rules/ru/dash/month.js) | Тире между месяцами | 310 | | ✓ |
| 25. | [ru/dash/ka](../src/rules/ru/dash/ka.js) | Дефис перед «ка» и «кась» | 310 | | ✓ |
| 26. | [ru/dash/years](../src/rules/ru/dash/years.js) | Замена дефиса на тире в годах | 310 | | ✓ |
| 27. | [ru/dash/koe](../src/rules/ru/dash/koe.js) | Дефис после «кое» и «кой» | 310 | | ✓ |
| 28. | [ru/dash/izza](../src/rules/ru/dash/izza.js) | Дефис между «из-за» | 310 | | ✓ |
| 29. | [ru/dash/izpod](../src/rules/ru/dash/izpod.js) | Дефис между «из-под» | 310 | | ✓ |
| 30. | [ru/dash/weekday](../src/rules/ru/dash/weekday.js) | Тире между днями недели | 310 | | ✓ |
| 31. | [ru/dash/to](../src/rules/ru/dash/to.js) | Дефис перед «то», «либо», «нибудь» | 310 | | ✓ |
| 32. | [ru/dash/decade](../src/rules/ru/dash/decade.js) | Тире в десятилетиях, 80—90-е гг. | 310 | | ✓ |
| 33. | [ru/dash/de](../src/rules/ru/dash/de.js) | Дефис перед «де» | 310 | | |
| 34. | [ru/dash/time](../src/rules/ru/dash/time.js) | Тире в интервалах времени | 310 | | ✓ |
| 35. | [ru/dash/taki](../src/rules/ru/dash/taki.js) | Дефис между «верно-таки» и т. д. | 310 | | ✓ |
| 36. | [ru/dash/surname](../src/rules/ru/dash/surname.js) | Сокращения с помощью тире | 310 | | ✓ |
| 37. | [ru/dash/daysMonth](../src/rules/ru/dash/daysMonth.js) | Тире между днями одного месяца | 310 | | ✓ |
| 38. | [ru/dash/centuries](../src/rules/ru/dash/centuries.js) | Замена дефиса на тире в веках | 310 | | ✓ |
| 39. | [en/punctuation/quote](../src/rules/en/punctuation/quote.js) | Расстановка кавычек в текстах на английском | 410 | | ✓ |
| 40. | [ru/punctuation/exclamation](../src/rules/ru/punctuation/exclamation.js) | !! → ! | 410 | | ✓ |
| 41. | [common/punctuation/apostrophe](../src/rules/common/punctuation/apostrophe.js) | Расстановка правильного апострофа | 410 | | ✓ |
| 42. | [ru/punctuation/ano](../src/rules/ru/punctuation/ano.js) | Расстановка запятых перед «а» и «но» | 410 | | ✓ |
| 16. | [common/space/delBeforePunctuation](../src/rules/common/space/delBeforePunctuation.js) | Удаление пробелов перед знаками пунктуации | 210 | | ✓ |
| 17. | [common/space/afterPunctuation](../src/rules/common/space/afterPunctuation.js) | Пробел после знаков пунктуации | 210 | | ✓ |
| 18. | [common/space/beforeBracket](../src/rules/common/space/beforeBracket.js) | Пробел перед открывающей скобкой | 210 | | ✓ |
| 19. | [common/space/squareBracket](../src/rules/common/space/squareBracket.js) | Удаление лишних пробелов после открывающей и перед закрывающей квадратной скобки | 210 | | ✓ |
| 20. | [common/space/bracket](../src/rules/common/space/bracket.js) | Удаление лишних пробелов после открывающей и перед закрывающей скобки | 210 | | ✓ |
| 21. | [common/space/delBeforePercent](../src/rules/common/space/delBeforePercent.js) | Удаление пробела перед %, ‰ и ‱ | 210 | | ✓ |
| 22. | [ru/space/year](../src/rules/ru/space/year.js) | Пробел между числом и словом «год» | 210 | | ✓ |
| 23. | [ru/dash/main](../src/rules/ru/dash/main.js) | Замена дефиса на тире | 305 | | ✓ |
| 24. | [ru/dash/decade](../src/rules/ru/dash/decade.js) | Тире в десятилетиях, 80—90-е гг. | 310 | | ✓ |
| 25. | [ru/dash/month](../src/rules/ru/dash/month.js) | Тире между месяцами | 310 | | ✓ |
| 26. | [ru/dash/izza](../src/rules/ru/dash/izza.js) | Дефис между «из-за» | 310 | | ✓ |
| 27. | [ru/dash/years](../src/rules/ru/dash/years.js) | Замена дефиса на тире в годах | 310 | | ✓ |
| 28. | [ru/dash/koe](../src/rules/ru/dash/koe.js) | Дефис после «кое» и «кой» | 310 | | ✓ |
| 29. | [ru/dash/ka](../src/rules/ru/dash/ka.js) | Дефис перед «ка» и «кась» | 310 | | ✓ |
| 30. | [ru/dash/izpod](../src/rules/ru/dash/izpod.js) | Дефис между «из-под» | 310 | | ✓ |
| 31. | [ru/dash/weekday](../src/rules/ru/dash/weekday.js) | Тире между днями недели | 310 | | ✓ |
| 32. | [ru/dash/directSpeech](../src/rules/ru/dash/directSpeech.js) | Тире в прямой речи | 310 | | ✓ |
| 33. | [ru/dash/to](../src/rules/ru/dash/to.js) | Дефис перед «то», «либо», «нибудь» | 310 | | ✓ |
| 34. | [ru/dash/de](../src/rules/ru/dash/de.js) | Дефис перед «де» | 310 | | |
| 35. | [ru/dash/daysMonth](../src/rules/ru/dash/daysMonth.js) | Тире между днями одного месяца | 310 | | ✓ |
| 36. | [ru/dash/time](../src/rules/ru/dash/time.js) | Тире в интервалах времени | 310 | | ✓ |
| 37. | [ru/dash/taki](../src/rules/ru/dash/taki.js) | Дефис между «верно-таки» и т. д. | 310 | | ✓ |
| 38. | [ru/dash/surname](../src/rules/ru/dash/surname.js) | Сокращения с помощью тире | 310 | | ✓ |
| 39. | [ru/dash/centuries](../src/rules/ru/dash/centuries.js) | Замена дефиса на тире в веках | 310 | | ✓ |
| 40. | [common/punctuation/quote](../src/rules/common/punctuation/quote.js) | Расстановка кавычек в текстах | 410 | | ✓ |
| 41. | [ru/punctuation/ano](../src/rules/ru/punctuation/ano.js) | Расстановка запятых перед «а» и «но» | 410 | | ✓ |
| 42. | [common/punctuation/apostrophe](../src/rules/common/punctuation/apostrophe.js) | Расстановка правильного апострофа | 410 | | ✓ |
| 43. | [common/punctuation/delDoublePunctuation](../src/rules/common/punctuation/delDoublePunctuation.js) | Удаление двойной пунктуации | 410 | | ✓ |
| 44. | [ru/punctuation/quote](../src/rules/ru/punctuation/quote.js) | Расстановка кавычек в текстах на русском | 410 | | ✓ |
| 45. | [ru/punctuation/hellip](../src/rules/ru/punctuation/hellip.js) | Три точки на многоточие, ?... → ?.. и пр. | 410 | | ✓ |
| 44. | [ru/punctuation/hellip](../src/rules/ru/punctuation/hellip.js) | Три точки на многоточие, ?... → ?.. и пр. | 410 | | ✓ |
| 45. | [ru/punctuation/exclamation](../src/rules/ru/punctuation/exclamation.js) | !! → ! | 410 | | ✓ |
| 46. | [ru/punctuation/exclamationQuestion](../src/rules/ru/punctuation/exclamationQuestion.js) | !? → ?! | 415 | | ✓ |
| 47. | [ru/nbsp/groupNumbers](../src/rules/ru/nbsp/groupNumbers.js) | Замена пробела на неразрывный узкий пробел в группах чисел | 510 | | ✓ |
| 48. | [common/nbsp/dpi](../src/rules/common/nbsp/dpi.js) | Нераз. пробел перед lpi и dpi | 510 | | ✓ |
| 49. | [common/nbsp/beforeShortLastWord](../src/rules/common/nbsp/beforeShortLastWord.js) | Нераз. пробел перед последним коротким словом в предложении | 510 | | ✓ |
| 50. | [common/nbsp/beforeShortLastNumber](../src/rules/common/nbsp/beforeShortLastNumber.js) | Нераз. пробел перед числом (не более 2 цифр) в конце предложения | 510 | | ✓ |
| 51. | [common/nbsp/afterShortWord](../src/rules/common/nbsp/afterShortWord.js) | Нераз. пробел после короткого слова | 510 | | ✓ |
| 52. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Нераз. узкий пробел после § | 510 | | ✓ |
| 53. | [common/nbsp/afterNumber](../src/rules/common/nbsp/afterNumber.js) | Нераз. пробел между числом и словом | 510 | | |
| 54. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Нераз. пробел после XXXX г. (2012 г.) | 510 | | ✓ |
| 55. | [ru/nbsp/see](../src/rules/ru/nbsp/see.js) | Нераз. пробел после сокращений «см.» и «им.» | 510 | | ✓ |
| 56. | [ru/nbsp/rubleKopek](../src/rules/ru/nbsp/rubleKopek.js) | Нераз. пробел перед «руб.» и «коп.» | 510 | | ✓ |
| 57. | [ru/nbsp/ps](../src/rules/ru/nbsp/ps.js) | Нераз. пробел в P. S. и P. P. S. | 510 | | ✓ |
| 58. | [ru/nbsp/page](../src/rules/ru/nbsp/page.js) | Нераз. пробел после «стр.», «гл.», «рис.», «илл.» | 510 | | ✓ |
| 59. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Нераз. пробел в сокращениях, например, в «т. д.» | 510 | | ✓ |
| 60. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Расстановка неразрывного пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др. | 510 | | ✓ |
| 61. | [ru/nbsp/ooo](../src/rules/ru/nbsp/ooo.js) | Нераз. пробел после OOO, ОАО, ЗАО, НИИ и ПБОЮЛ | 510 | | ✓ |
| 62. | [ru/nbsp/initials](../src/rules/ru/nbsp/initials.js) | Привязка инициалов к фамилии | 510 | | ✓ |
| 63. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Удаление пробелов и лишних точек в «вв.» | 510 | | ✓ |
| 64. | [ru/nbsp/dayMonth](../src/rules/ru/nbsp/dayMonth.js) | Нераз. пробел между числом и месяцем | 510 | | ✓ |
| 65. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Нераз. узкий пробел после № | 510 | | ✓ |
| 66. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Нераз. пробел перед «ли», «ль», «же», «бы», «б» | 515 | | ✓ |
| 47. | [ru/nbsp/dayMonth](../src/rules/ru/nbsp/dayMonth.js) | Нераз. пробел между числом и месяцем | 510 | | ✓ |
| 48. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Нераз. узкий пробел после № | 510 | | ✓ |
| 49. | [common/nbsp/dpi](../src/rules/common/nbsp/dpi.js) | Нераз. пробел перед lpi и dpi | 510 | | ✓ |
| 50. | [common/nbsp/beforeShortLastWord](../src/rules/common/nbsp/beforeShortLastWord.js) | Нераз. пробел перед последним коротким словом в предложении | 510 | | ✓ |
| 51. | [common/nbsp/beforeShortLastNumber](../src/rules/common/nbsp/beforeShortLastNumber.js) | Нераз. пробел перед числом (не более 2 цифр) в конце предложения | 510 | | ✓ |
| 52. | [common/nbsp/afterShortWord](../src/rules/common/nbsp/afterShortWord.js) | Нераз. пробел после короткого слова | 510 | | ✓ |
| 53. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Нераз. узкий пробел после § | 510 | | ✓ |
| 54. | [common/nbsp/afterNumber](../src/rules/common/nbsp/afterNumber.js) | Нераз. пробел между числом и словом | 510 | | |
| 55. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Нераз. пробел после XXXX г. (2012 г.) | 510 | | ✓ |
| 56. | [ru/nbsp/see](../src/rules/ru/nbsp/see.js) | Нераз. пробел после сокращений «см.» и «им.» | 510 | | ✓ |
| 57. | [ru/nbsp/rubleKopek](../src/rules/ru/nbsp/rubleKopek.js) | Нераз. пробел перед «руб.» и «коп.» | 510 | | ✓ |
| 58. | [ru/nbsp/ps](../src/rules/ru/nbsp/ps.js) | Нераз. пробел в P. S. и P. P. S. | 510 | | ✓ |
| 59. | [ru/nbsp/page](../src/rules/ru/nbsp/page.js) | Нераз. пробел после «стр.», «гл.», «рис.», «илл.» | 510 | | ✓ |
| 60. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Нераз. пробел в сокращениях, например, в «т. д.» | 510 | | ✓ |
| 61. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Расстановка неразрывного пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др. | 510 | | ✓ |
| 62. | [ru/nbsp/ooo](../src/rules/ru/nbsp/ooo.js) | Нераз. пробел после OOO, ОАО, ЗАО, НИИ и ПБОЮЛ | 510 | | ✓ |
| 63. | [ru/nbsp/initials](../src/rules/ru/nbsp/initials.js) | Привязка инициалов к фамилии | 510 | | ✓ |
| 64. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Удаление пробелов и лишних точек в «вв.» | 510 | | ✓ |
| 65. | [ru/nbsp/groupNumbers](../src/rules/ru/nbsp/groupNumbers.js) | Замена пробела на неразрывный узкий пробел в группах чисел | 510 | | ✓ |
| 66. | [ru/nbsp/years](../src/rules/ru/nbsp/years.js) | г.г. → гг. и нераз. пробел | 515 | | ✓ |
| 67. | [ru/nbsp/m](../src/rules/ru/nbsp/m.js) | м2 → м², м3 → м³ и нераз. пробел | 515 | | ✓ |
| 68. | [ru/nbsp/years](../src/rules/ru/nbsp/years.js) | г.г. → гг. и нераз. пробел | 515 | | ✓ |
| 68. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Нераз. пробел перед «ли», «ль», «же», «бы», «б» | 515 | | ✓ |
| 69. | [ru/number/ordinals](../src/rules/ru/number/ordinals.js) | N-ый, -ой, -ая, -ое, -ые, -ым, -ом, -ых → N-й, -я, -е, -м, -х (25-й) | 610 | | ✓ |
| 70. | [common/number/fraction](../src/rules/common/number/fraction.js) | 1/2 → ½, 1/4 → ¼, 3/4 → ¾ | 610 | | ✓ |
| 71. | [common/number/times](../src/rules/common/number/times.js) | x → × (10 x 5 → 10×5) | 610 | | ✓ |
| 72. | [common/number/mathSigns](../src/rules/common/number/mathSigns.js) | != → ≠, <= → ≤, >= → ≥, ~= → ≅, +- → ± | 610 | | ✓ |
| 73. | [ru/number/comma](../src/rules/ru/number/comma.js) | Замена точки на запятую в числах | 610 | | ✓ |
| 70. | [ru/number/comma](../src/rules/ru/number/comma.js) | Замена точки на запятую в числах | 610 | | ✓ |
| 71. | [common/number/fraction](../src/rules/common/number/fraction.js) | 1/2 → ½, 1/4 → ¼, 3/4 → ¾ | 610 | | ✓ |
| 72. | [common/number/times](../src/rules/common/number/times.js) | x → × (10 x 5 → 10×5) | 610 | | ✓ |
| 73. | [common/number/mathSigns](../src/rules/common/number/mathSigns.js) | != → ≠, <= → ≤, >= → ≥, ~= → ≅, +- → ± | 610 | | ✓ |
| 74. | [ru/money/currency](../src/rules/ru/money/currency.js) | Символ валюты ($, €, ¥, Ұ, £ и ₤) после числа, $100 → 100 $ | 710 | | ✓ |

@@ -83,8 +83,8 @@ | 75. | [ru/money/ruble](../src/rules/ru/money/ruble.js) | 1 руб. → 1 ₽ | 710 | | |

| 77. | [ru/date/weekday](../src/rules/ru/date/weekday.js) | 2 Мая, Понедельник → 2 мая, понедельник | 810 | | ✓ |
| 78. | [ru/other/accent](../src/rules/ru/other/accent.js) | Замена заглавной буквы на строчную с добавлением ударения | 910 | | |
| 79. | [ru/other/phone-number](../src/rules/ru/other/phone-number.js) | Форматирование телефонных номеров | 910 | | ✓ |
| 80. | [common/other/repeatWord](../src/rules/common/other/repeatWord.js) | Удаление повтора слова | 910 | | |
| 81. | [ru/optalign/bracket](../src/rules/ru/optalign/bracket.js) | для открывающей скобки | 1010 | | |
| 78. | [common/other/repeatWord](../src/rules/common/other/repeatWord.js) | Удаление повтора слова | 910 | | |
| 79. | [ru/other/accent](../src/rules/ru/other/accent.js) | Замена заглавной буквы на строчную с добавлением ударения | 910 | | |
| 80. | [ru/other/phone-number](../src/rules/ru/other/phone-number.js) | Форматирование телефонных номеров | 910 | | ✓ |
| 81. | [ru/optalign/comma](../src/rules/ru/optalign/comma.js) | для запятой | 1010 | | |
| 82. | [ru/optalign/quote](../src/rules/ru/optalign/quote.js) | для открывающей кавычки | 1010 | | |
| 83. | [ru/optalign/comma](../src/rules/ru/optalign/comma.js) | для запятой | 1010 | | |
| 83. | [ru/optalign/bracket](../src/rules/ru/optalign/bracket.js) | для открывающей скобки | 1010 | | |
| 84. | [ru/typo/switchingKeyboardLayout](../src/rules/ru/typo/switchingKeyboardLayout.js) | Замена латинских букв на русские. Опечатки, возникающие при переключении клавиатурной раскладки | 1110 | | ✓ |

@@ -91,0 +91,0 @@ | 85. | [common/nbsp/nowrap](../src/rules/common/nbsp/nowrap.js) | Заменять нераз. пробел на обычный пробел в тегах nowrap и nobr | 510 | end | ✓ |

@@ -26,68 +26,68 @@ ## Правила типографа

| 21. | [common/punctuation/delDoublePunctuation](../src/rules/common/punctuation/delDoublePunctuation.js) | Удаление двойной пунктуации | 410 | | ✓ |
| 22. | [common/space/afterPunctuation](../src/rules/common/space/afterPunctuation.js) | Пробел после знаков пунктуации | 210 | | ✓ |
| 23. | [common/space/beforeBracket](../src/rules/common/space/beforeBracket.js) | Пробел перед открывающей скобкой | 210 | | ✓ |
| 24. | [common/space/bracket](../src/rules/common/space/bracket.js) | Удаление лишних пробелов после открывающей и перед закрывающей скобки | 210 | | ✓ |
| 25. | [common/space/delBeforePercent](../src/rules/common/space/delBeforePercent.js) | Удаление пробела перед %, ‰ и ‱ | 210 | | ✓ |
| 26. | [common/space/delBeforePunctuation](../src/rules/common/space/delBeforePunctuation.js) | Удаление пробелов перед знаками пунктуации | 210 | | ✓ |
| 27. | [common/space/delLeadingBlanks](../src/rules/common/space/delLeadingBlanks.js) | Удаление пробелов в начале строки | 210 | | |
| 28. | [common/space/delRepeatN](../src/rules/common/space/delRepeatN.js) | Удаление повторяющихся переносов строки (от трёх и более) | 209 | | ✓ |
| 29. | [common/space/delRepeatSpace](../src/rules/common/space/delRepeatSpace.js) | Удаление повторяющихся пробелов между символами | 209 | | ✓ |
| 30. | [common/space/delTrailingBlanks](../src/rules/common/space/delTrailingBlanks.js) | Удаление пробелов в конце строки | 207 | | ✓ |
| 31. | [common/space/replaceTab](../src/rules/common/space/replaceTab.js) | Замена таба на 4 пробела | 205 | | ✓ |
| 32. | [common/space/squareBracket](../src/rules/common/space/squareBracket.js) | Удаление лишних пробелов после открывающей и перед закрывающей квадратной скобки | 210 | | ✓ |
| 33. | [common/space/trimLeft](../src/rules/common/space/trimLeft.js) | Удаление пробелов и переносов строк в начале текста | 206 | | ✓ |
| 34. | [common/space/trimRight](../src/rules/common/space/trimRight.js) | Удаление пробелов и переносов строк в конце текста | 207 | | ✓ |
| 35. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 36. | [common/symbols/cf](../src/rules/common/symbols/cf.js) | Добавление ° к C и F | 110 | | ✓ |
| 37. | [common/symbols/copy](../src/rules/common/symbols/copy.js) | (c) → ©, (tm) → ™, (r) → ® | 110 | | ✓ |
| 38. | [en/punctuation/quote](../src/rules/en/punctuation/quote.js) | Расстановка кавычек в текстах на английском | 410 | | ✓ |
| 39. | [ru/dash/centuries](../src/rules/ru/dash/centuries.js) | Замена дефиса на тире в веках | 310 | | ✓ |
| 40. | [ru/dash/daysMonth](../src/rules/ru/dash/daysMonth.js) | Тире между днями одного месяца | 310 | | ✓ |
| 41. | [ru/dash/de](../src/rules/ru/dash/de.js) | Дефис перед «де» | 310 | | |
| 42. | [ru/dash/decade](../src/rules/ru/dash/decade.js) | Тире в десятилетиях, 80—90-е гг. | 310 | | ✓ |
| 43. | [ru/dash/directSpeech](../src/rules/ru/dash/directSpeech.js) | Тире в прямой речи | 310 | | ✓ |
| 44. | [ru/dash/izpod](../src/rules/ru/dash/izpod.js) | Дефис между «из-под» | 310 | | ✓ |
| 45. | [ru/dash/izza](../src/rules/ru/dash/izza.js) | Дефис между «из-за» | 310 | | ✓ |
| 46. | [ru/dash/ka](../src/rules/ru/dash/ka.js) | Дефис перед «ка» и «кась» | 310 | | ✓ |
| 47. | [ru/dash/koe](../src/rules/ru/dash/koe.js) | Дефис после «кое» и «кой» | 310 | | ✓ |
| 48. | [ru/dash/main](../src/rules/ru/dash/main.js) | Замена дефиса на тире | 305 | | ✓ |
| 49. | [ru/dash/month](../src/rules/ru/dash/month.js) | Тире между месяцами | 310 | | ✓ |
| 50. | [ru/dash/surname](../src/rules/ru/dash/surname.js) | Сокращения с помощью тире | 310 | | ✓ |
| 51. | [ru/dash/taki](../src/rules/ru/dash/taki.js) | Дефис между «верно-таки» и т. д. | 310 | | ✓ |
| 52. | [ru/dash/time](../src/rules/ru/dash/time.js) | Тире в интервалах времени | 310 | | ✓ |
| 53. | [ru/dash/to](../src/rules/ru/dash/to.js) | Дефис перед «то», «либо», «нибудь» | 310 | | ✓ |
| 54. | [ru/dash/weekday](../src/rules/ru/dash/weekday.js) | Тире между днями недели | 310 | | ✓ |
| 55. | [ru/dash/years](../src/rules/ru/dash/years.js) | Замена дефиса на тире в годах | 310 | | ✓ |
| 56. | [ru/date/fromISO](../src/rules/ru/date/fromISO.js) | Преобразование дат YYYY-MM-DD к виду DD.MM.YYYY | 810 | | ✓ |
| 57. | [ru/date/weekday](../src/rules/ru/date/weekday.js) | 2 Мая, Понедельник → 2 мая, понедельник | 810 | | ✓ |
| 58. | [ru/money/currency](../src/rules/ru/money/currency.js) | Символ валюты ($, €, ¥, Ұ, £ и ₤) после числа, $100 → 100 $ | 710 | | ✓ |
| 59. | [ru/money/ruble](../src/rules/ru/money/ruble.js) | 1 руб. → 1 ₽ | 710 | | |
| 60. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Нераз. пробел в сокращениях, например, в «т. д.» | 510 | | ✓ |
| 61. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Расстановка неразрывного пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др. | 510 | | ✓ |
| 62. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Нераз. узкий пробел после № | 510 | | ✓ |
| 63. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Нераз. пробел перед «ли», «ль», «же», «бы», «б» | 515 | | ✓ |
| 64. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Удаление пробелов и лишних точек в «вв.» | 510 | | ✓ |
| 65. | [ru/nbsp/dayMonth](../src/rules/ru/nbsp/dayMonth.js) | Нераз. пробел между числом и месяцем | 510 | | ✓ |
| 66. | [ru/nbsp/groupNumbers](../src/rules/ru/nbsp/groupNumbers.js) | Замена пробела на неразрывный узкий пробел в группах чисел | 510 | | ✓ |
| 67. | [ru/nbsp/initials](../src/rules/ru/nbsp/initials.js) | Привязка инициалов к фамилии | 510 | | ✓ |
| 68. | [ru/nbsp/m](../src/rules/ru/nbsp/m.js) | м2 → м², м3 → м³ и нераз. пробел | 515 | | ✓ |
| 69. | [ru/nbsp/ooo](../src/rules/ru/nbsp/ooo.js) | Нераз. пробел после OOO, ОАО, ЗАО, НИИ и ПБОЮЛ | 510 | | ✓ |
| 70. | [ru/nbsp/page](../src/rules/ru/nbsp/page.js) | Нераз. пробел после «стр.», «гл.», «рис.», «илл.» | 510 | | ✓ |
| 71. | [ru/nbsp/ps](../src/rules/ru/nbsp/ps.js) | Нераз. пробел в P. S. и P. P. S. | 510 | | ✓ |
| 72. | [ru/nbsp/rubleKopek](../src/rules/ru/nbsp/rubleKopek.js) | Нераз. пробел перед «руб.» и «коп.» | 510 | | ✓ |
| 73. | [ru/nbsp/see](../src/rules/ru/nbsp/see.js) | Нераз. пробел после сокращений «см.» и «им.» | 510 | | ✓ |
| 74. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Нераз. пробел после XXXX г. (2012 г.) | 510 | | ✓ |
| 75. | [ru/nbsp/years](../src/rules/ru/nbsp/years.js) | г.г. → гг. и нераз. пробел | 515 | | ✓ |
| 76. | [ru/number/comma](../src/rules/ru/number/comma.js) | Замена точки на запятую в числах | 610 | | ✓ |
| 77. | [ru/number/ordinals](../src/rules/ru/number/ordinals.js) | N-ый, -ой, -ая, -ое, -ые, -ым, -ом, -ых → N-й, -я, -е, -м, -х (25-й) | 610 | | ✓ |
| 78. | [ru/optalign/bracket](../src/rules/ru/optalign/bracket.js) | для открывающей скобки | 1010 | | |
| 79. | [ru/optalign/comma](../src/rules/ru/optalign/comma.js) | для запятой | 1010 | | |
| 80. | [ru/optalign/quote](../src/rules/ru/optalign/quote.js) | для открывающей кавычки | 1010 | | |
| 81. | [ru/other/accent](../src/rules/ru/other/accent.js) | Замена заглавной буквы на строчную с добавлением ударения | 910 | | |
| 82. | [ru/other/phone-number](../src/rules/ru/other/phone-number.js) | Форматирование телефонных номеров | 910 | | ✓ |
| 83. | [ru/punctuation/ano](../src/rules/ru/punctuation/ano.js) | Расстановка запятых перед «а» и «но» | 410 | | ✓ |
| 84. | [ru/punctuation/exclamation](../src/rules/ru/punctuation/exclamation.js) | !! → ! | 410 | | ✓ |
| 85. | [ru/punctuation/exclamationQuestion](../src/rules/ru/punctuation/exclamationQuestion.js) | !? → ?! | 415 | | ✓ |
| 86. | [ru/punctuation/hellip](../src/rules/ru/punctuation/hellip.js) | Три точки на многоточие, ?... → ?.. и пр. | 410 | | ✓ |
| 87. | [ru/punctuation/quote](../src/rules/ru/punctuation/quote.js) | Расстановка кавычек в текстах на русском | 410 | | ✓ |
| 22. | [common/punctuation/quote](../src/rules/common/punctuation/quote.js) | Расстановка кавычек в текстах | 410 | | ✓ |
| 23. | [common/punctuation/quoteLink](../src/rules/common/punctuation/quoteLink.js) | Вынос кавычек за пределы ссылки | 410 | show-safe-tags-html | ✓ |
| 24. | [common/space/afterPunctuation](../src/rules/common/space/afterPunctuation.js) | Пробел после знаков пунктуации | 210 | | ✓ |
| 25. | [common/space/beforeBracket](../src/rules/common/space/beforeBracket.js) | Пробел перед открывающей скобкой | 210 | | ✓ |
| 26. | [common/space/bracket](../src/rules/common/space/bracket.js) | Удаление лишних пробелов после открывающей и перед закрывающей скобки | 210 | | ✓ |
| 27. | [common/space/delBeforePercent](../src/rules/common/space/delBeforePercent.js) | Удаление пробела перед %, ‰ и ‱ | 210 | | ✓ |
| 28. | [common/space/delBeforePunctuation](../src/rules/common/space/delBeforePunctuation.js) | Удаление пробелов перед знаками пунктуации | 210 | | ✓ |
| 29. | [common/space/delLeadingBlanks](../src/rules/common/space/delLeadingBlanks.js) | Удаление пробелов в начале строки | 210 | | |
| 30. | [common/space/delRepeatN](../src/rules/common/space/delRepeatN.js) | Удаление повторяющихся переносов строки (от трёх и более) | 209 | | ✓ |
| 31. | [common/space/delRepeatSpace](../src/rules/common/space/delRepeatSpace.js) | Удаление повторяющихся пробелов между символами | 209 | | ✓ |
| 32. | [common/space/delTrailingBlanks](../src/rules/common/space/delTrailingBlanks.js) | Удаление пробелов в конце строки | 207 | | ✓ |
| 33. | [common/space/replaceTab](../src/rules/common/space/replaceTab.js) | Замена таба на 4 пробела | 205 | | ✓ |
| 34. | [common/space/squareBracket](../src/rules/common/space/squareBracket.js) | Удаление лишних пробелов после открывающей и перед закрывающей квадратной скобки | 210 | | ✓ |
| 35. | [common/space/trimLeft](../src/rules/common/space/trimLeft.js) | Удаление пробелов и переносов строк в начале текста | 206 | | ✓ |
| 36. | [common/space/trimRight](../src/rules/common/space/trimRight.js) | Удаление пробелов и переносов строк в конце текста | 207 | | ✓ |
| 37. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 38. | [common/symbols/cf](../src/rules/common/symbols/cf.js) | Добавление ° к C и F | 110 | | ✓ |
| 39. | [common/symbols/copy](../src/rules/common/symbols/copy.js) | (c) → ©, (tm) → ™, (r) → ® | 110 | | ✓ |
| 40. | [ru/dash/centuries](../src/rules/ru/dash/centuries.js) | Замена дефиса на тире в веках | 310 | | ✓ |
| 41. | [ru/dash/daysMonth](../src/rules/ru/dash/daysMonth.js) | Тире между днями одного месяца | 310 | | ✓ |
| 42. | [ru/dash/de](../src/rules/ru/dash/de.js) | Дефис перед «де» | 310 | | |
| 43. | [ru/dash/decade](../src/rules/ru/dash/decade.js) | Тире в десятилетиях, 80—90-е гг. | 310 | | ✓ |
| 44. | [ru/dash/directSpeech](../src/rules/ru/dash/directSpeech.js) | Тире в прямой речи | 310 | | ✓ |
| 45. | [ru/dash/izpod](../src/rules/ru/dash/izpod.js) | Дефис между «из-под» | 310 | | ✓ |
| 46. | [ru/dash/izza](../src/rules/ru/dash/izza.js) | Дефис между «из-за» | 310 | | ✓ |
| 47. | [ru/dash/ka](../src/rules/ru/dash/ka.js) | Дефис перед «ка» и «кась» | 310 | | ✓ |
| 48. | [ru/dash/koe](../src/rules/ru/dash/koe.js) | Дефис после «кое» и «кой» | 310 | | ✓ |
| 49. | [ru/dash/main](../src/rules/ru/dash/main.js) | Замена дефиса на тире | 305 | | ✓ |
| 50. | [ru/dash/month](../src/rules/ru/dash/month.js) | Тире между месяцами | 310 | | ✓ |
| 51. | [ru/dash/surname](../src/rules/ru/dash/surname.js) | Сокращения с помощью тире | 310 | | ✓ |
| 52. | [ru/dash/taki](../src/rules/ru/dash/taki.js) | Дефис между «верно-таки» и т. д. | 310 | | ✓ |
| 53. | [ru/dash/time](../src/rules/ru/dash/time.js) | Тире в интервалах времени | 310 | | ✓ |
| 54. | [ru/dash/to](../src/rules/ru/dash/to.js) | Дефис перед «то», «либо», «нибудь» | 310 | | ✓ |
| 55. | [ru/dash/weekday](../src/rules/ru/dash/weekday.js) | Тире между днями недели | 310 | | ✓ |
| 56. | [ru/dash/years](../src/rules/ru/dash/years.js) | Замена дефиса на тире в годах | 310 | | ✓ |
| 57. | [ru/date/fromISO](../src/rules/ru/date/fromISO.js) | Преобразование дат YYYY-MM-DD к виду DD.MM.YYYY | 810 | | ✓ |
| 58. | [ru/date/weekday](../src/rules/ru/date/weekday.js) | 2 Мая, Понедельник → 2 мая, понедельник | 810 | | ✓ |
| 59. | [ru/money/currency](../src/rules/ru/money/currency.js) | Символ валюты ($, €, ¥, Ұ, £ и ₤) после числа, $100 → 100 $ | 710 | | ✓ |
| 60. | [ru/money/ruble](../src/rules/ru/money/ruble.js) | 1 руб. → 1 ₽ | 710 | | |
| 61. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Нераз. пробел в сокращениях, например, в «т. д.» | 510 | | ✓ |
| 62. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Расстановка неразрывного пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др. | 510 | | ✓ |
| 63. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Нераз. узкий пробел после № | 510 | | ✓ |
| 64. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Нераз. пробел перед «ли», «ль», «же», «бы», «б» | 515 | | ✓ |
| 65. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Удаление пробелов и лишних точек в «вв.» | 510 | | ✓ |
| 66. | [ru/nbsp/dayMonth](../src/rules/ru/nbsp/dayMonth.js) | Нераз. пробел между числом и месяцем | 510 | | ✓ |
| 67. | [ru/nbsp/groupNumbers](../src/rules/ru/nbsp/groupNumbers.js) | Замена пробела на неразрывный узкий пробел в группах чисел | 510 | | ✓ |
| 68. | [ru/nbsp/initials](../src/rules/ru/nbsp/initials.js) | Привязка инициалов к фамилии | 510 | | ✓ |
| 69. | [ru/nbsp/m](../src/rules/ru/nbsp/m.js) | м2 → м², м3 → м³ и нераз. пробел | 515 | | ✓ |
| 70. | [ru/nbsp/ooo](../src/rules/ru/nbsp/ooo.js) | Нераз. пробел после OOO, ОАО, ЗАО, НИИ и ПБОЮЛ | 510 | | ✓ |
| 71. | [ru/nbsp/page](../src/rules/ru/nbsp/page.js) | Нераз. пробел после «стр.», «гл.», «рис.», «илл.» | 510 | | ✓ |
| 72. | [ru/nbsp/ps](../src/rules/ru/nbsp/ps.js) | Нераз. пробел в P. S. и P. P. S. | 510 | | ✓ |
| 73. | [ru/nbsp/rubleKopek](../src/rules/ru/nbsp/rubleKopek.js) | Нераз. пробел перед «руб.» и «коп.» | 510 | | ✓ |
| 74. | [ru/nbsp/see](../src/rules/ru/nbsp/see.js) | Нераз. пробел после сокращений «см.» и «им.» | 510 | | ✓ |
| 75. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Нераз. пробел после XXXX г. (2012 г.) | 510 | | ✓ |
| 76. | [ru/nbsp/years](../src/rules/ru/nbsp/years.js) | г.г. → гг. и нераз. пробел | 515 | | ✓ |
| 77. | [ru/number/comma](../src/rules/ru/number/comma.js) | Замена точки на запятую в числах | 610 | | ✓ |
| 78. | [ru/number/ordinals](../src/rules/ru/number/ordinals.js) | N-ый, -ой, -ая, -ое, -ые, -ым, -ом, -ых → N-й, -я, -е, -м, -х (25-й) | 610 | | ✓ |
| 79. | [ru/optalign/bracket](../src/rules/ru/optalign/bracket.js) | для открывающей скобки | 1010 | | |
| 80. | [ru/optalign/comma](../src/rules/ru/optalign/comma.js) | для запятой | 1010 | | |
| 81. | [ru/optalign/quote](../src/rules/ru/optalign/quote.js) | для открывающей кавычки | 1010 | | |
| 82. | [ru/other/accent](../src/rules/ru/other/accent.js) | Замена заглавной буквы на строчную с добавлением ударения | 910 | | |
| 83. | [ru/other/phone-number](../src/rules/ru/other/phone-number.js) | Форматирование телефонных номеров | 910 | | ✓ |
| 84. | [ru/punctuation/ano](../src/rules/ru/punctuation/ano.js) | Расстановка запятых перед «а» и «но» | 410 | | ✓ |
| 85. | [ru/punctuation/exclamation](../src/rules/ru/punctuation/exclamation.js) | !! → ! | 410 | | ✓ |
| 86. | [ru/punctuation/exclamationQuestion](../src/rules/ru/punctuation/exclamationQuestion.js) | !? → ?! | 415 | | ✓ |
| 87. | [ru/punctuation/hellip](../src/rules/ru/punctuation/hellip.js) | Три точки на многоточие, ?... → ?.. и пр. | 410 | | ✓ |
| 88. | [ru/space/afterHellip](../src/rules/ru/space/afterHellip.js) | Пробел после ..., !.. и ?.. | 210 | | ✓ |

@@ -94,0 +94,0 @@ | 89. | [ru/space/year](../src/rules/ru/space/year.js) | Пробел между числом и словом «год» | 210 | | ✓ |

{
"name": "typograf",
"description": "The client and server typography",
"version": "5.8.0",
"version": "6.0.0",
"author": {

@@ -25,3 +25,3 @@ "name": "Denis Seleznev",

"engines": {
"node": ">= 0.10"
"node": ">= 4"
},

@@ -37,5 +37,7 @@ "files": [

"chai": "~3.5.0",
"eslint": "~3.16.1",
"gulp": "~3.9.1",
"gulp-concat": "~2.6.1",
"gulp-filter": "~4.0.0",
"gulp-filter": "~5.0.0",
"gulp-include": "^2.3.1",
"gulp-jsonlint": "^1.2.0",

@@ -47,5 +49,5 @@ "gulp-rename": "~1.2.0",

"istanbul": "~0.4.4",
"eslint": "~3.12.2",
"jscs": "~3.0.7",
"mocha": "~3.2.0",
"sinon": "^1.17.7",
"sort-keys": "~1.1.2",

@@ -52,0 +54,0 @@ "through": "~2.3.6",

@@ -43,3 +43,3 @@ Типограф на JavaScript

<script>
var tp = new Typograf({lang: 'ru'});
var tp = new Typograf({locale: ['ru', 'en-US']});
alert(tp.execute(' Мир - мой мир!! '));

@@ -56,3 +56,3 @@ </script>

const Typograf = require('typograf');
const tp = new Typograf({lang: 'ru'});
const tp = new Typograf({locale: ['ru', 'en-US']});

@@ -71,2 +71,23 @@ console.log(tp.execute(' Мир - мой мир!! '));

## Локализация
Типограф поддерживает [несколько десятков локалей](https://github.com/typograf/typograf/blob/dev/docs/LOCALES.en-US.md).
Задать локаль можно как одну, так и несколько. Первая локаль является основной, по ней выбирается какие будут выполнены правила и вид кавычек.
```js
// Выполняются правила "common/*" и "ru/*".
// Кавычки русские.
// Расставка неразрывных пробелов только между русскими словами.
var tpRu = new Typograf({locale: 'ru'});
// Выполняются правила "common/*" и "ru/*".
// Кавычки русские.
// Расставка неразрывных пробелов между русскими и английскими словами.
var tpRuEn = new Typograf({locale: ['ru', 'en-US']});
// Выполняются правила "common/*" и "en-US/*".
// Кавычки английские.
// Расставка неразрывных пробелов между русскими и английскими словами.
var tpEnRu = new Typograf({locale: ['en-US', 'ru']});
```
## API

@@ -79,5 +100,5 @@ ### Висячая пунктуация

var Typograf = require('typograf'),
tp = new Typograf({lang: 'ru'});
tp = new Typograf({locale: ['ru', 'en-US']});
tp.enable('ru/optalign/*');
tp.enableRule('ru/optalign/*');
console.log(tp.execute('"Мир"'));

@@ -94,10 +115,10 @@ ```

```js
var tp = new Typograf({lang: 'ru'});
tp.enable('ru/money/ruble'); // Включить правило
tp.enable('ru/money/*'); // Включить все правила в группе
tp.enable('*'); // Включить все правила
var tp = new Typograf({locale: ['ru', 'en-US']});
tp.enableRule('ru/money/ruble'); // Включить правило
tp.enableRule('ru/money/*'); // Включить все правила в группе
tp.enableRule('*'); // Включить все правила
//...
tp.disable('ru/money/ruble'); // Отключить правило
tp.disable('ru/money/*'); // Отключить все правила в группе
tp.disable('*'); // Отключить все правила
tp.disableRule('ru/money/ruble'); // Отключить правило
tp.disableRule('ru/money/*'); // Отключить все правила в группе
tp.disableRule('*'); // Отключить все правила
```

@@ -107,3 +128,3 @@

```js
var tp = new Typograf({lang: 'ru'});
var tp = new Typograf({locale: ['ru', 'en-US']});

@@ -113,12 +134,9 @@ // Название правила, название настройки, значение

// Неразрывный пробел перед последним словом в предложении, не более 5 символов
tp.setting('common/nbsp/beforeShortLastWord', 'lengthLastWord', 5);
tp.setSetting('common/nbsp/beforeShortLastWord', 'lengthLastWord', 5);
// Вложенные кавычки тоже «ёлочки»
tp.setting('ru/punctuation/quote', 'lquote2', '«');
tp.setting('ru/punctuation/quote', 'rquote2', '»');
tp.setting('ru/punctuation/quote', 'lquote3', '«');
tp.setting('ru/punctuation/quote', 'rquote3', '»');
// Вложенные кавычки тоже «ёлочки» для русской типографики
tp.setSetting('common/punctuation/quote', 'ru', {left: '«', right: '»', removeDuplicateQuotes: true});
// Неразрывный пробел после короткого слова, не более 3 символов
tp.setting('common/nbsp/afterShortWord', 'lengthShortWord', 3);
tp.setSetting('common/nbsp/afterShortWord', 'lengthShortWord', 3);
```

@@ -129,3 +147,3 @@

// Типографический смайлик
Typograf.rule({
Typograf.addRule({
name: 'common/other/typographicSmiley',

@@ -141,3 +159,3 @@ handler: function (text) {

// Режим по умолчанию, HTML-сущности, как UTF-8 символы
var tp = new Typograf({lang: 'ru'});
var tp = new Typograf({locale: ['ru', 'en-US']});
tp.execute('12 кг...'); // 12 кг…

@@ -147,3 +165,3 @@

var tpName = new Typograf({
lang: 'ru',
locale: ['ru', 'en-US'],
htmlEntity: {type: 'name'}

@@ -155,3 +173,3 @@ });

var tpDigit = new Typograf({
lang: 'ru',
locale: ['ru', 'en-US'],
htmlEntity: {type: 'digit'}

@@ -164,3 +182,3 @@ });

var tpNameInvisible = new Typograf({
lang: 'ru',
locale: ['ru', 'en-US'],
htmlEntity: {

@@ -175,3 +193,3 @@ type: 'name',

var tpDigit = new Typograf({
lang: 'ru',
locale: ['ru', 'en-US'],
htmlEntity: {

@@ -189,3 +207,3 @@ type: 'digit',

```js
var tp = new Typograf({lang: 'ru', live: true});
var tp = new Typograf({locale: ['ru', 'en-US'], live: true});
```

@@ -201,3 +219,3 @@ [Подробнее](https://github.com/typograf/jquery-typograf)

```js
var tp = new Typograf({lang: 'ru'});
var tp = new Typograf({locale: ['ru', 'en-US']});

@@ -204,0 +222,0 @@ // Отключить типографирование внутри тега <no-typography>

@@ -12,8 +12,9 @@ declare namespace typograf {

interface Typograf {
execute(text: string, prefs?: {htmlEntity?: HtmlEntity, lang?: string, lineEnding: LineEnding, mode?: Mode}): string;
enable(rule: string | string[]): Typograf;
disable(rule: string | string[]): Typograf;
enabled(rule: string): boolean;
disabled(rule: string): boolean;
setting(rule: string, setting: string, value: any);
execute(text: string, prefs?: {htmlEntity?: HtmlEntity, locale?: string | string[], lineEnding: LineEnding}): string;
enableRule(rule: string | string[]): Typograf;
disableRule(rule: string | string[]): Typograf;
isEnabledRule(rule: string): boolean;
isDisabledRule(rule: string): boolean;
getSetting(rule: string, setting: string) : any;
setSetting(rule: string, setting: string, value: any) : Typograf;
addSafeTag(startTag: string | RegExp, endTag?: string, middle?: string): Typograf;

@@ -23,9 +24,8 @@ }

interface Options {
lang: string;
locale: string;
htmlEntity?: HtmlEntity;
lineEnding?: LineEnding;
mode?: Mode;
live?: boolean;
enable?: string | string[];
disable?: string | string[];
enableRule?: string | string[];
disableRule?: string | string[];
}

@@ -44,3 +44,4 @@

new (options: Options): Typograf;
rule: (options: AddRuleOptions) => TypografStatic;
addRule: (options: AddRuleOptions) => TypografStatic;
addInnerRule: (options: AddRuleOptions) => TypografStatic;
}

@@ -47,0 +48,0 @@ }

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc