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.7.0 to 5.8.0

7

CHANGELOG.md
# Changelog
#v5.7.0
# v5.8.0
Доработки по расстановке кавычек и апострофа #143, #214. Правило `ru/punctuation/apostrophe` переименовано в `common/punctuation/apostrophe`.
Рефакторинг обработки HTML-сущностей и безопасных тегов #216, #217.
# v5.7.0
Новые правила:

@@ -5,0 +10,0 @@ - Замена №№ на № `ru/symbols/NN` #205

4

dist/typograf.min.js
/*! 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._settings={},this._enabledRules={},this._replaceLabel=this._replaceLabel.bind(this),this._pasteLabel=this._pasteLabel.bind(this),this._initSafeTags(),this._innerRules=[].concat(this._innerRules),this._rules=[].concat(this._rules),this._rules.forEach(this._prepareRule,this),this._prefs.disable&&this.disable(this._prefs.disable),this._prefs.enable&&this.enable(this._prefs.enable)}function r(e){var r=[];return e.forEach(function(e){var n=e[0],a=e[1],t=String.fromCharCode(a),u=["&"+n+";","&#"+a+";",t,new RegExp("&"+n+";","g"),new RegExp(t,"g")];r.push(u)},this),r}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._langs=["en","ru"],e._setIndex=function(r){var n=r.index,a=typeof n,t=e.groupIndexes[r._group];"undefined"===a?n=t:"string"===a&&(n=t+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,n){if(r=""+r,!r)return"";n=n||{};var a=this,t={},u={},i=this._prepareHtmlEntityParam(n.mode||this._prefs.mode,n.htmlEntity||this._prefs.htmlEntity),l=function(e){r=a._executeRules(r,t[e],u[e])};return this._lang=n.lang||this._prefs.lang||"common",r=this._removeCR(r),this._innerRules.forEach(function(e){var r=e.queue;u[r]=u[r]||[],u[r].push(e)}),this._rules.forEach(function(e){var r=e.queue;t[r]=t[r]||[],t[r].push(e)}),this._isHTML=r.search(/(<\/?[a-z]|<!|&[lg]t;)/i)!==-1,l("start"),r=this._hideSafeTags(r),l("safe-tags"),r=this._utfication(r),this._prefs.live&&(r=e._replaceNbsp(r)),l("utf"),l(),r=this._restoreHtmlEntities(r,i),l("entity"),r=this._showSafeTags(r),l("end"),this._lang=null,this._isHTML=null,r=this._fixLineEnding(r,n.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 a=e instanceof RegExp?e:[e,r,n];return this._safeTags.own.push(this._prepareSafeTag(a)),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 a=this.data("l")+"\u0301\\d",t=e._privateLabel,u=n.lquote,i=n.rquote,l=n.lquote2,s=n.rquote2,o="["+e.data("common/quote")+"]",c="["+a+")!?.:;#*,\u2026]*?",p=new RegExp('"(['+a+"])","gi"),d=new RegExp("("+c+')"('+c+")","gi"),h=new RegExp(o,"g"),g=new RegExp("^(\\s)?("+o+")","g"),m=new RegExp("(^|\\s)"+o+t,"g"),f=new RegExp(t+o+"([\\s!?.:;#*,]|$)","g"),$=0,b=this.data("lLd");return r=r.replace(new RegExp("(["+b+'])"(?=['+b+"])","g"),"$1"+e._privateQuote).replace(h,function(){return $++,'"'}).replace(p,u+"$1").replace(d,"$1"+i+"$2").replace(m,"$1"+u+t).replace(f,t+i+"$1").replace(g,"$1"+u),l&&s&&$%2===0&&(r=this._innerQuote(r,n)),r.replace(new RegExp(e._privateQuote,"g"),'"')},_innerQuote:function(r,n){var a=[n.lquote],t=[n.rquote];n.lquote2&&n.rquote2&&(a.push(n.lquote2),t.push(n.rquote2),n.lquote3&&n.rquote3&&(a.push(n.lquote3),t.push(n.rquote3)));for(var u=n.lquote,i=n.rquote,l=new Array(r.length),s=e._privateQuote,o=-1,c=a.length-1,p=o,d=0,h=r.length;d<h;d++){var g=r[d];g===u?(p++,p>c&&(p=c),l.push(a[p])):g===i?p<=o?(p=0,l.push(a[p])):(l.push(t[p]),p--,p<o&&(p=o)):(g===s&&(p=o),l.push(g))}return l.join("")},_executeRules:function(e,r,n){return n&&n.forEach(function(r){e=this._ruleIterator(e,r)},this),r&&r.forEach(function(r){e=this._ruleIterator(e,r)},this),e},_ruleIterator:function(e,r){var n=r._lang,a=this._prefs.live;return a===!0&&r.live===!1||a===!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 a=e.name;n.test(a)&&(this._enabledRules[a]=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},_initSafeTags:function(){var e=[["<!--","-->"],["<!ENTITY",">"],["<!DOCTYPE",">"],["<\\?xml","\\?>"],["<!\\[CDATA\\[","\\]\\]>"]];["code","kbd","object","pre","samp","script","style","var"].forEach(function(r){e.push(["<"+r+"(\\s[^>]*?)?>","</"+r+">"])},this),this._safeTags={html:e.map(this._prepareSafeTag),own:[],url:[this._reUrl]}},_reUrl:new RegExp("(https?|file|ftp)://([a-zA-Z0-9/+-=%&:_.~?]+[a-zA-Z0-9#+]*)","g"),_hideSafeTags:function(e){var r=this,n=function(n){e=e.replace(r._prepareSafeTag(n),r._pasteLabel)},a=function(e){r._safeTags[e].forEach(n)};return this._hiddenSafeTags={},this._iLabel=0,a("own"),this._isHTML&&(a("html"),e=this._hideHTMLTags(e)),a("url"),e},_prepareSafeTag:function(e){var r;if(e instanceof RegExp)r=e;else{var n=e[0],a=e[1],t="undefined"==typeof e[2]?"[^]*?":e[2];r=new RegExp(n+t+a,"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._hiddenSafeTags[r]=e,this._iLabel++,r},_replaceLabel:function(e){return this._hiddenSafeTags[e]},_hideHTMLTags:function(e){return e.replace(/<\/?[a-z][^]*?>/gi,this._pasteLabel).replace(/&lt;\/?[a-z][^]*?&gt;/gi,this._pasteLabel).replace(/&[gl]t;/gi,this._pasteLabel)},_showSafeTags:function(r){var n=e._privateLabel,a=new RegExp(n+"tf\\d+"+n,"g"),t=new RegExp(n+"tf\\d"),u=0;Object.keys(this._safeTags).forEach(function(e){u+=e.length});for(var i=0;i<u&&(r=r.replace(a,this._replaceLabel),r.search(t)!==-1);i++);return this._hiddenSafeTags={},r},_utfication:function(e){return e.search(/&#/)!==-1&&(e=this._decHexToUtf(e)),e.search(/&[a-z]/i)!==-1&&this._htmlEntities.forEach(function(r){e=e.replace(r[3],r[2])}),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))})},_prepareHtmlEntityParam:function(e,r){return e?{type:e}:r||{}},_restoreHtmlEntities:function(e,r){var n=r.type,a=this._htmlEntities;return"name"!==n&&"digit"!==n||((r.onlyInvisible||r.list)&&(a=[],r.onlyInvisible&&(a=a.concat(this._invisibleHtmlEntities)),r.list&&(a=a.concat(this._prepareListParam(r.list)))),e=this._restoreHtmlEntitiesByIndex(e,{name:0,digit:1}[n],a)),e},_prepareListParam:function(e){var r=[];return e.forEach(function(e){var n=this._htmlEntitiesByName[e];n&&r.push(n)},this),r},_restoreHtmlEntitiesByIndex:function(e,r,n){return n.forEach(function(n){n[r]&&(e=e.replace(n[4],n[r]))}),e}},e.version="5.7.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};var n=[["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]],a=[["nbsp",160],["thinsp",8201],["ensp",8194],["emsp",8195],["shy",173],["zwnj",8204],["zwj",8205],["lrm",8206],["rlm",8207]];return e.prototype._htmlEntities=r([].concat(n,a)),e.prototype._htmlEntitiesByName=e.prototype._htmlEntities.reduce(function(e,r){return e[r[0].replace(/&|;/g,"")]=r,e},{}),e.prototype._invisibleHtmlEntities=r(a),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\u201a\u201c\u201f\u2018\u201b\u201d\u2019"'),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",a=e.split(n);return a.forEach(function(e,n,a){e.trim()&&(r.test(e)||(a[n]=e.replace(/^(\s*)/,"$1<p>").replace(/(\s*)$/,"</p>$1")))}),a.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(e){return this._isHTML?e:e.replace(this._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 a=n,t=r+"://"+n,u='<a href="'+t+'">';return"http"===r||"https"===r?(a=a.replace(/^www\./,""),u+("http"===r?a:r+"://"+a)+"</a>"):u+t+"</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 a=n.lengthShortWord,t=" \xa0("+e._privateLabel+this.data("common/quote"),u="(^|["+t+"])(["+this.data("l")+"]{1,"+a+"}) ",i="$1$2\xa0",l=new RegExp(u,"gim");return r.replace(l,i).replace(l,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,a){return r+n.replace(/([^\u00A0])\u00A0([^\u00A0])/g,"$1 $2")+a}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")+"]",a=new RegExp("("+n+"|^)(["+this.data("l")+"]{"+r.min+",}) \\2("+n+"|$)","gi");return e.replace(a,"$1$2$3")},settings:{min:2},disabled:!0}),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,a=new RegExp("(!|;|\\?)([^).!;?\\s[\\])"+n+this.data("common/quote")+"])","g"),t=new RegExp('(\\D)(,|:)([^)",:.?\\s\\/\\\\'+n+"])","g");return r.replace(a,"$1 $2").replace(t,"$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")+")",a=new RegExp("(X|I|V)[ |\xa0]?"+n+"[ |\xa0]?(X|I|V)","g");return e.replace(a,"$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"),a=new RegExp('(["\xbb\u2018\u201c,])[ |\xa0]?('+n+")[ |\xa0]","g"),t=new RegExp("(^|"+e._privateLabel+")("+n+")( |\xa0)","gm"),u=new RegExp("([.\u2026?!])[ \xa0]("+n+")[ \xa0]","g");return r.replace(a,"$1\xa0\u2014 ").replace(t,"$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")+")",a="("+this.data("ru/monthPreCase")+")",t=this.data("common/dash"),u=new RegExp(n+" ?("+t+") ?"+n,"gi"),i=new RegExp(a+" ?("+t+") ?"+a,"gi"),l="$1"+r.dash+"$3";return e.replace(u,l).replace(i,l)},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")+")",a=new RegExp(n+" ?("+this.data("common/dash")+") ?"+n,"gi");return e.replace(a,"$1"+r.dash+"$3")},settings:{dash:"\u2013"}}),e.rule({name:"ru/dash/years",handler:function(e,r){var n=this.data("common/dash"),a=new RegExp("(\\D|^)(\\d{4})[ \xa0]?("+n+")[ \xa0]?(\\d{4})(?=[ \xa0]?\u0433)","g");return e.replace(a,function(e,n,a,t,u){return parseInt(a,10)<parseInt(u,10)?n+a+r.dash+u:e})},settings:{dash:"\u2013"}}),e.rule({name:"ru/date/fromISO",handler:function(e){var r="(-|\\.|\\/)",n="(-|\\/)",a=new RegExp("(^|\\D)(\\d{4})"+r+"(\\d{2})"+r+"(\\d{2})(\\D|$)","gi"),t=new RegExp("(^|\\D)(\\d{2})"+n+"(\\d{2})"+n+"(\\d{4})(\\D|$)","gi");return e.replace(a,"$1$6.$4.$2$7").replace(t,"$1$4.$2.$6$7")}}),e.rule({name:"ru/date/weekday",handler:function(e){var r="( |\xa0)",n=this.data("ru/monthGenCase"),a=this.data("ru/weekday"),t=new RegExp("(\\d)"+r+"("+n+"),"+r+"("+a+")","gi");return e.replace(t,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"),a=new RegExp("(^|[\\D])([\\d.,]+) ?"+r,"g"),t="$1$3\xa0$2",u="$1$2\xa0$3";return e.replace(n,t).replace(a,u)}}),e.rule({name:"ru/money/ruble",handler:function(e){var r="$1\xa0\u20bd",n="(\\d+)( |\xa0)?(\u0440|\u0440\u0443\u0431)\\.",a=new RegExp("^"+n+"$","g"),t=new RegExp(n+"(?=[!?,:;])","g"),u=new RegExp(n+"(?=\\s+[A-\u042f\u0401])","g");return e.replace(a,r).replace(t,r).replace(u,r+".")},disabled:!0}),e.rule({name:"ru/nbsp/abbr",handler:function(r){function n(e,r,n,a){return["\u0440\u0444","\u0440\u0443","\u0440\u0443\u0441","\u043e\u0440\u0433","\u0443\u043a\u0440","\u0431\u0433","\u0441\u0440\u0431"].indexOf(a)>-1?e:r+n+".\xa0"+a+"."}var a=new RegExp("(^|\\s|"+e._privateLabel+")([\u0430-\u044f\u0451]{1,3})\\. ?([\u0430-\u044f\u0451]{1,3})\\.","g");return r.replace(a,n).replace(a,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"),a=new RegExp("([\u0410-\u042f\u0401\u0430-\u044f\u0451])[ \xa0]"+r+"[ \xa0]","g");return e.replace(n,"$1\xa0$2").replace(a,"$1\xa0$2 ")}}),e.rule({name:"ru/nbsp/centuries",handler:function(e){var r=this.data("common/dash"),n="(^|\\s)([VIX]+)",a='(?=[,;:?!"\u2018\u201c\xbb]|$)',t=new RegExp(n+"[ \xa0]?\u0432\\.?"+a,"gm"),u=new RegExp(n+"("+r+")([VIX]+)[ \xa0]?\u0432\\.?([ \xa0]?\u0432\\.?)?"+a,"gm");return e.replace(t,"$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 ",a=this.data("ru/lquote"),t=this.data("ru/rquote"),u=new RegExp("(^|["+n+a+e._privateLabel+'"])([\u0410-\u042f\u0401])\\.['+n+"]?([\u0410-\u042f\u0401])\\.["+n+']?([\u0410-\u042f\u0401][\u0430-\u044f\u0451]+)(?=[\\s.,;:?!"'+t+"]|$)","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,a=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(a,function(e,r,n,a,t,u){var i={2:"\xb2","\xb2":"\xb2",3:"\xb3","\xb3":"\xb3","":""}[t||""];return r+n+"\xa0"+a+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,a,t){return("\xa0"===r?" ":r)+n+".\xa0"+a+t})}}),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 a={"\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+"-"+a[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",a='(["'+this.setting(n,"lquote")+this.setting(n,"lquote2")+"])",t=new RegExp("(^|\n\n|"+e._privateLabel+")("+a+")","g"),u=new RegExp("([^\n"+e._privateLabel+"])([ \xa0\n])("+a+")","gi");return r.replace(t,'$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,a){return r+n.toLowerCase()+"\u0301"+a})},disabled:!0}),function(){function r(e){var r,t,c="",p=e[0];if(e.length<8)return a(e);if(e.length>10)if("+"===p){if(e[1]!==i)return e;r=!0,e=e.substr(2)}else"8"===p&&(t=!0,e=e.substr(1));for(var d=s;d>=o;d--){var h=+e.substr(0,d);if(l.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":"")+(t?"8\xa0":"")+n(c)+"\xa0"+a(e)}function n(e){var r=+e,n=e.length,a=[e],t=!1;if(n>3)switch(n){case 4:a=[e.substr(0,2),e.substr(2,4)];break;case 5:a=[e.substr(0,3),e.substr(3,5)];break;case 6:a=[e.substr(0,2),e.substr(2,4),e.substr(4,6)]}else t=r>900&&r<=999||495===r||499===r;return a=a.join("-"),t?a:"("+a+")"}function a(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 t(e){return e.replace(/[^\d\+]/g,"")}var u=5,i="7",l=[],s=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++)l.push(n);else l.push(e)}),e.rule({name:"ru/other/phone-number",live:!1,handler:function(n){var a=e._privateLabel,u=new RegExp("(^|,| |"+a+")(\\+7[\\d\\(\\) \xa0-]{10,18})(?=,|;|"+a+"|$)","gm");return n.replace(u,function(e,n,a){var u=t(a);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,a,u,i){var l=t(i);return l.length>=5?n+a+u+r(l):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/apostrophe",index:"-5",handler:function(e){var r="(["+this.data("l")+"])",n=new RegExp(r+"['\u2019]"+r,"gi");return e.replace(n,"$1\u02bc$2")}}),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,a=r.rquote;return e=this._quote(e,r),n===r.lquote2&&a===r.rquote2?e.replace(new RegExp(n+n,"g"),n).replace(new RegExp(a+a,"g"),a):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 a=new RegExp("(["+n+"]{1,3})(?=[\u0410-\u042f\u0401\u0430-\u044f\u0451]+?)","g");return e.replace(a,function(e,n){for(var a="",t=0;t<n.length;t++)a+=r[n[t]];return a})}})}(),e._sortRules(),e._needSortRules=!0,e});
!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});

@@ -75,2 +75,6 @@ Typograf.titles = {

},
"common/punctuation/apostrophe": {
"en": "Placement of correct apostrophe",
"ru": "Расстановка правильного апострофа"
},
"common/punctuation/delDoublePunctuation": {

@@ -323,6 +327,2 @@ "en": "Removing double punctuation",

},
"ru/punctuation/apostrophe": {
"en": "Placement of correct apostrophe",
"ru": "Расстановка правильного апострофа"
},
"ru/punctuation/exclamation": {

@@ -329,0 +329,0 @@ "common": "!! → !"

@@ -75,2 +75,6 @@ {

},
"common/punctuation/apostrophe": {
"en": "Placement of correct apostrophe",
"ru": "Расстановка правильного апострофа"
},
"common/punctuation/delDoublePunctuation": {

@@ -323,6 +327,2 @@ "en": "Removing double punctuation",

},
"ru/punctuation/apostrophe": {
"en": "Placement of correct apostrophe",
"ru": "Расстановка правильного апострофа"
},
"ru/punctuation/exclamation": {

@@ -329,0 +329,0 @@ "common": "!! → !"

@@ -8,4 +8,4 @@ ## Rules of typograf in order of execution

| 3. | [common/symbols/copy](../src/rules/common/symbols/copy.js) | (c) → ©, (tm) → ™, (r) → ® | 110 | | ✓ |
| 4. | [ru/symbols/NN](../src/rules/ru/symbols/NN.js) | №№ → № | 110 | | ✓ |
| 5. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 4. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 5. | [ru/symbols/NN](../src/rules/ru/symbols/NN.js) | №№ → № | 110 | | ✓ |
| 6. | [common/symbols/cf](../src/rules/common/symbols/cf.js) | Adding ° to C and F | 110 | | ✓ |

@@ -28,21 +28,21 @@ | 7. | [common/space/replaceTab](../src/rules/common/space/replaceTab.js) | Replacement of tab to 4 spaces | 205 | | ✓ |

| 22. | [ru/dash/main](../src/rules/ru/dash/main.js) | Replacement hyphen with dash | 305 | | ✓ |
| 23. | [ru/dash/izpod](../src/rules/ru/dash/izpod.js) | Hyphen between “из-под” | 310 | | ✓ |
| 24. | [ru/dash/koe](../src/rules/ru/dash/koe.js) | Hyphen after “кое” and “кой” | 310 | | ✓ |
| 25. | [ru/dash/years](../src/rules/ru/dash/years.js) | Hyphen to dash in years | 310 | | ✓ |
| 26. | [ru/dash/ka](../src/rules/ru/dash/ka.js) | Hyphen before “ка” and “кась” | 310 | | ✓ |
| 27. | [ru/dash/izza](../src/rules/ru/dash/izza.js) | Hyphen between “из-за” | 310 | | ✓ |
| 28. | [ru/dash/weekday](../src/rules/ru/dash/weekday.js) | Dash between the days of the week | 310 | | ✓ |
| 29. | [ru/dash/to](../src/rules/ru/dash/to.js) | Hyphen before “то”, “либо”, “нибудь” | 310 | | ✓ |
| 30. | [ru/dash/directSpeech](../src/rules/ru/dash/directSpeech.js) | Dash in direct speech | 310 | | ✓ |
| 31. | [ru/dash/decade](../src/rules/ru/dash/decade.js) | Dash in decade | 310 | | ✓ |
| 32. | [ru/dash/time](../src/rules/ru/dash/time.js) | Dash in time intervals | 310 | | ✓ |
| 33. | [ru/dash/taki](../src/rules/ru/dash/taki.js) | Hyphen between “верно-таки” and etc. | 310 | | ✓ |
| 34. | [ru/dash/surname](../src/rules/ru/dash/surname.js) | Acronyms with a dash | 310 | | ✓ |
| 35. | [ru/dash/month](../src/rules/ru/dash/month.js) | Dash between months | 310 | | ✓ |
| 36. | [ru/dash/de](../src/rules/ru/dash/de.js) | Hyphen before “де” | 310 | | |
| 37. | [ru/dash/centuries](../src/rules/ru/dash/centuries.js) | Hyphen to dash in centuries | 310 | | ✓ |
| 38. | [ru/dash/daysMonth](../src/rules/ru/dash/daysMonth.js) | Dash between days of one month | 310 | | ✓ |
| 39. | [ru/punctuation/apostrophe](../src/rules/ru/punctuation/apostrophe.js) | Placement of correct apostrophe | 405 | | ✓ |
| 40. | [en/punctuation/quote](../src/rules/en/punctuation/quote.js) | Placement of quotation marks in texts in English | 410 | | ✓ |
| 41. | [ru/punctuation/exclamation](../src/rules/ru/punctuation/exclamation.js) | !! → ! | 410 | | ✓ |
| 23. | [ru/dash/directSpeech](../src/rules/ru/dash/directSpeech.js) | Dash in direct speech | 310 | | ✓ |
| 24. | [ru/dash/month](../src/rules/ru/dash/month.js) | Dash between months | 310 | | ✓ |
| 25. | [ru/dash/ka](../src/rules/ru/dash/ka.js) | Hyphen before “ка” and “кась” | 310 | | ✓ |
| 26. | [ru/dash/years](../src/rules/ru/dash/years.js) | Hyphen to dash in years | 310 | | ✓ |
| 27. | [ru/dash/koe](../src/rules/ru/dash/koe.js) | Hyphen after “кое” and “кой” | 310 | | ✓ |
| 28. | [ru/dash/izza](../src/rules/ru/dash/izza.js) | Hyphen between “из-за” | 310 | | ✓ |
| 29. | [ru/dash/izpod](../src/rules/ru/dash/izpod.js) | Hyphen between “из-под” | 310 | | ✓ |
| 30. | [ru/dash/weekday](../src/rules/ru/dash/weekday.js) | Dash between the days of the week | 310 | | ✓ |
| 31. | [ru/dash/to](../src/rules/ru/dash/to.js) | Hyphen before “то”, “либо”, “нибудь” | 310 | | ✓ |
| 32. | [ru/dash/decade](../src/rules/ru/dash/decade.js) | Dash in decade | 310 | | ✓ |
| 33. | [ru/dash/de](../src/rules/ru/dash/de.js) | Hyphen before “де” | 310 | | |
| 34. | [ru/dash/time](../src/rules/ru/dash/time.js) | Dash in time intervals | 310 | | ✓ |
| 35. | [ru/dash/taki](../src/rules/ru/dash/taki.js) | Hyphen between “верно-таки” and etc. | 310 | | ✓ |
| 36. | [ru/dash/surname](../src/rules/ru/dash/surname.js) | Acronyms with a dash | 310 | | ✓ |
| 37. | [ru/dash/daysMonth](../src/rules/ru/dash/daysMonth.js) | Dash between days of one month | 310 | | ✓ |
| 38. | [ru/dash/centuries](../src/rules/ru/dash/centuries.js) | Hyphen to dash in centuries | 310 | | ✓ |
| 39. | [en/punctuation/quote](../src/rules/en/punctuation/quote.js) | Placement of quotation marks in texts in English | 410 | | ✓ |
| 40. | [ru/punctuation/exclamation](../src/rules/ru/punctuation/exclamation.js) | !! → ! | 410 | | ✓ |
| 41. | [common/punctuation/apostrophe](../src/rules/common/punctuation/apostrophe.js) | Placement of correct apostrophe | 410 | | ✓ |
| 42. | [ru/punctuation/ano](../src/rules/ru/punctuation/ano.js) | Placement of commas before “а” and “но” | 410 | | ✓ |

@@ -53,39 +53,39 @@ | 43. | [common/punctuation/delDoublePunctuation](../src/rules/common/punctuation/delDoublePunctuation.js) | Removing double punctuation | 410 | | ✓ |

| 46. | [ru/punctuation/exclamationQuestion](../src/rules/ru/punctuation/exclamationQuestion.js) | !? → ?! | 415 | | ✓ |
| 47. | [ru/nbsp/initials](../src/rules/ru/nbsp/initials.js) | Binding of initials to the name | 510 | | ✓ |
| 48. | [common/nbsp/beforeShortLastWord](../src/rules/common/nbsp/beforeShortLastWord.js) | Non-breaking space before last short word in sentence | 510 | | ✓ |
| 49. | [common/nbsp/beforeShortLastNumber](../src/rules/common/nbsp/beforeShortLastNumber.js) | Non-breaking space before number (maximum 2 digits) at end of sentence | 510 | | ✓ |
| 50. | [common/nbsp/afterShortWord](../src/rules/common/nbsp/afterShortWord.js) | Non-breaking space after short word | 510 | | ✓ |
| 51. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Non-breaking thin space after § | 510 | | ✓ |
| 52. | [common/nbsp/afterNumber](../src/rules/common/nbsp/afterNumber.js) | Non-breaking space between number and word | 510 | | |
| 53. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Non-breaking space before XXXX г. (2012 г.) | 510 | | ✓ |
| 54. | [ru/nbsp/see](../src/rules/ru/nbsp/see.js) | Non-breaking space after abbreviation «см.» and «им.» | 510 | | ✓ |
| 55. | [ru/nbsp/rubleKopek](../src/rules/ru/nbsp/rubleKopek.js) | Not once. space before the “rub” and “cop.” | 510 | | ✓ |
| 56. | [ru/nbsp/ps](../src/rules/ru/nbsp/ps.js) | Non-breaking space in P. S. and P. P. S. | 510 | | ✓ |
| 57. | [ru/nbsp/page](../src/rules/ru/nbsp/page.js) | Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.” | 510 | | ✓ |
| 58. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Non-breaking space in abbreviations, e.g. “т. д.” | 510 | | ✓ |
| 59. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al. | 510 | | ✓ |
| 60. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Non-breaking thin space after № | 510 | | ✓ |
| 47. | [ru/nbsp/groupNumbers](../src/rules/ru/nbsp/groupNumbers.js) | Replacement space on a narrow non-breaking space in groups of numbers | 510 | | ✓ |
| 48. | [common/nbsp/dpi](../src/rules/common/nbsp/dpi.js) | Non-breaking space before lpi and dpi | 510 | | ✓ |
| 49. | [common/nbsp/beforeShortLastWord](../src/rules/common/nbsp/beforeShortLastWord.js) | Non-breaking space before last short word in sentence | 510 | | ✓ |
| 50. | [common/nbsp/beforeShortLastNumber](../src/rules/common/nbsp/beforeShortLastNumber.js) | Non-breaking space before number (maximum 2 digits) at end of sentence | 510 | | ✓ |
| 51. | [common/nbsp/afterShortWord](../src/rules/common/nbsp/afterShortWord.js) | Non-breaking space after short word | 510 | | ✓ |
| 52. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Non-breaking thin space after § | 510 | | ✓ |
| 53. | [common/nbsp/afterNumber](../src/rules/common/nbsp/afterNumber.js) | Non-breaking space between number and word | 510 | | |
| 54. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Non-breaking space before XXXX г. (2012 г.) | 510 | | ✓ |
| 55. | [ru/nbsp/see](../src/rules/ru/nbsp/see.js) | Non-breaking space after abbreviation «см.» and «им.» | 510 | | ✓ |
| 56. | [ru/nbsp/rubleKopek](../src/rules/ru/nbsp/rubleKopek.js) | Not once. space before the “rub” and “cop.” | 510 | | ✓ |
| 57. | [ru/nbsp/ps](../src/rules/ru/nbsp/ps.js) | Non-breaking space in P. S. and P. P. S. | 510 | | ✓ |
| 58. | [ru/nbsp/page](../src/rules/ru/nbsp/page.js) | Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.” | 510 | | ✓ |
| 59. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Non-breaking space in abbreviations, e.g. “т. д.” | 510 | | ✓ |
| 60. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al. | 510 | | ✓ |
| 61. | [ru/nbsp/ooo](../src/rules/ru/nbsp/ooo.js) | Non-breaking space after “OOO, ОАО, ЗАО, НИИ, ПБОЮЛ” | 510 | | ✓ |
| 62. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Remove spaces and extra points in “вв.” | 510 | | ✓ |
| 63. | [ru/nbsp/dayMonth](../src/rules/ru/nbsp/dayMonth.js) | Non-breaking space between number and month | 510 | | ✓ |
| 64. | [ru/nbsp/groupNumbers](../src/rules/ru/nbsp/groupNumbers.js) | Replacement space on a narrow non-breaking space in groups of numbers | 510 | | ✓ |
| 65. | [common/nbsp/dpi](../src/rules/common/nbsp/dpi.js) | Non-breaking space before lpi and dpi | 510 | | ✓ |
| 66. | [ru/nbsp/m](../src/rules/ru/nbsp/m.js) | m2 → м², m3 → м³ and non-breaking space | 515 | | ✓ |
| 67. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Non-breaking space before “ли”, “ль”, “же”, “бы”, “б” | 515 | | ✓ |
| 62. | [ru/nbsp/initials](../src/rules/ru/nbsp/initials.js) | Binding of initials to the name | 510 | | ✓ |
| 63. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Remove spaces and extra points in “вв.” | 510 | | ✓ |
| 64. | [ru/nbsp/dayMonth](../src/rules/ru/nbsp/dayMonth.js) | Non-breaking space between number and month | 510 | | ✓ |
| 65. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Non-breaking thin space after № | 510 | | ✓ |
| 66. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Non-breaking space before “ли”, “ль”, “же”, “бы”, “б” | 515 | | ✓ |
| 67. | [ru/nbsp/m](../src/rules/ru/nbsp/m.js) | m2 → м², m3 → м³ and non-breaking space | 515 | | ✓ |
| 68. | [ru/nbsp/years](../src/rules/ru/nbsp/years.js) | г.г. → гг. and non-breaking space | 515 | | ✓ |
| 69. | [ru/number/ordinals](../src/rules/ru/number/ordinals.js) | N-ый, -ой, -ая, -ое, -ые, -ым, -ом, -ых → N-й, -я, -е, -м, -х (25-й) | 610 | | ✓ |
| 70. | [common/number/times](../src/rules/common/number/times.js) | x → × (10 x 5 → 10×5) | 610 | | ✓ |
| 71. | [common/number/fraction](../src/rules/common/number/fraction.js) | 1/2 → ½, 1/4 → ¼, 3/4 → ¾ | 610 | | ✓ |
| 72. | [ru/number/comma](../src/rules/ru/number/comma.js) | Commas in numbers | 610 | | ✓ |
| 73. | [common/number/mathSigns](../src/rules/common/number/mathSigns.js) | != → ≠, <= → ≤, >= → ≥, ~= → ≅, +- → ± | 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) | Commas in numbers | 610 | | ✓ |
| 74. | [ru/money/currency](../src/rules/ru/money/currency.js) | Currency symbol ($, €, ¥, Ұ, £ and ₤) after the number, $100 → 100 $ | 710 | | ✓ |
| 75. | [ru/money/ruble](../src/rules/ru/money/ruble.js) | 1 руб. → 1 ₽ | 710 | | |
| 76. | [ru/date/weekday](../src/rules/ru/date/weekday.js) | 2 Мая, Понедельник → 2 мая, понедельник | 810 | | ✓ |
| 77. | [ru/date/fromISO](../src/rules/ru/date/fromISO.js) | Converting dates YYYY-MM-DD type DD.MM.YYYY | 810 | | ✓ |
| 76. | [ru/date/fromISO](../src/rules/ru/date/fromISO.js) | Converting dates YYYY-MM-DD type DD.MM.YYYY | 810 | | ✓ |
| 77. | [ru/date/weekday](../src/rules/ru/date/weekday.js) | 2 Мая, Понедельник → 2 мая, понедельник | 810 | | ✓ |
| 78. | [ru/other/accent](../src/rules/ru/other/accent.js) | Replacement capital letters to lowercase with addition of accent | 910 | | |
| 79. | [ru/other/phone-number](../src/rules/ru/other/phone-number.js) | Formatting phone numbers | 910 | | ✓ |
| 80. | [common/other/repeatWord](../src/rules/common/other/repeatWord.js) | Removing repeat words | 910 | | |
| 81. | [ru/optalign/comma](../src/rules/ru/optalign/comma.js) | for comma | 1010 | | |
| 81. | [ru/optalign/bracket](../src/rules/ru/optalign/bracket.js) | for opening bracket | 1010 | | |
| 82. | [ru/optalign/quote](../src/rules/ru/optalign/quote.js) | for opening quotation marks | 1010 | | |
| 83. | [ru/optalign/bracket](../src/rules/ru/optalign/bracket.js) | for opening bracket | 1010 | | |
| 83. | [ru/optalign/comma](../src/rules/ru/optalign/comma.js) | for comma | 1010 | | |
| 84. | [ru/typo/switchingKeyboardLayout](../src/rules/ru/typo/switchingKeyboardLayout.js) | Replacement of Latin letters in Russian. Typos occur when you switch keyboard layouts | 1110 | | ✓ |

@@ -92,0 +92,0 @@ | 85. | [common/nbsp/nowrap](../src/rules/common/nbsp/nowrap.js) | Replace non-breaking space to normal space in tags nowrap and nobr | 510 | end | ✓ |

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

| 3. | [common/symbols/copy](../src/rules/common/symbols/copy.js) | (c) → ©, (tm) → ™, (r) → ® | 110 | | ✓ |
| 4. | [ru/symbols/NN](../src/rules/ru/symbols/NN.js) | №№ → № | 110 | | ✓ |
| 5. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 4. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 5. | [ru/symbols/NN](../src/rules/ru/symbols/NN.js) | №№ → № | 110 | | ✓ |
| 6. | [common/symbols/cf](../src/rules/common/symbols/cf.js) | Добавление ° к C и F | 110 | | ✓ |

@@ -28,21 +28,21 @@ | 7. | [common/space/replaceTab](../src/rules/common/space/replaceTab.js) | Замена таба на 4 пробела | 205 | | ✓ |

| 22. | [ru/dash/main](../src/rules/ru/dash/main.js) | Замена дефиса на тире | 305 | | ✓ |
| 23. | [ru/dash/izpod](../src/rules/ru/dash/izpod.js) | Дефис между «из-под» | 310 | | ✓ |
| 24. | [ru/dash/koe](../src/rules/ru/dash/koe.js) | Дефис после «кое» и «кой» | 310 | | ✓ |
| 25. | [ru/dash/years](../src/rules/ru/dash/years.js) | Замена дефиса на тире в годах | 310 | | ✓ |
| 26. | [ru/dash/ka](../src/rules/ru/dash/ka.js) | Дефис перед «ка» и «кась» | 310 | | ✓ |
| 27. | [ru/dash/izza](../src/rules/ru/dash/izza.js) | Дефис между «из-за» | 310 | | ✓ |
| 28. | [ru/dash/weekday](../src/rules/ru/dash/weekday.js) | Тире между днями недели | 310 | | ✓ |
| 29. | [ru/dash/to](../src/rules/ru/dash/to.js) | Дефис перед «то», «либо», «нибудь» | 310 | | ✓ |
| 30. | [ru/dash/directSpeech](../src/rules/ru/dash/directSpeech.js) | Тире в прямой речи | 310 | | ✓ |
| 31. | [ru/dash/decade](../src/rules/ru/dash/decade.js) | Тире в десятилетиях, 80—90-е гг. | 310 | | ✓ |
| 32. | [ru/dash/time](../src/rules/ru/dash/time.js) | Тире в интервалах времени | 310 | | ✓ |
| 33. | [ru/dash/taki](../src/rules/ru/dash/taki.js) | Дефис между «верно-таки» и т. д. | 310 | | ✓ |
| 34. | [ru/dash/surname](../src/rules/ru/dash/surname.js) | Сокращения с помощью тире | 310 | | ✓ |
| 35. | [ru/dash/month](../src/rules/ru/dash/month.js) | Тире между месяцами | 310 | | ✓ |
| 36. | [ru/dash/de](../src/rules/ru/dash/de.js) | Дефис перед «де» | 310 | | |
| 37. | [ru/dash/centuries](../src/rules/ru/dash/centuries.js) | Замена дефиса на тире в веках | 310 | | ✓ |
| 38. | [ru/dash/daysMonth](../src/rules/ru/dash/daysMonth.js) | Тире между днями одного месяца | 310 | | ✓ |
| 39. | [ru/punctuation/apostrophe](../src/rules/ru/punctuation/apostrophe.js) | Расстановка правильного апострофа | 405 | | ✓ |
| 40. | [en/punctuation/quote](../src/rules/en/punctuation/quote.js) | Расстановка кавычек в текстах на английском | 410 | | ✓ |
| 41. | [ru/punctuation/exclamation](../src/rules/ru/punctuation/exclamation.js) | !! → ! | 410 | | ✓ |
| 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 | | ✓ |

@@ -53,39 +53,39 @@ | 43. | [common/punctuation/delDoublePunctuation](../src/rules/common/punctuation/delDoublePunctuation.js) | Удаление двойной пунктуации | 410 | | ✓ |

| 46. | [ru/punctuation/exclamationQuestion](../src/rules/ru/punctuation/exclamationQuestion.js) | !? → ?! | 415 | | ✓ |
| 47. | [ru/nbsp/initials](../src/rules/ru/nbsp/initials.js) | Привязка инициалов к фамилии | 510 | | ✓ |
| 48. | [common/nbsp/beforeShortLastWord](../src/rules/common/nbsp/beforeShortLastWord.js) | Нераз. пробел перед последним коротким словом в предложении | 510 | | ✓ |
| 49. | [common/nbsp/beforeShortLastNumber](../src/rules/common/nbsp/beforeShortLastNumber.js) | Нераз. пробел перед числом (не более 2 цифр) в конце предложения | 510 | | ✓ |
| 50. | [common/nbsp/afterShortWord](../src/rules/common/nbsp/afterShortWord.js) | Нераз. пробел после короткого слова | 510 | | ✓ |
| 51. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Нераз. узкий пробел после § | 510 | | ✓ |
| 52. | [common/nbsp/afterNumber](../src/rules/common/nbsp/afterNumber.js) | Нераз. пробел между числом и словом | 510 | | |
| 53. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Нераз. пробел после XXXX г. (2012 г.) | 510 | | ✓ |
| 54. | [ru/nbsp/see](../src/rules/ru/nbsp/see.js) | Нераз. пробел после сокращений «см.» и «им.» | 510 | | ✓ |
| 55. | [ru/nbsp/rubleKopek](../src/rules/ru/nbsp/rubleKopek.js) | Нераз. пробел перед «руб.» и «коп.» | 510 | | ✓ |
| 56. | [ru/nbsp/ps](../src/rules/ru/nbsp/ps.js) | Нераз. пробел в P. S. и P. P. S. | 510 | | ✓ |
| 57. | [ru/nbsp/page](../src/rules/ru/nbsp/page.js) | Нераз. пробел после «стр.», «гл.», «рис.», «илл.» | 510 | | ✓ |
| 58. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Нераз. пробел в сокращениях, например, в «т. д.» | 510 | | ✓ |
| 59. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Расстановка неразрывного пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др. | 510 | | ✓ |
| 60. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Нераз. узкий пробел после № | 510 | | ✓ |
| 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/centuries](../src/rules/ru/nbsp/centuries.js) | Удаление пробелов и лишних точек в «вв.» | 510 | | ✓ |
| 63. | [ru/nbsp/dayMonth](../src/rules/ru/nbsp/dayMonth.js) | Нераз. пробел между числом и месяцем | 510 | | ✓ |
| 64. | [ru/nbsp/groupNumbers](../src/rules/ru/nbsp/groupNumbers.js) | Замена пробела на неразрывный узкий пробел в группах чисел | 510 | | ✓ |
| 65. | [common/nbsp/dpi](../src/rules/common/nbsp/dpi.js) | Нераз. пробел перед lpi и dpi | 510 | | ✓ |
| 66. | [ru/nbsp/m](../src/rules/ru/nbsp/m.js) | м2 → м², м3 → м³ и нераз. пробел | 515 | | ✓ |
| 67. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Нераз. пробел перед «ли», «ль», «же», «бы», «б» | 515 | | ✓ |
| 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 | | ✓ |
| 67. | [ru/nbsp/m](../src/rules/ru/nbsp/m.js) | м2 → м², м3 → м³ и нераз. пробел | 515 | | ✓ |
| 68. | [ru/nbsp/years](../src/rules/ru/nbsp/years.js) | г.г. → гг. и нераз. пробел | 515 | | ✓ |
| 69. | [ru/number/ordinals](../src/rules/ru/number/ordinals.js) | N-ый, -ой, -ая, -ое, -ые, -ым, -ом, -ых → N-й, -я, -е, -м, -х (25-й) | 610 | | ✓ |
| 70. | [common/number/times](../src/rules/common/number/times.js) | x → × (10 x 5 → 10×5) | 610 | | ✓ |
| 71. | [common/number/fraction](../src/rules/common/number/fraction.js) | 1/2 → ½, 1/4 → ¼, 3/4 → ¾ | 610 | | ✓ |
| 72. | [ru/number/comma](../src/rules/ru/number/comma.js) | Замена точки на запятую в числах | 610 | | ✓ |
| 73. | [common/number/mathSigns](../src/rules/common/number/mathSigns.js) | != → ≠, <= → ≤, >= → ≥, ~= → ≅, +- → ± | 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 | | ✓ |
| 74. | [ru/money/currency](../src/rules/ru/money/currency.js) | Символ валюты ($, €, ¥, Ұ, £ и ₤) после числа, $100 → 100 $ | 710 | | ✓ |
| 75. | [ru/money/ruble](../src/rules/ru/money/ruble.js) | 1 руб. → 1 ₽ | 710 | | |
| 76. | [ru/date/weekday](../src/rules/ru/date/weekday.js) | 2 Мая, Понедельник → 2 мая, понедельник | 810 | | ✓ |
| 77. | [ru/date/fromISO](../src/rules/ru/date/fromISO.js) | Преобразование дат YYYY-MM-DD к виду DD.MM.YYYY | 810 | | ✓ |
| 76. | [ru/date/fromISO](../src/rules/ru/date/fromISO.js) | Преобразование дат YYYY-MM-DD к виду DD.MM.YYYY | 810 | | ✓ |
| 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/comma](../src/rules/ru/optalign/comma.js) | для запятой | 1010 | | |
| 81. | [ru/optalign/bracket](../src/rules/ru/optalign/bracket.js) | для открывающей скобки | 1010 | | |
| 82. | [ru/optalign/quote](../src/rules/ru/optalign/quote.js) | для открывающей кавычки | 1010 | | |
| 83. | [ru/optalign/bracket](../src/rules/ru/optalign/bracket.js) | для открывающей скобки | 1010 | | |
| 83. | [ru/optalign/comma](../src/rules/ru/optalign/comma.js) | для запятой | 1010 | | |
| 84. | [ru/typo/switchingKeyboardLayout](../src/rules/ru/typo/switchingKeyboardLayout.js) | Замена латинских букв на русские. Опечатки, возникающие при переключении клавиатурной раскладки | 1110 | | ✓ |

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

@@ -24,66 +24,66 @@ ## Rules of typograf

| 19. | [common/other/repeatWord](../src/rules/common/other/repeatWord.js) | Removing repeat words | 910 | | |
| 20. | [common/punctuation/delDoublePunctuation](../src/rules/common/punctuation/delDoublePunctuation.js) | Removing double punctuation | 410 | | ✓ |
| 21. | [common/space/afterPunctuation](../src/rules/common/space/afterPunctuation.js) | space after punctuation | 210 | | ✓ |
| 22. | [common/space/beforeBracket](../src/rules/common/space/beforeBracket.js) | Space before opening bracket | 210 | | ✓ |
| 23. | [common/space/bracket](../src/rules/common/space/bracket.js) | Remove extra spaces after opening and before closing bracket | 210 | | ✓ |
| 24. | [common/space/delBeforePercent](../src/rules/common/space/delBeforePercent.js) | Remove space before %, ‰ and ‱ | 210 | | ✓ |
| 25. | [common/space/delBeforePunctuation](../src/rules/common/space/delBeforePunctuation.js) | Remove spaces before punctuation | 210 | | ✓ |
| 26. | [common/space/delLeadingBlanks](../src/rules/common/space/delLeadingBlanks.js) | Remove spaces at start of line | 210 | | |
| 27. | [common/space/delRepeatN](../src/rules/common/space/delRepeatN.js) | Remove duplicate line breaks (three or more) | 209 | | ✓ |
| 28. | [common/space/delRepeatSpace](../src/rules/common/space/delRepeatSpace.js) | Removing duplicate spaces between characters | 209 | | ✓ |
| 29. | [common/space/delTrailingBlanks](../src/rules/common/space/delTrailingBlanks.js) | Remove spaces at end of line | 207 | | ✓ |
| 30. | [common/space/replaceTab](../src/rules/common/space/replaceTab.js) | Replacement of tab to 4 spaces | 205 | | ✓ |
| 31. | [common/space/squareBracket](../src/rules/common/space/squareBracket.js) | Remove extra spaces after opening and before closing square bracket | 210 | | ✓ |
| 32. | [common/space/trimLeft](../src/rules/common/space/trimLeft.js) | Remove spaces and line breaks in beginning of text | 206 | | ✓ |
| 33. | [common/space/trimRight](../src/rules/common/space/trimRight.js) | Remove spaces and line breaks at end of text | 207 | | ✓ |
| 34. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 35. | [common/symbols/cf](../src/rules/common/symbols/cf.js) | Adding ° to C and F | 110 | | ✓ |
| 36. | [common/symbols/copy](../src/rules/common/symbols/copy.js) | (c) → ©, (tm) → ™, (r) → ® | 110 | | ✓ |
| 37. | [en/punctuation/quote](../src/rules/en/punctuation/quote.js) | Placement of quotation marks in texts in English | 410 | | ✓ |
| 38. | [ru/dash/centuries](../src/rules/ru/dash/centuries.js) | Hyphen to dash in centuries | 310 | | ✓ |
| 39. | [ru/dash/daysMonth](../src/rules/ru/dash/daysMonth.js) | Dash between days of one month | 310 | | ✓ |
| 40. | [ru/dash/de](../src/rules/ru/dash/de.js) | Hyphen before “де” | 310 | | |
| 41. | [ru/dash/decade](../src/rules/ru/dash/decade.js) | Dash in decade | 310 | | ✓ |
| 42. | [ru/dash/directSpeech](../src/rules/ru/dash/directSpeech.js) | Dash in direct speech | 310 | | ✓ |
| 43. | [ru/dash/izpod](../src/rules/ru/dash/izpod.js) | Hyphen between “из-под” | 310 | | ✓ |
| 44. | [ru/dash/izza](../src/rules/ru/dash/izza.js) | Hyphen between “из-за” | 310 | | ✓ |
| 45. | [ru/dash/ka](../src/rules/ru/dash/ka.js) | Hyphen before “ка” and “кась” | 310 | | ✓ |
| 46. | [ru/dash/koe](../src/rules/ru/dash/koe.js) | Hyphen after “кое” and “кой” | 310 | | ✓ |
| 47. | [ru/dash/main](../src/rules/ru/dash/main.js) | Replacement hyphen with dash | 305 | | ✓ |
| 48. | [ru/dash/month](../src/rules/ru/dash/month.js) | Dash between months | 310 | | ✓ |
| 49. | [ru/dash/surname](../src/rules/ru/dash/surname.js) | Acronyms with a dash | 310 | | ✓ |
| 50. | [ru/dash/taki](../src/rules/ru/dash/taki.js) | Hyphen between “верно-таки” and etc. | 310 | | ✓ |
| 51. | [ru/dash/time](../src/rules/ru/dash/time.js) | Dash in time intervals | 310 | | ✓ |
| 52. | [ru/dash/to](../src/rules/ru/dash/to.js) | Hyphen before “то”, “либо”, “нибудь” | 310 | | ✓ |
| 53. | [ru/dash/weekday](../src/rules/ru/dash/weekday.js) | Dash between the days of the week | 310 | | ✓ |
| 54. | [ru/dash/years](../src/rules/ru/dash/years.js) | Hyphen to dash in years | 310 | | ✓ |
| 55. | [ru/date/fromISO](../src/rules/ru/date/fromISO.js) | Converting dates YYYY-MM-DD type DD.MM.YYYY | 810 | | ✓ |
| 56. | [ru/date/weekday](../src/rules/ru/date/weekday.js) | 2 Мая, Понедельник → 2 мая, понедельник | 810 | | ✓ |
| 57. | [ru/money/currency](../src/rules/ru/money/currency.js) | Currency symbol ($, €, ¥, Ұ, £ and ₤) after the number, $100 → 100 $ | 710 | | ✓ |
| 58. | [ru/money/ruble](../src/rules/ru/money/ruble.js) | 1 руб. → 1 ₽ | 710 | | |
| 59. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Non-breaking space in abbreviations, e.g. “т. д.” | 510 | | ✓ |
| 60. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al. | 510 | | ✓ |
| 61. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Non-breaking thin space after № | 510 | | ✓ |
| 62. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Non-breaking space before “ли”, “ль”, “же”, “бы”, “б” | 515 | | ✓ |
| 63. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Remove spaces and extra points in “вв.” | 510 | | ✓ |
| 64. | [ru/nbsp/dayMonth](../src/rules/ru/nbsp/dayMonth.js) | Non-breaking space between number and month | 510 | | ✓ |
| 65. | [ru/nbsp/groupNumbers](../src/rules/ru/nbsp/groupNumbers.js) | Replacement space on a narrow non-breaking space in groups of numbers | 510 | | ✓ |
| 66. | [ru/nbsp/initials](../src/rules/ru/nbsp/initials.js) | Binding of initials to the name | 510 | | ✓ |
| 67. | [ru/nbsp/m](../src/rules/ru/nbsp/m.js) | m2 → м², m3 → м³ and non-breaking space | 515 | | ✓ |
| 68. | [ru/nbsp/ooo](../src/rules/ru/nbsp/ooo.js) | Non-breaking space after “OOO, ОАО, ЗАО, НИИ, ПБОЮЛ” | 510 | | ✓ |
| 69. | [ru/nbsp/page](../src/rules/ru/nbsp/page.js) | Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.” | 510 | | ✓ |
| 70. | [ru/nbsp/ps](../src/rules/ru/nbsp/ps.js) | Non-breaking space in P. S. and P. P. S. | 510 | | ✓ |
| 71. | [ru/nbsp/rubleKopek](../src/rules/ru/nbsp/rubleKopek.js) | Not once. space before the “rub” and “cop.” | 510 | | ✓ |
| 72. | [ru/nbsp/see](../src/rules/ru/nbsp/see.js) | Non-breaking space after abbreviation «см.» and «им.» | 510 | | ✓ |
| 73. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Non-breaking space before XXXX г. (2012 г.) | 510 | | ✓ |
| 74. | [ru/nbsp/years](../src/rules/ru/nbsp/years.js) | г.г. → гг. and non-breaking space | 515 | | ✓ |
| 75. | [ru/number/comma](../src/rules/ru/number/comma.js) | Commas in numbers | 610 | | ✓ |
| 76. | [ru/number/ordinals](../src/rules/ru/number/ordinals.js) | N-ый, -ой, -ая, -ое, -ые, -ым, -ом, -ых → N-й, -я, -е, -м, -х (25-й) | 610 | | ✓ |
| 77. | [ru/optalign/bracket](../src/rules/ru/optalign/bracket.js) | for opening bracket | 1010 | | |
| 78. | [ru/optalign/comma](../src/rules/ru/optalign/comma.js) | for comma | 1010 | | |
| 79. | [ru/optalign/quote](../src/rules/ru/optalign/quote.js) | for opening quotation marks | 1010 | | |
| 80. | [ru/other/accent](../src/rules/ru/other/accent.js) | Replacement capital letters to lowercase with addition of accent | 910 | | |
| 81. | [ru/other/phone-number](../src/rules/ru/other/phone-number.js) | Formatting phone numbers | 910 | | ✓ |
| 82. | [ru/punctuation/ano](../src/rules/ru/punctuation/ano.js) | Placement of commas before “а” and “но” | 410 | | ✓ |
| 83. | [ru/punctuation/apostrophe](../src/rules/ru/punctuation/apostrophe.js) | Placement of correct apostrophe | 405 | | ✓ |
| 20. | [common/punctuation/apostrophe](../src/rules/common/punctuation/apostrophe.js) | Placement of correct apostrophe | 410 | | ✓ |
| 21. | [common/punctuation/delDoublePunctuation](../src/rules/common/punctuation/delDoublePunctuation.js) | Removing double punctuation | 410 | | ✓ |
| 22. | [common/space/afterPunctuation](../src/rules/common/space/afterPunctuation.js) | space after punctuation | 210 | | ✓ |
| 23. | [common/space/beforeBracket](../src/rules/common/space/beforeBracket.js) | Space before opening bracket | 210 | | ✓ |
| 24. | [common/space/bracket](../src/rules/common/space/bracket.js) | Remove extra spaces after opening and before closing bracket | 210 | | ✓ |
| 25. | [common/space/delBeforePercent](../src/rules/common/space/delBeforePercent.js) | Remove space before %, ‰ and ‱ | 210 | | ✓ |
| 26. | [common/space/delBeforePunctuation](../src/rules/common/space/delBeforePunctuation.js) | Remove spaces before punctuation | 210 | | ✓ |
| 27. | [common/space/delLeadingBlanks](../src/rules/common/space/delLeadingBlanks.js) | Remove spaces at start of line | 210 | | |
| 28. | [common/space/delRepeatN](../src/rules/common/space/delRepeatN.js) | Remove duplicate line breaks (three or more) | 209 | | ✓ |
| 29. | [common/space/delRepeatSpace](../src/rules/common/space/delRepeatSpace.js) | Removing duplicate spaces between characters | 209 | | ✓ |
| 30. | [common/space/delTrailingBlanks](../src/rules/common/space/delTrailingBlanks.js) | Remove spaces at end of line | 207 | | ✓ |
| 31. | [common/space/replaceTab](../src/rules/common/space/replaceTab.js) | Replacement of tab to 4 spaces | 205 | | ✓ |
| 32. | [common/space/squareBracket](../src/rules/common/space/squareBracket.js) | Remove extra spaces after opening and before closing square bracket | 210 | | ✓ |
| 33. | [common/space/trimLeft](../src/rules/common/space/trimLeft.js) | Remove spaces and line breaks in beginning of text | 206 | | ✓ |
| 34. | [common/space/trimRight](../src/rules/common/space/trimRight.js) | Remove spaces and line breaks at end of text | 207 | | ✓ |
| 35. | [common/symbols/arrow](../src/rules/common/symbols/arrow.js) | -> → →, <- → ← | 110 | | ✓ |
| 36. | [common/symbols/cf](../src/rules/common/symbols/cf.js) | Adding ° to C and 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) | Placement of quotation marks in texts in English | 410 | | ✓ |
| 39. | [ru/dash/centuries](../src/rules/ru/dash/centuries.js) | Hyphen to dash in centuries | 310 | | ✓ |
| 40. | [ru/dash/daysMonth](../src/rules/ru/dash/daysMonth.js) | Dash between days of one month | 310 | | ✓ |
| 41. | [ru/dash/de](../src/rules/ru/dash/de.js) | Hyphen before “де” | 310 | | |
| 42. | [ru/dash/decade](../src/rules/ru/dash/decade.js) | Dash in decade | 310 | | ✓ |
| 43. | [ru/dash/directSpeech](../src/rules/ru/dash/directSpeech.js) | Dash in direct speech | 310 | | ✓ |
| 44. | [ru/dash/izpod](../src/rules/ru/dash/izpod.js) | Hyphen between “из-под” | 310 | | ✓ |
| 45. | [ru/dash/izza](../src/rules/ru/dash/izza.js) | Hyphen between “из-за” | 310 | | ✓ |
| 46. | [ru/dash/ka](../src/rules/ru/dash/ka.js) | Hyphen before “ка” and “кась” | 310 | | ✓ |
| 47. | [ru/dash/koe](../src/rules/ru/dash/koe.js) | Hyphen after “кое” and “кой” | 310 | | ✓ |
| 48. | [ru/dash/main](../src/rules/ru/dash/main.js) | Replacement hyphen with dash | 305 | | ✓ |
| 49. | [ru/dash/month](../src/rules/ru/dash/month.js) | Dash between months | 310 | | ✓ |
| 50. | [ru/dash/surname](../src/rules/ru/dash/surname.js) | Acronyms with a dash | 310 | | ✓ |
| 51. | [ru/dash/taki](../src/rules/ru/dash/taki.js) | Hyphen between “верно-таки” and etc. | 310 | | ✓ |
| 52. | [ru/dash/time](../src/rules/ru/dash/time.js) | Dash in time intervals | 310 | | ✓ |
| 53. | [ru/dash/to](../src/rules/ru/dash/to.js) | Hyphen before “то”, “либо”, “нибудь” | 310 | | ✓ |
| 54. | [ru/dash/weekday](../src/rules/ru/dash/weekday.js) | Dash between the days of the week | 310 | | ✓ |
| 55. | [ru/dash/years](../src/rules/ru/dash/years.js) | Hyphen to dash in years | 310 | | ✓ |
| 56. | [ru/date/fromISO](../src/rules/ru/date/fromISO.js) | Converting dates YYYY-MM-DD type 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) | Currency symbol ($, €, ¥, Ұ, £ and ₤) after the number, $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) | Non-breaking space in abbreviations, e.g. “т. д.” | 510 | | ✓ |
| 61. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al. | 510 | | ✓ |
| 62. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Non-breaking thin space after № | 510 | | ✓ |
| 63. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Non-breaking space before “ли”, “ль”, “же”, “бы”, “б” | 515 | | ✓ |
| 64. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Remove spaces and extra points in “вв.” | 510 | | ✓ |
| 65. | [ru/nbsp/dayMonth](../src/rules/ru/nbsp/dayMonth.js) | Non-breaking space between number and month | 510 | | ✓ |
| 66. | [ru/nbsp/groupNumbers](../src/rules/ru/nbsp/groupNumbers.js) | Replacement space on a narrow non-breaking space in groups of numbers | 510 | | ✓ |
| 67. | [ru/nbsp/initials](../src/rules/ru/nbsp/initials.js) | Binding of initials to the name | 510 | | ✓ |
| 68. | [ru/nbsp/m](../src/rules/ru/nbsp/m.js) | m2 → м², m3 → м³ and non-breaking space | 515 | | ✓ |
| 69. | [ru/nbsp/ooo](../src/rules/ru/nbsp/ooo.js) | Non-breaking space after “OOO, ОАО, ЗАО, НИИ, ПБОЮЛ” | 510 | | ✓ |
| 70. | [ru/nbsp/page](../src/rules/ru/nbsp/page.js) | Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.” | 510 | | ✓ |
| 71. | [ru/nbsp/ps](../src/rules/ru/nbsp/ps.js) | Non-breaking space in P. S. and P. P. S. | 510 | | ✓ |
| 72. | [ru/nbsp/rubleKopek](../src/rules/ru/nbsp/rubleKopek.js) | Not once. space before the “rub” and “cop.” | 510 | | ✓ |
| 73. | [ru/nbsp/see](../src/rules/ru/nbsp/see.js) | Non-breaking space after abbreviation «см.» and «им.» | 510 | | ✓ |
| 74. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Non-breaking space before XXXX г. (2012 г.) | 510 | | ✓ |
| 75. | [ru/nbsp/years](../src/rules/ru/nbsp/years.js) | г.г. → гг. and non-breaking space | 515 | | ✓ |
| 76. | [ru/number/comma](../src/rules/ru/number/comma.js) | Commas in numbers | 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) | for opening bracket | 1010 | | |
| 79. | [ru/optalign/comma](../src/rules/ru/optalign/comma.js) | for comma | 1010 | | |
| 80. | [ru/optalign/quote](../src/rules/ru/optalign/quote.js) | for opening quotation marks | 1010 | | |
| 81. | [ru/other/accent](../src/rules/ru/other/accent.js) | Replacement capital letters to lowercase with addition of accent | 910 | | |
| 82. | [ru/other/phone-number](../src/rules/ru/other/phone-number.js) | Formatting phone numbers | 910 | | ✓ |
| 83. | [ru/punctuation/ano](../src/rules/ru/punctuation/ano.js) | Placement of commas before “а” and “но” | 410 | | ✓ |
| 84. | [ru/punctuation/exclamation](../src/rules/ru/punctuation/exclamation.js) | !! → ! | 410 | | ✓ |

@@ -90,0 +90,0 @@ | 85. | [ru/punctuation/exclamationQuestion](../src/rules/ru/punctuation/exclamationQuestion.js) | !? → ?! | 415 | | ✓ |

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

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

@@ -90,0 +90,0 @@ | 85. | [ru/punctuation/exclamationQuestion](../src/rules/ru/punctuation/exclamationQuestion.js) | !? → ?! | 415 | | ✓ |

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

@@ -39,9 +39,9 @@ "name": "Denis Seleznev",

"gulp-filter": "~4.0.0",
"gulp-jsonlint": "^1.1.2",
"gulp-jsonlint": "^1.2.0",
"gulp-rename": "~1.2.0",
"gulp-replace": "^0.5.4",
"gulp-uglify": "~2.0.0",
"gulp-util": "~3.0.2",
"gulp-util": "~3.0.8",
"istanbul": "~0.4.4",
"eslint": "~3.11.1",
"eslint": "~3.12.2",
"jscs": "~3.0.7",

@@ -48,0 +48,0 @@ "mocha": "~3.2.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