Comparing version 4.0.1 to 4.1.0
# Changelog | ||
# v4.1.0 | ||
Доработки правил: | ||
- `common/nbsp/beforeShortLastWord` | ||
- `common/number/mathSign` | ||
- `common/space/afterPunctuation` | ||
- `common/space/delBeforePunctuation` | ||
- `common/space/delRepeatSpace` | ||
- `ru/dash/directSpeech` | ||
- `ru/nbsp/beforeParticle` | ||
Добавлено свойство `Typograf.version`. | ||
## v4.0.1 | ||
@@ -91,3 +103,3 @@ Исправления в правиле `ru/money/dollar` #144. | ||
Добавлены правила: | ||
- `common/number/mathSign` `!= → ≠, <= → ≤, >= → ≥, ~= → ≅, +- → ±` #126 | ||
- `common/number/mathSign` `!= → ≠, <= → ≤, >= → ≥, ~= → ≅, +- → ±` #126 | ||
- `common/other/delBOM` удаление BOM-символа #121 | ||
@@ -109,3 +121,3 @@ - `ru/punctuation/ano` расстановка запятых перед `а` и `но` #119 | ||
## v2.14.0 | ||
- Новое правило «Неразрывный пробел в сокращениях» `ru/nbsp/abbr` #111 @romashamin, #113 | ||
- Новое правило «Неразрывный пробел в сокращениях» `ru/nbsp/abbr` #111 @romashamin, #113 | ||
@@ -112,0 +124,0 @@ ## v2.13.1 |
/*! Typograf | © 2015 Denis Seleznev | https://github.com/typograf/typograf/ */ | ||
(function(root, factory) { | ||
'use strict'; | ||
if(typeof define === 'function' && define.amd) { | ||
@@ -15,2 +13,3 @@ define('typograf', [], factory); | ||
}(this, function() { | ||
'use strict'; | ||
@@ -313,4 +312,4 @@ /** | ||
quotes = '[' + Typograf.data('common/quote') + ']', | ||
phrase = '[' + letters + ')!?.:;#*,]*?', | ||
reL = new RegExp('"([…' + letters + '])', 'gi'), | ||
phrase = '[' + letters + ')!?.:;#*,…]*?', | ||
reL = new RegExp('"([' + letters + '])', 'gi'), | ||
reR = new RegExp('(' + phrase + ')"(' + phrase + ')', 'gi'), | ||
@@ -550,2 +549,4 @@ reQuotes = new RegExp(quotes, 'g'), | ||
Typograf.version = '4.1.0'; | ||
Typograf.groupIndexes = { | ||
@@ -834,2 +835,6 @@ symbols: 110, | ||
Typograf.data('common/dash', '--?|‒|–|—'); // --, ‒, &ndash, &mdash | ||
Typograf.data('common/quote', '«‹»›„‚“‟‘‛”’"'); | ||
Typograf.data({ | ||
@@ -843,6 +848,2 @@ 'en/l': 'a-z', | ||
Typograf.data('common/dash', '--?|‒|–|—'); // --, ‒, &ndash, &mdash | ||
Typograf.data('common/quote', '«‹»›„‚“‟‘‛”’"'); | ||
Typograf.data({ | ||
@@ -871,2 +872,88 @@ 'ru/dashBefore': '(^| |\\n)', | ||
Typograf.rule({ | ||
name: 'common/nbsp/afterNumber', | ||
handler: function(text) { | ||
var re = '(^|\\D)(\\d{1,5}) ([' + | ||
this._data('l') + | ||
']{2,})'; | ||
return text.replace(new RegExp(re, 'gi'), '$1$2\u00A0$3'); | ||
}, | ||
disabled: true | ||
}); | ||
Typograf.rule({ | ||
name: 'common/nbsp/afterParagraph', | ||
handler: function(text) { | ||
// \u2009 - THIN SPACE | ||
// \u202F - NARROW NO-BREAK SPACE | ||
return text.replace(/\u00A7[ \u00A0\u2009]?(\d|I|V|X)/g, '\u00A7\u202F$1'); | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'common/nbsp/afterShortWord', | ||
handler: function(text, settings) { | ||
var len = settings.lengthShortWord, | ||
before = ' \u00A0(' + Typograf._privateLabel + Typograf.data('common/quote'), | ||
subStr = '(^|[' + before + '])([' + this._data('l') + ']{1,' + len + '}) ', | ||
newSubStr = '$1$2\u00A0', | ||
re = new RegExp(subStr, 'gim'); | ||
return text | ||
.replace(re, newSubStr) | ||
.replace(re, newSubStr); | ||
}, | ||
settings: { | ||
lengthShortWord: 2 | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'common/nbsp/beforeShortLastWord', | ||
handler: function(text, settings) { | ||
var re = new RegExp('([' + this._data('l') + '\d]) ([' + | ||
this._data('lL') + ']{1,' + settings.lengthLastWord + | ||
'}[.!?…])( [' + this._data('L') + ']|$)', 'g'); | ||
return text.replace(re, '$1\u00A0$2$3'); | ||
}, | ||
settings: { | ||
lengthLastWord: 3 | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'common/nbsp/dpi', | ||
handler: function(text) { | ||
return text.replace(/(\d) ?(lpi|dpi)(?!\w)/, '$1\u00A0$2'); | ||
} | ||
}); | ||
(function() { | ||
function replaceNbsp($0, $1, $2, $3) { | ||
return $1 + $2.replace(/([^\u00A0])\u00A0([^\u00A0])/g, '$1 $2') + $3; | ||
} | ||
Typograf.rule({ | ||
name: 'common/nbsp/nowrap', | ||
queue: 'end', | ||
handler: function(text) { | ||
return text | ||
.replace(/(<nowrap>)(.*?)(<\/nowrap>)/g, replaceNbsp) | ||
.replace(/(<nobr>)(.*?)(<\/nobr>)/g, replaceNbsp); | ||
} | ||
}); | ||
})(); | ||
Typograf.rule({ | ||
name: 'common/nbsp/replaceNbsp', | ||
queue: 'utf', | ||
live: true, | ||
handler: function(text) { | ||
return text.replace(/\u00A0/g, ' '); | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'common/html/e-mail', | ||
@@ -976,88 +1063,2 @@ handler: function(text) { | ||
Typograf.rule({ | ||
name: 'common/nbsp/afterNumber', | ||
handler: function(text) { | ||
var re = '(^|\\D)(\\d{1,5}) ([' + | ||
this._data('l') + | ||
']{2,})'; | ||
return text.replace(new RegExp(re, 'gi'), '$1$2\u00A0$3'); | ||
}, | ||
disabled: true | ||
}); | ||
Typograf.rule({ | ||
name: 'common/nbsp/afterParagraph', | ||
handler: function(text) { | ||
// \u2009 - THIN SPACE | ||
// \u202F - NARROW NO-BREAK SPACE | ||
return text.replace(/\u00A7[ \u00A0\u2009]?(\d|I|V|X)/g, '\u00A7\u202F$1'); | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'common/nbsp/afterShortWord', | ||
handler: function(text, settings) { | ||
var len = settings.lengthShortWord, | ||
before = ' \u00A0(' + Typograf._privateLabel + Typograf.data('common/quote'), | ||
subStr = '(^|[' + before + '])([' + this._data('l') + ']{1,' + len + '}) ', | ||
newSubStr = '$1$2\u00A0', | ||
re = new RegExp(subStr, 'gim'); | ||
return text | ||
.replace(re, newSubStr) | ||
.replace(re, newSubStr); | ||
}, | ||
settings: { | ||
lengthShortWord: 2 | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'common/nbsp/beforeShortLastWord', | ||
handler: function(text, settings) { | ||
var re = new RegExp('([' + this._data('l') + '\d]) ([' + | ||
this._data('lL') + ']{1,' + settings.lengthLastWord + | ||
'}[.!?])( [' + this._data('L') + ']|$)', 'g'); | ||
return text.replace(re, '$1\u00A0$2$3'); | ||
}, | ||
settings: { | ||
lengthLastWord: 3 | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'common/nbsp/dpi', | ||
handler: function(text) { | ||
return text.replace(/(\d) ?(lpi|dpi)(?!\w)/, '$1\u00A0$2'); | ||
} | ||
}); | ||
(function() { | ||
function replaceNbsp($0, $1, $2, $3) { | ||
return $1 + $2.replace(/([^\u00A0])\u00A0([^\u00A0])/g, '$1 $2') + $3; | ||
} | ||
Typograf.rule({ | ||
name: 'common/nbsp/nowrap', | ||
queue: 'end', | ||
handler: function(text) { | ||
return text | ||
.replace(/(<nowrap>)(.*?)(<\/nowrap>)/g, replaceNbsp) | ||
.replace(/(<nobr>)(.*?)(<\/nobr>)/g, replaceNbsp); | ||
} | ||
}); | ||
})(); | ||
Typograf.rule({ | ||
name: 'common/nbsp/replaceNbsp', | ||
queue: 'utf', | ||
live: true, | ||
handler: function(text) { | ||
return text.replace(/\u00A0/g, ' '); | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'common/number/fraction', | ||
@@ -1082,3 +1083,3 @@ handler: function(text) { | ||
[/~=/g, '≅'], | ||
[/\+-/g, '±'] | ||
[/(^|[^+])\+-/g, '$1±'] | ||
]); | ||
@@ -1136,4 +1137,4 @@ } | ||
var privateLabel = Typograf._privateLabel, | ||
reExcl = new RegExp('(!|;|\\?)([^.!;?\\s[\\])' + privateLabel + Typograf.data('common/quote') + '])', 'g'), | ||
reComma = new RegExp('(\\D)(,|:)([^,:.?\\s\\/' + privateLabel + '])', 'g'); | ||
reExcl = new RegExp('(!|;|\\?)([^).!;?\\s[\\])' + privateLabel + Typograf.data('common/quote') + '])', 'g'), | ||
reComma = new RegExp('(\\D)(,|:)([^)",:.?\\s\\/\\\\' + privateLabel + '])', 'g'); | ||
@@ -1173,3 +1174,3 @@ return text | ||
handler: function(text) { | ||
return text.replace(/ ([!;,?.:])/g, '$1'); | ||
return text.replace(/ ([!;,?.:])(?!\))/g, '$1'); | ||
} | ||
@@ -1198,3 +1199,3 @@ }); | ||
handler: function(text) { | ||
return text.replace(/([^\n \t])( |\t){2,}([^\n \t])/g, '$1$2$3'); | ||
return text.replace(/([^\n \t])[ \t]{2,}(?![\n \t])/g, '$1 '); | ||
} | ||
@@ -1333,8 +1334,10 @@ }); | ||
var dashes = Typograf.data('common/dash'), | ||
re1 = new RegExp('(["»‘“,.…?!])[ |\u00A0]?(' + dashes + ')[ |\u00A0]', 'g'), | ||
re2 = new RegExp('(^|' + Typograf._privateLabel + ')(' + dashes + ')( |\u00A0)', 'gm'); | ||
re1 = new RegExp('(["»‘“,])[ |\u00A0]?(' + dashes + ')[ |\u00A0]', 'g'), | ||
re2 = new RegExp('(^|' + Typograf._privateLabel + ')(' + dashes + ')( |\u00A0)', 'gm'), | ||
re3 = new RegExp('([.…?!])[ \u00A0](' + dashes + ')[ \u00A0]', 'g'); | ||
return text | ||
.replace(re1, '$1 \u2014\u00A0') | ||
.replace(re2, '$1\u2014\u00A0'); | ||
.replace(re1, '$1\u00A0\u2014 ') | ||
.replace(re2, '$1\u2014\u00A0') | ||
.replace(re3, '$1 \u2014\u00A0'); | ||
} | ||
@@ -1488,2 +1491,31 @@ }); | ||
Typograf.rule({ | ||
name: 'ru/date/fromISO', | ||
handler: function(text) { | ||
var sp1 = '(-|\\.|\\/)', | ||
sp2 = '(-|\\/)', | ||
re1 = new RegExp('(^|\\D)(\\d{4})' + sp1 + '(\\d{2})' + sp1 + '(\\d{2})(\\D|$)', 'gi'), | ||
re2 = new RegExp('(^|\\D)(\\d{2})' + sp2 + '(\\d{2})' + sp2 + '(\\d{4})(\\D|$)', 'gi'); | ||
return text | ||
.replace(re1, '$1$6.$4.$2$7') | ||
.replace(re2, '$1$4.$2.$6$7'); | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'ru/date/weekday', | ||
handler: function(text) { | ||
var space = '( |\u00A0)', | ||
monthCase = Typograf.data('ru/monthGenCase'), | ||
weekday = Typograf.data('ru/weekday'), | ||
re = new RegExp('(\\d)' + space + '(' + monthCase + '),' + space + '(' + weekday + ')', 'gi'); | ||
return text.replace(re, function() { | ||
var a = arguments; | ||
return a[1] + a[2] + a[3].toLowerCase() + ',' + a[4] + a[5].toLowerCase(); | ||
}); | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'ru/money/dollar', | ||
@@ -1527,31 +1559,2 @@ handler: function(text) { | ||
Typograf.rule({ | ||
name: 'ru/date/fromISO', | ||
handler: function(text) { | ||
var sp1 = '(-|\\.|\\/)', | ||
sp2 = '(-|\\/)', | ||
re1 = new RegExp('(^|\\D)(\\d{4})' + sp1 + '(\\d{2})' + sp1 + '(\\d{2})(\\D|$)', 'gi'), | ||
re2 = new RegExp('(^|\\D)(\\d{2})' + sp2 + '(\\d{2})' + sp2 + '(\\d{4})(\\D|$)', 'gi'); | ||
return text | ||
.replace(re1, '$1$6.$4.$2$7') | ||
.replace(re2, '$1$4.$2.$6$7'); | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'ru/date/weekday', | ||
handler: function(text) { | ||
var space = '( |\u00A0)', | ||
monthCase = Typograf.data('ru/monthGenCase'), | ||
weekday = Typograf.data('ru/weekday'), | ||
re = new RegExp('(\\d)' + space + '(' + monthCase + '),' + space + '(' + weekday + ')', 'gi'); | ||
return text.replace(re, function() { | ||
var a = arguments; | ||
return a[1] + a[2] + a[3].toLowerCase() + ',' + a[4] + a[5].toLowerCase(); | ||
}); | ||
} | ||
}); | ||
Typograf.rule({ | ||
name: 'ru/nbsp/abbr', | ||
@@ -1608,8 +1611,8 @@ handler: function(text) { | ||
var particles = '(ли|ль|же|ж|бы|б)', | ||
re1 = new RegExp(' ' + particles + '(?=[?!,.:;"‘“»])', 'g'), | ||
re2 = new RegExp('[ \u00A0]' + particles + '[ \u00A0]', 'g'); | ||
re1 = new RegExp('([А-ЯЁа-яё]) ' + particles + '(?=[?!,.:;"‘“»])', 'g'), | ||
re2 = new RegExp('([А-ЯЁа-яё])[ \u00A0]' + particles + '[ \u00A0]', 'g'); | ||
return text | ||
.replace(re1, '\u00A0$1') | ||
.replace(re2, '\u00A0$1 '); | ||
.replace(re1, '$1\u00A0$2') | ||
.replace(re2, '$1\u00A0$2 '); | ||
} | ||
@@ -1616,0 +1619,0 @@ }); |
/*! Typograf | © 2015 Denis Seleznev | https://github.com/typograf/typograf/ */ | ||
!function(e,n){"use strict";"function"==typeof define&&define.amd?define("typograf",[],n):"object"==typeof exports?module.exports=n():e.Typograf=n()}(this,function(){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._rules.forEach(this._prepareRule,this),this._prefs.disable&&this.disable(this._prefs.disable),this._prefs.enable&&this.enable(this._prefs.enable)}return e.rule=function(n){var r=n.name.split("/");return n._enabled=n.disabled===!0?!1:!0,n._lang=r[0],n._group=r[1],n._name=r[2],e._setIndex(n),"common"!==n._lang&&-1!==e._langs.indexOf(n._lang)&&e._langs.push(n._lang),e.prototype._rules.push(n),e._needSortRules&&this._sortRules(),this},e._setIndex=function(n){var r=n.index,a=typeof r,t=e.groupIndexes[n._group];"undefined"===a?r=t:"string"===a&&(r=t+parseInt(n.index,10)),n._index=r},e.innerRule=function(n){return e.prototype._innerRules.push(n),n._lang=n.name.split("/")[0],this},e.data=function(n,r){if("string"==typeof n){if(1===arguments.length)return e._data[n];e._data[n]=r}else"object"==typeof n&&Object.keys(n).forEach(function(r){e._data[r]=n[r]})},e._data={},e._sortRules=function(){e.prototype._rules.sort(function(e,n){return e._index>n._index?1:-1})},e._replace=function(e,n){for(var r=0;r<n.length;r++)e=e.replace(n[r][0],n[r][1]);return e},e._langs=[],e._privateLabel="\udbff",e.prototype={constructor:e,execute:function(e,n){n=n||{};var r=this,a=n.lang||this._prefs.lang||"common",t={},u={},l="undefined"==typeof n.mode?this._prefs.mode:n.mode,i=function(n){var r=n._lang,t=this._prefs.live;t===!0&&n.live===!1||t===!1&&n.live===!0||"common"!==r&&r!==a||!this.enabled(n.name)||(this._onBeforeRule&&this._onBeforeRule(e),e=n.handler.call(this,e,this._settings[n.name]),this._onAfterRule&&this._onAfterRule(e))},s=function(e){u[e]&&u[e].forEach(i,r),t[e]&&t[e].forEach(i,r)};return this._lang=a,(e=""+e)?(e=this._fixLineEnd(e),this._innerRules.forEach(function(e){var n=e.queue;u[n]=u[n]||[],u[n].push(e)},this),this._rules.forEach(function(e){var n=e.queue;t[n]=t[n]||[],t[n].push(e)},this),this._isHTML=-1!==e.search(/(<\/?[a-z]|<!|&[lg]t;)/i),s("start"),this._isHTML&&(e=this._hideSafeTags(e)),e=this._utfication(e),s("utf"),s(),e=this._modification(e,l),s("entity"),this._isHTML&&(e=this._showSafeTags(e)),s("end"),this._lang=null,this._isHTML=null,e):""},setting:function(e,n,r){return arguments.length<=2?this._settings[e]&&this._settings[e][n]:(this._settings[e]=this._settings[e]||{},this._settings[e][n]=r,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,n){this._safeTags.push([e,n])},_data:function(n){return e.data(this._lang+"/"+n)},_quote:function(n,r){var a=this._data("l")+"\u0301\\d",t=e._privateLabel,u=r.lquote,l=r.rquote,i=r.lquote2,s=r.rquote2,o="["+e.data("common/quote")+"]",c="["+a+")!?.:;#*,]*?",p=new RegExp('"([\u2026'+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;return n=n.replace(h,function(){return $++,'"'}).replace(p,u+"$1").replace(d,"$1"+l+"$2").replace(m,"$1"+u+t).replace(f,t+l+"$1").replace(g,"$1"+u),i&&s&&$%2===0?this._innerQuote(n,r):n},_innerQuote:function(e,n){var r=[n.lquote],a=[n.rquote],t=n.lquote,u=n.rquote,l=new Array(e.length);n.lquote2&&n.rquote2&&(r.push(n.lquote2),a.push(n.rquote2),n.lquote3&&n.rquote3&&(r.push(n.lquote3),a.push(n.rquote3)));for(var i=-1,s=r.length-1,o=0,c=e.length;c>o;o++){var p=e[o];p===t?(i++,i>s&&(i=s),l.push(r[i])):p===u?-1>=i?(i=0,l.push(r[i])):(l.push(a[i]),i--,-1>i&&(i=-1)):l.push(p)}return l.join("")},_fixLineEnd:function(e){return e.replace(/\r\n/g,"\n")},_prepareRule:function(e){var n=e.name,r={};"object"==typeof e.settings&&Object.keys(e.settings).forEach(function(n){r[n]=e.settings[n]}),this._settings[n]=r,this._enabledRules[n]=e._enabled},_enable:function(e,n){return Array.isArray(e)?e.forEach(function(e){this._enableByMask(e,n)},this):this._enableByMask(e,n),this},_enableByMask:function(e,n){var r;-1!==e.search(/\*/)?(r=new RegExp(e.replace(/\//g,"\\/").replace(/\*/g,".*")),this._rules.forEach(function(e){var a=e.name;r.test(a)&&(this._enabledRules[a]=n)},this)):this._enabledRules[e]=n},_rules:[],_innerRules:[],_getRule:function(e){var n=null;return this._rules.some(function(r){return r.name===e?(n=r,!0):!1}),n},_initSafeTags:function(){this._safeTags=[["<!--","-->"],["<!ENTITY",">"],["<!DOCTYPE",">"],["<\\?xml","\\?>"],["<!\\[CDATA\\[","\\]\\]>"]],["code","kbd","object","pre","samp","script","style","var"].forEach(function(e){this._safeTags.push(["<"+e+"(\\s[^>]*?)?>","</"+e+">"])},this)},_hideSafeTags:function(e){return this._hiddenSafeTags={},this._iLabel=0,this._safeTags.forEach(function(n){var r=new RegExp(n[0]+"[^]*?"+n[1],"gi");e=e.replace(r,this._pasteLabel)},this),this._hideHTMLTags(e)},_getPrivateLabel:function(n){var r=e._privateLabel;return r+"tf"+n+r},_pasteLabel:function(e){var n=this._getPrivateLabel(this._iLabel);return this._hiddenSafeTags[n]=e,this._iLabel++,n},_replaceLabel:function(e){return this._hiddenSafeTags[e]},_hideHTMLTags:function(e){return e.replace(/<\/?[a-z][^]*?>/gi,this._pasteLabel).replace(/<\/?[a-z][^]*?>/gi,this._pasteLabel).replace(/&[gl]t;/gi,this._pasteLabel)},_showSafeTags:function(n){for(var r=e._privateLabel,a=new RegExp(r+"tf\\d+"+r,"g"),t=new RegExp(r+"tf\\d"),u=0;u<this._safeTags.length&&(n=n.replace(a,this._replaceLabel),-1!==n.search(t));u++);return delete this._hiddenSafeTags,n},_utfication:function(e){return-1!==e.search(/&#/)&&(e=this._decHexToUtf(e)),-1!==e.search(/&[a-z]/i)&&this.entities.forEach(function(n){e=e.replace(n[3],n[2])}),e.replace(/"/g,'"')},_decHexToUtf:function(e){return e.replace(/&#(\d{1,6});/gi,function(e,n){return String.fromCharCode(parseInt(n,10))}).replace(/&#x([\da-f]{1,6});/gi,function(e,n){return String.fromCharCode(parseInt(n,16))})},_modification:function(e,n){if("name"===n||"digit"===n){var r="name"===n?0:1;this.entities.forEach(function(n){n[r]&&(e=e.replace(n[4],n[r]))})}return e}},e.groupIndexes={symbols:110,space:210,dash:310,punctuation:410,nbsp:510,number:610,money:710,date:810,other:910,optalign:1010,html:1110},e.prototype.entities=[],[["nbsp",160],["iexcl",161],["cent",162],["pound",163],["curren",164],["yen",165],["brvbar",166],["sect",167],["uml",168],["copy",169],["ordf",170],["laquo",171],["not",172],["shy",173],["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],["ensp",8194],["emsp",8195],["thinsp",8201],["zwnj",8204],["zwj",8205],["lrm",8206],["rlm",8207],["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]].forEach(function(n){var r=n[0],a=n[1],t=String.fromCharCode(a),u=["&"+r+";","&#"+a+";",t,new RegExp("&"+r+";","g"),new RegExp(t,"g")];e.prototype.entities.push(u)},this),e.data({"en/l":"a-z","en/L":"A-Z","en/lL":"a-zA-Z"}),e._langs.push("en"),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({"ru/dashBefore":"(^| |\\n)","ru/dashAfter":"([\xa0 ,.?:!]|$)"}),e.data({"ru/l":"\u0430-\u044f\u0451a-z","ru/L":"\u0410-\u042f\u0401A-Z","ru/lL":"\u0430-\u044f\u0451\u0410-\u042f\u0401a-zA-Z"}),e._langs.push("ru"),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/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",handler:function(e){return 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 n={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return e.replace(/[&<>"'\/]/g,function(e){return n[e]})},disabled:!0}),e.rule({name:"common/html/nbr",index:"+5",queue:"end",handler:function(e){return-1===e.search(/<br/)?e.replace(/\n/g,"<br/>\n"):e},disabled:!0}),e.rule({name:"common/html/pbr",queue:"end",handler:function(e){return-1===e.search(/<(p|br)[\s\/>]/)&&(-1===e.search(/\n/)?e="<p>"+e+"</p>":(e="<p>"+e.replace(/\n\n/g,"</p>\n<p>")+"</p>",e=e.replace(/([^>])\n/g,"$1<br/>\n"))),e},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",handler:function(e){var n="(http|https|ftp|telnet|news|gopher|file|wais)://",r="([a-zA-Z0-9/+-=%&:_.~?]+[a-zA-Z0-9#+]*)",a=new RegExp(n+r,"g");return e.replace(a,function(e,n,r){r=r.replace(/([^\/]+\/?)(\?|#)$/,"$1").replace(/^([^\/]+)\/$/,"$1"),"http"===n?r=r.replace(/^([^\/]+)(:80)([^\d]|\/|$)/,"$1$3"):"https"===n&&(r=r.replace(/^([^\/]+)(:443)([^\d]|\/|$)/,"$1$3"));var a=r,t=n+"://"+r,u='<a href="'+t+'">';return"http"===n||"https"===n?(a=a.replace(/^www\./,""),u+("http"===n?a:n+"://"+a)+"</a>"):u+t+"</a>"})},disabled:!0}),e.rule({name:"common/nbsp/afterNumber",handler:function(e){var n="(^|\\D)(\\d{1,5}) (["+this._data("l")+"]{2,})";return e.replace(new RegExp(n,"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(n,r){var a=r.lengthShortWord,t=" \xa0("+e._privateLabel+e.data("common/quote"),u="(^|["+t+"])(["+this._data("l")+"]{1,"+a+"}) ",l="$1$2\xa0",i=new RegExp(u,"gim");return n.replace(i,l).replace(i,l)},settings:{lengthShortWord:2}}),e.rule({name:"common/nbsp/beforeShortLastWord",handler:function(e,n){var r=new RegExp("(["+this._data("l")+"d]) (["+this._data("lL")+"]{1,"+n.lengthLastWord+"}[.!?])( ["+this._data("L")+"]|$)","g");return e.replace(r,"$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 n(e,n,r,a){return n+r.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,n).replace(/(<nobr>)(.*?)(<\/nobr>)/g,n)}})}(),e.rule({name:"common/nbsp/replaceNbsp",queue:"utf",live:!0,handler:function(e){return e.replace(/\u00A0/g," ")}}),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(n){return e._replace(n,[[/!=/g,"\u2260"],[/<=/g,"\u2264"],[/(^|[^=])>=/g,"$1\u2265"],[/<=>/g,"\u21d4"],[/<</g,"\u226a"],[/>>/g,"\u226b"],[/~=/g,"\u2245"],[/\+-/g,"\xb1"]])}}),e.rule({name:"common/number/times",handler:function(e){return e.replace(/(\d)[ \u00A0]?(x|\u0445)[ \u00A0]?(\d)/g,"$1\xd7$3")}}),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){var n=new RegExp("(["+this._data("l")+"\u0301]+) \\1([;:,.?! \n])","gi");return e.replace(n,"$1$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(n){var r=e._privateLabel,a=new RegExp("(!|;|\\?)([^.!;?\\s[\\])"+r+e.data("common/quote")+"])","g"),t=new RegExp("(\\D)(,|:)([^,:.?\\s\\/"+r+"])","g");return n.replace(a,"$1 $2").replace(t,"$1$2 $3")}}),e.rule({name:"common/space/beforeBracket",handler:function(e){var n=new RegExp("(["+this._data("l")+".!?,;\u2026)])\\(","gi");return e.replace(n,"$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$2$3")}}),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(n){return e._replace(n,[[/(^|[^-])->(?!>)/g,"$1\u2192"],[/(^|[^<])<-(?!-)/g,"$1\u2190"]])}}),e.rule({name:"common/symbols/cf",handler:function(e){var n=new RegExp('(\\d+)( |\xa0)?(C|F)([\\W \\.,:!\\?"\\]\\)]|$)',"g");return e.replace(n,"$1\u2009\xb0$3$4")}}),e.rule({name:"common/symbols/copy",handler:function(n){return e._replace(n,[[/\(r\)/gi,"\xae"],[/(copyright )?\((c|\u0441)\)/gi,"\xa9"],[/\(tm\)/gi,"\u2122"]])}}),e.rule({name:"en/punctuation/quote",handler:function(e,n){return this._quote(e,n)},settings:{lquote:"\u201c",rquote:"\u201d",lquote2:"\u2018",rquote2:"\u2019"}}),e.rule({name:"ru/dash/centuries",handler:function(n){var r="("+e.data("common/dash")+")",a=new RegExp("(X|I|V)[ |\xa0]?"+r+"[ |\xa0]?(X|I|V)","g");return n.replace(a,"$1"+this.setting("ru/dash/centuries","dash")+"$3")},settings:{dash:"\u2014"}}),e.rule({name:"ru/dash/daysMonth",handler:function(n){var r=new RegExp("(^|\\s)([123]?\\d)("+e.data("common/dash")+")([123]?\\d)[ \xa0]("+e.data("ru/monthGenCase")+")","g");return n.replace(r,"$1$2\u2014$4\xa0$5")}}),e.rule({name:"ru/dash/decade",handler:function(n){var r=new RegExp("(^|\\s)(\\d{3}|\\d)0("+e.data("common/dash")+")(\\d{3}|\\d)0(-\u0435[ \xa0])(?=\u0433\\.?[ \xa0]?\u0433|\u0433\u043e\u0434)","g");return n.replace(r,"$1$20\u2014$40$5")}}),e.rule({name:"ru/dash/directSpeech",handler:function(n){var r=e.data("common/dash"),a=new RegExp('(["\xbb\u2018\u201c,.\u2026?!])[ |\xa0]?('+r+")[ |\xa0]","g"),t=new RegExp("(^|"+e._privateLabel+")("+r+")( |\xa0)","gm");return n.replace(a,"$1 \u2014\xa0").replace(t,"$1\u2014\xa0")}}),e.rule({name:"ru/dash/izpod",handler:function(n){var r=new RegExp(e.data("ru/dashBefore")+"(\u0418|\u0438)\u0437 \u043f\u043e\u0434"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1$2\u0437-\u043f\u043e\u0434$3")}}),e.rule({name:"ru/dash/izza",handler:function(n){var r=new RegExp(e.data("ru/dashBefore")+"(\u0418|\u0438)\u0437 \u0437\u0430"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1$2\u0437-\u0437\u0430$3")}}),e.rule({name:"ru/dash/kade",handler:function(n){var r=new RegExp("([a-\u044f\u0451]+)( | ?- ?)(\u043a\u0430|\u0434\u0435|\u043a\u0430\u0441\u044c)"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1-$3$4")}}),e.rule({name:"ru/dash/koe",handler:function(n){var r=new RegExp(e.data("ru/dashBefore")+"([\u041a\u043a]\u043e[\u0435\u0439])\\s([\u0430-\u044f\u0451]{3,})"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1$2-$3$4")}}),e.rule({name:"ru/dash/main",index:"-5",handler:function(n){var r=e.data("common/dash"),a=new RegExp("( |\xa0)("+r+")( |\\n)","g");return n.replace(a,"\xa0\u2014$3")}}),e.rule({name:"ru/dash/month",handler:function(n){var r="("+e.data("ru/month")+")",a="("+e.data("ru/monthPreCase")+")",t=e.data("common/dash"),u=new RegExp(r+" ?("+t+") ?"+r,"gi"),l=new RegExp(a+" ?("+t+") ?"+a,"gi");return n.replace(u,"$1\u2014$3").replace(l,"$1\u2014$3")}}),e.rule({name:"ru/dash/surname",handler:function(e){var n=new RegExp("([\u0410-\u042f\u0401][\u0430-\u044f\u0451]+)\\s-([\u0430-\u044f\u0451]{1,3})(?![^\u0430-\u044f\u0451]|$)","g");return e.replace(n,"$1\xa0\u2014$2")}}),e.rule({name:"ru/dash/taki",handler:function(n){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)"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1-$2$3")}}),e.rule({name:"ru/dash/time",handler:function(n){var r=new RegExp(e.data("ru/dashBefore")+"(\\d?\\d:[0-5]\\d)"+e.data("common/dash")+"(\\d?\\d:[0-5]\\d)"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1$2\u2014$3$4")}}),e.rule({name:"ru/dash/to",handler:function(n){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"],a=new RegExp("("+r.join("|")+")( | ?- ?)(\u0442\u043e|\u043b\u0438\u0431\u043e|\u043d\u0438\u0431\u0443\u0434\u044c)"+e.data("ru/dashAfter"),"gi");return n.replace(a,"$1-$3$4")}}),e.rule({name:"ru/dash/weekday",handler:function(n){var r="("+e.data("ru/weekday")+")",a=new RegExp(r+" ?("+e.data("common/dash")+") ?"+r,"gi");return n.replace(a,"$1\u2014$3")}}),e.rule({name:"ru/dash/years",handler:function(n){var r=this.setting("ru/dash/years","dash"),a=e.data("common/dash"),t=new RegExp("(\\D|^)(\\d{4})[ \xa0]?("+a+")[ \xa0]?(\\d{4})(?=[ \xa0]?\u0433)","g");return n.replace(t,function(e,n,a,t,u){return parseInt(a,10)<parseInt(u,10)?n+a+r+u:e})},settings:{dash:"\u2014"}}),e.rule({name:"ru/money/dollar",handler:function(e){var n=new RegExp("(^|[\\D]{2,})\\$ ?([\\d.,]+([ \xa0\u2009\u202f]\\d{3})*)","g"),r=new RegExp("(^|[\\D])([\\d.,]+) ?\\$","g"),a="$1$2\xa0$";return e.replace(n,a).replace(r,a)}}),e.rule({name:"ru/money/euro",handler:function(e){var n=new RegExp("(^|[\\D]{2,})\u20ac ?([\\d.,]+([ \xa0\u2009\u202f]\\d{3})*)","g"),r=new RegExp("(^|[\\D])([\\d.,]+) ?\u20ac","g"),a="$1$2\xa0\u20ac";return e.replace(n,a).replace(r,a)}}),e.rule({name:"ru/money/ruble",handler:function(e){var n="$1\xa0\u20bd";return e.replace(/^(\d+)( |\u00A0)?(\u0440|\u0440\u0443\u0431)\.$/,n).replace(/(\d+)( |\u00A0)?(\u0440|\u0440\u0443\u0431)\.(?=[!?,:;])/g,n).replace(/(\d+)( |\u00A0)?(\u0440|\u0440\u0443\u0431)\.(?=\s+[A-\u042f\u0401])/g,n+".")},disabled:!0}),e.rule({name:"ru/date/fromISO",handler:function(e){var n="(-|\\.|\\/)",r="(-|\\/)",a=new RegExp("(^|\\D)(\\d{4})"+n+"(\\d{2})"+n+"(\\d{2})(\\D|$)","gi"),t=new RegExp("(^|\\D)(\\d{2})"+r+"(\\d{2})"+r+"(\\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(n){var r="( |\xa0)",a=e.data("ru/monthGenCase"),t=e.data("ru/weekday"),u=new RegExp("(\\d)"+r+"("+a+"),"+r+"("+t+")","gi");return n.replace(u,function(){var e=arguments;return e[1]+e[2]+e[3].toLowerCase()+","+e[4]+e[5].toLowerCase()})}}),e.rule({name:"ru/nbsp/abbr",handler:function(n){var r=new RegExp("(^|\\s|"+e._privateLabel+")(([\u0430-\u044f\u0451]{1,3}\\.){2,})(?![\u0430-\u044f\u0451])","g");return n.replace(r,function(e,n,r){var a=r.split(/\./);return["\u0440\u0444","\u0440\u0443","\u0440\u0443\u0441","\u043e\u0440\u0433","\u0443\u043a\u0440","\u0431\u0433","\u0441\u0440\u0431"].indexOf(a[a.length-2])>-1?e:n+r.split(/\./).join(".\xa0").trim()})}}),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 n="(\u043b\u0438|\u043b\u044c|\u0436\u0435|\u0436|\u0431\u044b|\u0431)",r=new RegExp(" "+n+'(?=[?!,.:;"\u2018\u201c\xbb])',"g"),a=new RegExp("[ \xa0]"+n+"[ \xa0]","g");return e.replace(r,"\xa0$1").replace(a,"\xa0$1 ")}}),e.rule({name:"ru/nbsp/centuries",handler:function(n){var r=e.data("common/dash"),a=new RegExp("(^|\\s)([VIX]+)[ \xa0]?\u0432\\.?(?=[^.]|$)","g"),t=new RegExp("(^|\\s)([VIX]+)("+r+")([VIX]+)[ \xa0]?\u0432\\.?([ \xa0]?\u0432\\.?)?(?=[^.]|$)","g");return n.replace(a,"$1$2\xa0\u0432.").replace(t,"$1$2$3$4\xa0\u0432\u0432.")}}),e.rule({name:"ru/nbsp/dayMonth",handler:function(n){var r=new RegExp("(\\d{1,2}) ("+e.data("ru/shortMonth")+")","gi");return n.replace(r,"$1\xa0$2")}}),e.rule({name:"ru/nbsp/m",index:"+5",handler:function(n){var r=e._privateLabel,a=new RegExp("(^|[\\s,."+r+"])(\\d+)[ \xa0]?(\u043c\u043c?|\u0441\u043c|\u043a\u043c|\u0434\u043c|\u0433\u043c|mm?|km|cm|dm)([23\xb2\xb3])?([\\s.!?,;"+r+"]|$)","gm");return n.replace(a,function(e,n,r,a,t,u){var l={2:"\xb2","\xb2":"\xb2",3:"\xb3","\xb3":"\xb3","":""}[t||""];return n+r+"\xa0"+a+l+("\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(n){var r=new RegExp("(^|[)\\s"+e._privateLabel+"])(\u0441\u0442\u0440|\u0433\u043b|\u0440\u0438\u0441|\u0438\u043b\u043b?|\u0441\u0442|\u043f|c)\\. *(\\d+)([\\s.,?!;:]|$)","gim");return n.replace(r,"$1$2.\xa0$3$4")}}),e.rule({name:"ru/nbsp/ps",handler:function(n){var r=new RegExp("(^|\\s|"+e._privateLabel+")[p\u0437]\\.[ \xa0]?([p\u0437]\\.[ \xa0]?)?[s\u044b]\\.:? ","gim");return n.replace(r,function(e,n,r){return n+(r?"P.\xa0P.\xa0S. ":"P.\xa0S. ")})}}),e.rule({name:"ru/nbsp/see",handler:function(n){var r=new RegExp("(^|\\s|"+e._privateLabel+"|\\()(\u0441\u043c|\u0438\u043c)\\.[ \xa0]?([\u0430-\u044f\u04510-9a-z]+)([\\s.,?!]|$)","gi");return n.replace(r,function(e,n,r,a,t){return("\xa0"===n?" ":n)+r+".\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(n){var r=e.data("common/dash"),a=new RegExp("(^|\\D)(\\d{4})("+r+")(\\d{4})[ \xa0]?\u0433\\.?([ \xa0]?\u0433\\.)?","g");return n.replace(a,"$1$2$3$4\xa0\u0433\u0433.")}}),e.rule({name:"ru/number/ordinals",handler:function(e){var n=new RegExp("(\\d)-(\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(n,function(e,n,r){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 n+"-"+a[r]})}}),e.rule({name:"ru/optalign/bracket",handler:function(e,n){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:"ru/optalign/bracket",handler:function(e){return e.replace(/<span class="typograf-oa-(n-|sp-)?lbracket">(.*?)<\/span>/g,"$2")}}),e.rule({name:"ru/optalign/comma",handler:function(e,n){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:"ru/optalign/comma",handler:function(e){return e.replace(/<span class="typograf-oa-comma(-sp)?">(.*?)<\/span>/g,"$2")}}),e.rule({name:"ru/optalign/quote",handler:function(n){var r="ru/punctuation/quote",a='(["'+this.setting(r,"lquote")+this.setting(r,"lquote2")+this.setting(r,"lquote3")+"])",t=new RegExp("([\\d"+this._data("l")+"\\-\u0301!?.:;,]+)( |\xa0)("+a+")","gi"),u=new RegExp("(^|"+e._privateLabel+")"+a,"gm");return n.replace(t,'$1<span class="typograf-oa-sp-lquote">$2</span><span class="typograf-oa-lquote">$3</span>').replace(u,'$1<span class="typograf-oa-n-lquote">$2</span>')},disabled:!0}).innerRule({name:"ru/optalign/quote",handler:function(e){return e.replace(/<span class="typograf-oa-(n-|sp-)?lquote">(.*?)<\/span>/g,"$2")}}),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,n,r,a){return n+r.toLowerCase()+"\u0301"+a})},disabled:!0}),e.rule({name:"ru/punctuation/ano",handler:function(e){var n=new RegExp("([^!?,:;\\-\u2012\u2013\u2014])([ \xa0\n])(\u0430|\u043d\u043e)(?= |\xa0|\n)","g");return e.replace(n,"$1,$2$3")}}),e.rule({name:"ru/punctuation/apostrophe",index:"-5",handler:function(e){var n="(["+this._data("l")+"])",r=new RegExp(n+"['\u2019]"+n,"gi");return e.replace(r,"$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 n=new RegExp("(^|[^!])!\\?([^?]|$)","g");return e.replace(n,"$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,n){var r=n.lquote,a=n.rquote;return e=this._quote(e,n),r===n.lquote2&&a===n.rquote2?e.replace(new RegExp(r+r,"g"),r).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 n=new RegExp("(^| |\xa0)(\\d{3,4})(\u0433\u043e\u0434([\u0430\u0443\u0435]|\u043e\u043c)?)([^"+this._data("l")+"]|$)","g");return e.replace(n,"$1$2 $3$5")}}),e._sortRules(),e._needSortRules=!0,e}); | ||
!function(e,n){"function"==typeof define&&define.amd?define("typograf",[],n):"object"==typeof exports?module.exports=n():e.Typograf=n()}(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._rules.forEach(this._prepareRule,this),this._prefs.disable&&this.disable(this._prefs.disable),this._prefs.enable&&this.enable(this._prefs.enable)}return e.rule=function(n){var r=n.name.split("/");return n._enabled=n.disabled===!0?!1:!0,n._lang=r[0],n._group=r[1],n._name=r[2],e._setIndex(n),"common"!==n._lang&&-1!==e._langs.indexOf(n._lang)&&e._langs.push(n._lang),e.prototype._rules.push(n),e._needSortRules&&this._sortRules(),this},e._setIndex=function(n){var r=n.index,a=typeof r,t=e.groupIndexes[n._group];"undefined"===a?r=t:"string"===a&&(r=t+parseInt(n.index,10)),n._index=r},e.innerRule=function(n){return e.prototype._innerRules.push(n),n._lang=n.name.split("/")[0],this},e.data=function(n,r){if("string"==typeof n){if(1===arguments.length)return e._data[n];e._data[n]=r}else"object"==typeof n&&Object.keys(n).forEach(function(r){e._data[r]=n[r]})},e._data={},e._sortRules=function(){e.prototype._rules.sort(function(e,n){return e._index>n._index?1:-1})},e._replace=function(e,n){for(var r=0;r<n.length;r++)e=e.replace(n[r][0],n[r][1]);return e},e._langs=[],e._privateLabel="\udbff",e.prototype={constructor:e,execute:function(e,n){n=n||{};var r=this,a=n.lang||this._prefs.lang||"common",t={},u={},l="undefined"==typeof n.mode?this._prefs.mode:n.mode,i=function(n){var r=n._lang,t=this._prefs.live;t===!0&&n.live===!1||t===!1&&n.live===!0||"common"!==r&&r!==a||!this.enabled(n.name)||(this._onBeforeRule&&this._onBeforeRule(e),e=n.handler.call(this,e,this._settings[n.name]),this._onAfterRule&&this._onAfterRule(e))},s=function(e){u[e]&&u[e].forEach(i,r),t[e]&&t[e].forEach(i,r)};return this._lang=a,(e=""+e)?(e=this._fixLineEnd(e),this._innerRules.forEach(function(e){var n=e.queue;u[n]=u[n]||[],u[n].push(e)},this),this._rules.forEach(function(e){var n=e.queue;t[n]=t[n]||[],t[n].push(e)},this),this._isHTML=-1!==e.search(/(<\/?[a-z]|<!|&[lg]t;)/i),s("start"),this._isHTML&&(e=this._hideSafeTags(e)),e=this._utfication(e),s("utf"),s(),e=this._modification(e,l),s("entity"),this._isHTML&&(e=this._showSafeTags(e)),s("end"),this._lang=null,this._isHTML=null,e):""},setting:function(e,n,r){return arguments.length<=2?this._settings[e]&&this._settings[e][n]:(this._settings[e]=this._settings[e]||{},this._settings[e][n]=r,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,n){this._safeTags.push([e,n])},_data:function(n){return e.data(this._lang+"/"+n)},_quote:function(n,r){var a=this._data("l")+"\u0301\\d",t=e._privateLabel,u=r.lquote,l=r.rquote,i=r.lquote2,s=r.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;return n=n.replace(h,function(){return $++,'"'}).replace(p,u+"$1").replace(d,"$1"+l+"$2").replace(m,"$1"+u+t).replace(f,t+l+"$1").replace(g,"$1"+u),i&&s&&$%2===0?this._innerQuote(n,r):n},_innerQuote:function(e,n){var r=[n.lquote],a=[n.rquote],t=n.lquote,u=n.rquote,l=new Array(e.length);n.lquote2&&n.rquote2&&(r.push(n.lquote2),a.push(n.rquote2),n.lquote3&&n.rquote3&&(r.push(n.lquote3),a.push(n.rquote3)));for(var i=-1,s=r.length-1,o=0,c=e.length;c>o;o++){var p=e[o];p===t?(i++,i>s&&(i=s),l.push(r[i])):p===u?-1>=i?(i=0,l.push(r[i])):(l.push(a[i]),i--,-1>i&&(i=-1)):l.push(p)}return l.join("")},_fixLineEnd:function(e){return e.replace(/\r\n/g,"\n")},_prepareRule:function(e){var n=e.name,r={};"object"==typeof e.settings&&Object.keys(e.settings).forEach(function(n){r[n]=e.settings[n]}),this._settings[n]=r,this._enabledRules[n]=e._enabled},_enable:function(e,n){return Array.isArray(e)?e.forEach(function(e){this._enableByMask(e,n)},this):this._enableByMask(e,n),this},_enableByMask:function(e,n){var r;-1!==e.search(/\*/)?(r=new RegExp(e.replace(/\//g,"\\/").replace(/\*/g,".*")),this._rules.forEach(function(e){var a=e.name;r.test(a)&&(this._enabledRules[a]=n)},this)):this._enabledRules[e]=n},_rules:[],_innerRules:[],_getRule:function(e){var n=null;return this._rules.some(function(r){return r.name===e?(n=r,!0):!1}),n},_initSafeTags:function(){this._safeTags=[["<!--","-->"],["<!ENTITY",">"],["<!DOCTYPE",">"],["<\\?xml","\\?>"],["<!\\[CDATA\\[","\\]\\]>"]],["code","kbd","object","pre","samp","script","style","var"].forEach(function(e){this._safeTags.push(["<"+e+"(\\s[^>]*?)?>","</"+e+">"])},this)},_hideSafeTags:function(e){return this._hiddenSafeTags={},this._iLabel=0,this._safeTags.forEach(function(n){var r=new RegExp(n[0]+"[^]*?"+n[1],"gi");e=e.replace(r,this._pasteLabel)},this),this._hideHTMLTags(e)},_getPrivateLabel:function(n){var r=e._privateLabel;return r+"tf"+n+r},_pasteLabel:function(e){var n=this._getPrivateLabel(this._iLabel);return this._hiddenSafeTags[n]=e,this._iLabel++,n},_replaceLabel:function(e){return this._hiddenSafeTags[e]},_hideHTMLTags:function(e){return e.replace(/<\/?[a-z][^]*?>/gi,this._pasteLabel).replace(/<\/?[a-z][^]*?>/gi,this._pasteLabel).replace(/&[gl]t;/gi,this._pasteLabel)},_showSafeTags:function(n){for(var r=e._privateLabel,a=new RegExp(r+"tf\\d+"+r,"g"),t=new RegExp(r+"tf\\d"),u=0;u<this._safeTags.length&&(n=n.replace(a,this._replaceLabel),-1!==n.search(t));u++);return delete this._hiddenSafeTags,n},_utfication:function(e){return-1!==e.search(/&#/)&&(e=this._decHexToUtf(e)),-1!==e.search(/&[a-z]/i)&&this.entities.forEach(function(n){e=e.replace(n[3],n[2])}),e.replace(/"/g,'"')},_decHexToUtf:function(e){return e.replace(/&#(\d{1,6});/gi,function(e,n){return String.fromCharCode(parseInt(n,10))}).replace(/&#x([\da-f]{1,6});/gi,function(e,n){return String.fromCharCode(parseInt(n,16))})},_modification:function(e,n){if("name"===n||"digit"===n){var r="name"===n?0:1;this.entities.forEach(function(n){n[r]&&(e=e.replace(n[4],n[r]))})}return e}},e.version="4.1.0",e.groupIndexes={symbols:110,space:210,dash:310,punctuation:410,nbsp:510,number:610,money:710,date:810,other:910,optalign:1010,html:1110},e.prototype.entities=[],[["nbsp",160],["iexcl",161],["cent",162],["pound",163],["curren",164],["yen",165],["brvbar",166],["sect",167],["uml",168],["copy",169],["ordf",170],["laquo",171],["not",172],["shy",173],["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],["ensp",8194],["emsp",8195],["thinsp",8201],["zwnj",8204],["zwj",8205],["lrm",8206],["rlm",8207],["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]].forEach(function(n){var r=n[0],a=n[1],t=String.fromCharCode(a),u=["&"+r+";","&#"+a+";",t,new RegExp("&"+r+";","g"),new RegExp(t,"g")];e.prototype.entities.push(u)},this),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/L":"A-Z","en/lL":"a-zA-Z"}),e._langs.push("en"),e.data({"ru/dashBefore":"(^| |\\n)","ru/dashAfter":"([\xa0 ,.?:!]|$)"}),e.data({"ru/l":"\u0430-\u044f\u0451a-z","ru/L":"\u0410-\u042f\u0401A-Z","ru/lL":"\u0430-\u044f\u0451\u0410-\u042f\u0401a-zA-Z"}),e._langs.push("ru"),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/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",handler:function(e){return 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 n={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return e.replace(/[&<>"'\/]/g,function(e){return n[e]})},disabled:!0}),e.rule({name:"common/html/nbr",index:"+5",queue:"end",handler:function(e){return-1===e.search(/<br/)?e.replace(/\n/g,"<br/>\n"):e},disabled:!0}),e.rule({name:"common/html/pbr",queue:"end",handler:function(e){return-1===e.search(/<(p|br)[\s\/>]/)&&(-1===e.search(/\n/)?e="<p>"+e+"</p>":(e="<p>"+e.replace(/\n\n/g,"</p>\n<p>")+"</p>",e=e.replace(/([^>])\n/g,"$1<br/>\n"))),e},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",handler:function(e){var n="(http|https|ftp|telnet|news|gopher|file|wais)://",r="([a-zA-Z0-9/+-=%&:_.~?]+[a-zA-Z0-9#+]*)",a=new RegExp(n+r,"g");return e.replace(a,function(e,n,r){r=r.replace(/([^\/]+\/?)(\?|#)$/,"$1").replace(/^([^\/]+)\/$/,"$1"),"http"===n?r=r.replace(/^([^\/]+)(:80)([^\d]|\/|$)/,"$1$3"):"https"===n&&(r=r.replace(/^([^\/]+)(:443)([^\d]|\/|$)/,"$1$3"));var a=r,t=n+"://"+r,u='<a href="'+t+'">';return"http"===n||"https"===n?(a=a.replace(/^www\./,""),u+("http"===n?a:n+"://"+a)+"</a>"):u+t+"</a>"})},disabled:!0}),e.rule({name:"common/nbsp/afterNumber",handler:function(e){var n="(^|\\D)(\\d{1,5}) (["+this._data("l")+"]{2,})";return e.replace(new RegExp(n,"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(n,r){var a=r.lengthShortWord,t=" \xa0("+e._privateLabel+e.data("common/quote"),u="(^|["+t+"])(["+this._data("l")+"]{1,"+a+"}) ",l="$1$2\xa0",i=new RegExp(u,"gim");return n.replace(i,l).replace(i,l)},settings:{lengthShortWord:2}}),e.rule({name:"common/nbsp/beforeShortLastWord",handler:function(e,n){var r=new RegExp("(["+this._data("l")+"d]) (["+this._data("lL")+"]{1,"+n.lengthLastWord+"}[.!?\u2026])( ["+this._data("L")+"]|$)","g");return e.replace(r,"$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 n(e,n,r,a){return n+r.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,n).replace(/(<nobr>)(.*?)(<\/nobr>)/g,n)}})}(),e.rule({name:"common/nbsp/replaceNbsp",queue:"utf",live:!0,handler:function(e){return e.replace(/\u00A0/g," ")}}),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(n){return e._replace(n,[[/!=/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$3")}}),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){var n=new RegExp("(["+this._data("l")+"\u0301]+) \\1([;:,.?! \n])","gi");return e.replace(n,"$1$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(n){var r=e._privateLabel,a=new RegExp("(!|;|\\?)([^).!;?\\s[\\])"+r+e.data("common/quote")+"])","g"),t=new RegExp('(\\D)(,|:)([^)",:.?\\s\\/\\\\'+r+"])","g");return n.replace(a,"$1 $2").replace(t,"$1$2 $3")}}),e.rule({name:"common/space/beforeBracket",handler:function(e){var n=new RegExp("(["+this._data("l")+".!?,;\u2026)])\\(","gi");return e.replace(n,"$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(n){return e._replace(n,[[/(^|[^-])->(?!>)/g,"$1\u2192"],[/(^|[^<])<-(?!-)/g,"$1\u2190"]])}}),e.rule({name:"common/symbols/cf",handler:function(e){var n=new RegExp('(\\d+)( |\xa0)?(C|F)([\\W \\.,:!\\?"\\]\\)]|$)',"g");return e.replace(n,"$1\u2009\xb0$3$4")}}),e.rule({name:"common/symbols/copy",handler:function(n){return e._replace(n,[[/\(r\)/gi,"\xae"],[/(copyright )?\((c|\u0441)\)/gi,"\xa9"],[/\(tm\)/gi,"\u2122"]])}}),e.rule({name:"en/punctuation/quote",handler:function(e,n){return this._quote(e,n)},settings:{lquote:"\u201c",rquote:"\u201d",lquote2:"\u2018",rquote2:"\u2019"}}),e.rule({name:"ru/dash/centuries",handler:function(n){var r="("+e.data("common/dash")+")",a=new RegExp("(X|I|V)[ |\xa0]?"+r+"[ |\xa0]?(X|I|V)","g");return n.replace(a,"$1"+this.setting("ru/dash/centuries","dash")+"$3")},settings:{dash:"\u2014"}}),e.rule({name:"ru/dash/daysMonth",handler:function(n){var r=new RegExp("(^|\\s)([123]?\\d)("+e.data("common/dash")+")([123]?\\d)[ \xa0]("+e.data("ru/monthGenCase")+")","g");return n.replace(r,"$1$2\u2014$4\xa0$5")}}),e.rule({name:"ru/dash/decade",handler:function(n){var r=new RegExp("(^|\\s)(\\d{3}|\\d)0("+e.data("common/dash")+")(\\d{3}|\\d)0(-\u0435[ \xa0])(?=\u0433\\.?[ \xa0]?\u0433|\u0433\u043e\u0434)","g");return n.replace(r,"$1$20\u2014$40$5")}}),e.rule({name:"ru/dash/directSpeech",handler:function(n){var r=e.data("common/dash"),a=new RegExp('(["\xbb\u2018\u201c,])[ |\xa0]?('+r+")[ |\xa0]","g"),t=new RegExp("(^|"+e._privateLabel+")("+r+")( |\xa0)","gm"),u=new RegExp("([.\u2026?!])[ \xa0]("+r+")[ \xa0]","g");return n.replace(a,"$1\xa0\u2014 ").replace(t,"$1\u2014\xa0").replace(u,"$1 \u2014\xa0")}}),e.rule({name:"ru/dash/izpod",handler:function(n){var r=new RegExp(e.data("ru/dashBefore")+"(\u0418|\u0438)\u0437 \u043f\u043e\u0434"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1$2\u0437-\u043f\u043e\u0434$3")}}),e.rule({name:"ru/dash/izza",handler:function(n){var r=new RegExp(e.data("ru/dashBefore")+"(\u0418|\u0438)\u0437 \u0437\u0430"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1$2\u0437-\u0437\u0430$3")}}),e.rule({name:"ru/dash/kade",handler:function(n){var r=new RegExp("([a-\u044f\u0451]+)( | ?- ?)(\u043a\u0430|\u0434\u0435|\u043a\u0430\u0441\u044c)"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1-$3$4")}}),e.rule({name:"ru/dash/koe",handler:function(n){var r=new RegExp(e.data("ru/dashBefore")+"([\u041a\u043a]\u043e[\u0435\u0439])\\s([\u0430-\u044f\u0451]{3,})"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1$2-$3$4")}}),e.rule({name:"ru/dash/main",index:"-5",handler:function(n){var r=e.data("common/dash"),a=new RegExp("( |\xa0)("+r+")( |\\n)","g");return n.replace(a,"\xa0\u2014$3")}}),e.rule({name:"ru/dash/month",handler:function(n){var r="("+e.data("ru/month")+")",a="("+e.data("ru/monthPreCase")+")",t=e.data("common/dash"),u=new RegExp(r+" ?("+t+") ?"+r,"gi"),l=new RegExp(a+" ?("+t+") ?"+a,"gi");return n.replace(u,"$1\u2014$3").replace(l,"$1\u2014$3")}}),e.rule({name:"ru/dash/surname",handler:function(e){var n=new RegExp("([\u0410-\u042f\u0401][\u0430-\u044f\u0451]+)\\s-([\u0430-\u044f\u0451]{1,3})(?![^\u0430-\u044f\u0451]|$)","g");return e.replace(n,"$1\xa0\u2014$2")}}),e.rule({name:"ru/dash/taki",handler:function(n){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)"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1-$2$3")}}),e.rule({name:"ru/dash/time",handler:function(n){var r=new RegExp(e.data("ru/dashBefore")+"(\\d?\\d:[0-5]\\d)"+e.data("common/dash")+"(\\d?\\d:[0-5]\\d)"+e.data("ru/dashAfter"),"g");return n.replace(r,"$1$2\u2014$3$4")}}),e.rule({name:"ru/dash/to",handler:function(n){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"],a=new RegExp("("+r.join("|")+")( | ?- ?)(\u0442\u043e|\u043b\u0438\u0431\u043e|\u043d\u0438\u0431\u0443\u0434\u044c)"+e.data("ru/dashAfter"),"gi");return n.replace(a,"$1-$3$4")}}),e.rule({name:"ru/dash/weekday",handler:function(n){var r="("+e.data("ru/weekday")+")",a=new RegExp(r+" ?("+e.data("common/dash")+") ?"+r,"gi");return n.replace(a,"$1\u2014$3")}}),e.rule({name:"ru/dash/years",handler:function(n){var r=this.setting("ru/dash/years","dash"),a=e.data("common/dash"),t=new RegExp("(\\D|^)(\\d{4})[ \xa0]?("+a+")[ \xa0]?(\\d{4})(?=[ \xa0]?\u0433)","g");return n.replace(t,function(e,n,a,t,u){return parseInt(a,10)<parseInt(u,10)?n+a+r+u:e})},settings:{dash:"\u2014"}}),e.rule({name:"ru/date/fromISO",handler:function(e){var n="(-|\\.|\\/)",r="(-|\\/)",a=new RegExp("(^|\\D)(\\d{4})"+n+"(\\d{2})"+n+"(\\d{2})(\\D|$)","gi"),t=new RegExp("(^|\\D)(\\d{2})"+r+"(\\d{2})"+r+"(\\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(n){var r="( |\xa0)",a=e.data("ru/monthGenCase"),t=e.data("ru/weekday"),u=new RegExp("(\\d)"+r+"("+a+"),"+r+"("+t+")","gi");return n.replace(u,function(){var e=arguments;return e[1]+e[2]+e[3].toLowerCase()+","+e[4]+e[5].toLowerCase()})}}),e.rule({name:"ru/money/dollar",handler:function(e){var n=new RegExp("(^|[\\D]{2,})\\$ ?([\\d.,]+([ \xa0\u2009\u202f]\\d{3})*)","g"),r=new RegExp("(^|[\\D])([\\d.,]+) ?\\$","g"),a="$1$2\xa0$";return e.replace(n,a).replace(r,a)}}),e.rule({name:"ru/money/euro",handler:function(e){var n=new RegExp("(^|[\\D]{2,})\u20ac ?([\\d.,]+([ \xa0\u2009\u202f]\\d{3})*)","g"),r=new RegExp("(^|[\\D])([\\d.,]+) ?\u20ac","g"),a="$1$2\xa0\u20ac";return e.replace(n,a).replace(r,a)}}),e.rule({name:"ru/money/ruble",handler:function(e){var n="$1\xa0\u20bd";return e.replace(/^(\d+)( |\u00A0)?(\u0440|\u0440\u0443\u0431)\.$/,n).replace(/(\d+)( |\u00A0)?(\u0440|\u0440\u0443\u0431)\.(?=[!?,:;])/g,n).replace(/(\d+)( |\u00A0)?(\u0440|\u0440\u0443\u0431)\.(?=\s+[A-\u042f\u0401])/g,n+".")},disabled:!0}),e.rule({name:"ru/nbsp/abbr",handler:function(n){var r=new RegExp("(^|\\s|"+e._privateLabel+")(([\u0430-\u044f\u0451]{1,3}\\.){2,})(?![\u0430-\u044f\u0451])","g");return n.replace(r,function(e,n,r){var a=r.split(/\./);return["\u0440\u0444","\u0440\u0443","\u0440\u0443\u0441","\u043e\u0440\u0433","\u0443\u043a\u0440","\u0431\u0433","\u0441\u0440\u0431"].indexOf(a[a.length-2])>-1?e:n+r.split(/\./).join(".\xa0").trim()})}}),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 n="(\u043b\u0438|\u043b\u044c|\u0436\u0435|\u0436|\u0431\u044b|\u0431)",r=new RegExp("([\u0410-\u042f\u0401\u0430-\u044f\u0451]) "+n+'(?=[?!,.:;"\u2018\u201c\xbb])',"g"),a=new RegExp("([\u0410-\u042f\u0401\u0430-\u044f\u0451])[ \xa0]"+n+"[ \xa0]","g");return e.replace(r,"$1\xa0$2").replace(a,"$1\xa0$2 ")}}),e.rule({name:"ru/nbsp/centuries",handler:function(n){var r=e.data("common/dash"),a=new RegExp("(^|\\s)([VIX]+)[ \xa0]?\u0432\\.?(?=[^.]|$)","g"),t=new RegExp("(^|\\s)([VIX]+)("+r+")([VIX]+)[ \xa0]?\u0432\\.?([ \xa0]?\u0432\\.?)?(?=[^.]|$)","g");return n.replace(a,"$1$2\xa0\u0432.").replace(t,"$1$2$3$4\xa0\u0432\u0432.")}}),e.rule({name:"ru/nbsp/dayMonth",handler:function(n){var r=new RegExp("(\\d{1,2}) ("+e.data("ru/shortMonth")+")","gi");return n.replace(r,"$1\xa0$2")}}),e.rule({name:"ru/nbsp/m",index:"+5",handler:function(n){var r=e._privateLabel,a=new RegExp("(^|[\\s,."+r+"])(\\d+)[ \xa0]?(\u043c\u043c?|\u0441\u043c|\u043a\u043c|\u0434\u043c|\u0433\u043c|mm?|km|cm|dm)([23\xb2\xb3])?([\\s.!?,;"+r+"]|$)","gm");return n.replace(a,function(e,n,r,a,t,u){var l={2:"\xb2","\xb2":"\xb2",3:"\xb3","\xb3":"\xb3","":""}[t||""];return n+r+"\xa0"+a+l+("\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(n){var r=new RegExp("(^|[)\\s"+e._privateLabel+"])(\u0441\u0442\u0440|\u0433\u043b|\u0440\u0438\u0441|\u0438\u043b\u043b?|\u0441\u0442|\u043f|c)\\. *(\\d+)([\\s.,?!;:]|$)","gim");return n.replace(r,"$1$2.\xa0$3$4")}}),e.rule({name:"ru/nbsp/ps",handler:function(n){var r=new RegExp("(^|\\s|"+e._privateLabel+")[p\u0437]\\.[ \xa0]?([p\u0437]\\.[ \xa0]?)?[s\u044b]\\.:? ","gim");return n.replace(r,function(e,n,r){return n+(r?"P.\xa0P.\xa0S. ":"P.\xa0S. ")})}}),e.rule({name:"ru/nbsp/see",handler:function(n){var r=new RegExp("(^|\\s|"+e._privateLabel+"|\\()(\u0441\u043c|\u0438\u043c)\\.[ \xa0]?([\u0430-\u044f\u04510-9a-z]+)([\\s.,?!]|$)","gi");return n.replace(r,function(e,n,r,a,t){return("\xa0"===n?" ":n)+r+".\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(n){var r=e.data("common/dash"),a=new RegExp("(^|\\D)(\\d{4})("+r+")(\\d{4})[ \xa0]?\u0433\\.?([ \xa0]?\u0433\\.)?","g");return n.replace(a,"$1$2$3$4\xa0\u0433\u0433.")}}),e.rule({name:"ru/number/ordinals",handler:function(e){var n=new RegExp("(\\d)-(\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(n,function(e,n,r){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 n+"-"+a[r]})}}),e.rule({name:"ru/optalign/bracket",handler:function(e,n){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:"ru/optalign/bracket",handler:function(e){return e.replace(/<span class="typograf-oa-(n-|sp-)?lbracket">(.*?)<\/span>/g,"$2")}}),e.rule({name:"ru/optalign/comma",handler:function(e,n){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:"ru/optalign/comma",handler:function(e){return e.replace(/<span class="typograf-oa-comma(-sp)?">(.*?)<\/span>/g,"$2")}}),e.rule({name:"ru/optalign/quote",handler:function(n){var r="ru/punctuation/quote",a='(["'+this.setting(r,"lquote")+this.setting(r,"lquote2")+this.setting(r,"lquote3")+"])",t=new RegExp("([\\d"+this._data("l")+"\\-\u0301!?.:;,]+)( |\xa0)("+a+")","gi"),u=new RegExp("(^|"+e._privateLabel+")"+a,"gm");return n.replace(t,'$1<span class="typograf-oa-sp-lquote">$2</span><span class="typograf-oa-lquote">$3</span>').replace(u,'$1<span class="typograf-oa-n-lquote">$2</span>')},disabled:!0}).innerRule({name:"ru/optalign/quote",handler:function(e){return e.replace(/<span class="typograf-oa-(n-|sp-)?lquote">(.*?)<\/span>/g,"$2")}}),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,n,r,a){return n+r.toLowerCase()+"\u0301"+a})},disabled:!0}),e.rule({name:"ru/punctuation/ano",handler:function(e){var n=new RegExp("([^!?,:;\\-\u2012\u2013\u2014])([ \xa0\n])(\u0430|\u043d\u043e)(?= |\xa0|\n)","g");return e.replace(n,"$1,$2$3")}}),e.rule({name:"ru/punctuation/apostrophe",index:"-5",handler:function(e){var n="(["+this._data("l")+"])",r=new RegExp(n+"['\u2019]"+n,"gi");return e.replace(r,"$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 n=new RegExp("(^|[^!])!\\?([^?]|$)","g");return e.replace(n,"$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,n){var r=n.lquote,a=n.rquote;return e=this._quote(e,n),r===n.lquote2&&a===n.rquote2?e.replace(new RegExp(r+r,"g"),r).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 n=new RegExp("(^| |\xa0)(\\d{3,4})(\u0433\u043e\u0434([\u0430\u0443\u0435]|\u043e\u043c)?)([^"+this._data("l")+"]|$)","g");return e.replace(n,"$1$2 $3$5")}}),e._sortRules(),e._needSortRules=!0,e}); |
@@ -31,4 +31,4 @@ Typograf.titles = { | ||
"common/nbsp/afterParagraph": { | ||
"en": "Non-breaking space after §", | ||
"ru": "Нераз. пробел после §" | ||
"en": "Non-breaking thin space after §", | ||
"ru": "Нераз. узкий пробел после §" | ||
}, | ||
@@ -231,4 +231,4 @@ "common/nbsp/afterShortWord": { | ||
"ru/nbsp/afterNumberSign": { | ||
"en": "Non-breaking space after №", | ||
"ru": "Нераз. пробел после №" | ||
"en": "Non-breaking thin space after №", | ||
"ru": "Нераз. узкий пробел после №" | ||
}, | ||
@@ -235,0 +235,0 @@ "ru/nbsp/beforeParticle": { |
@@ -31,4 +31,4 @@ { | ||
"common/nbsp/afterParagraph": { | ||
"en": "Non-breaking space after §", | ||
"ru": "Нераз. пробел после §" | ||
"en": "Non-breaking thin space after §", | ||
"ru": "Нераз. узкий пробел после §" | ||
}, | ||
@@ -231,4 +231,4 @@ "common/nbsp/afterShortWord": { | ||
"ru/nbsp/afterNumberSign": { | ||
"en": "Non-breaking space after №", | ||
"ru": "Нераз. пробел после №" | ||
"en": "Non-breaking thin space after №", | ||
"ru": "Нераз. узкий пробел после №" | ||
}, | ||
@@ -235,0 +235,0 @@ "ru/nbsp/beforeParticle": { |
@@ -52,3 +52,3 @@ ## Rules of typograf in order of execution | ||
| 47. | [common/nbsp/afterShortWord](../src/rules/common/nbsp/afterShortWord.js) | Non-breaking space after short word | 510 | | ✓ | | ||
| 48. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Non-breaking space after § | 510 | | ✓ | | ||
| 48. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Non-breaking thin space after § | 510 | | ✓ | | ||
| 49. | [common/nbsp/afterNumber](../src/rules/common/nbsp/afterNumber.js) | Non-breaking space between number and word | 510 | | | | ||
@@ -62,3 +62,3 @@ | 50. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Non-breaking space before XXXX г. (2012 г.) | 510 | | ✓ | | ||
| 56. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Remove spaces and extra points in “вв.” | 510 | | ✓ | | ||
| 57. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Non-breaking space after № | 510 | | ✓ | | ||
| 57. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Non-breaking thin space after № | 510 | | ✓ | | ||
| 58. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Non-breaking space in abbreviations, e.g. “т. д.” | 510 | | ✓ | | ||
@@ -65,0 +65,0 @@ | 59. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al. | 510 | | ✓ | |
@@ -52,3 +52,3 @@ ## Правила типографа по порядку выполнения | ||
| 47. | [common/nbsp/afterShortWord](../src/rules/common/nbsp/afterShortWord.js) | Нераз. пробел после короткого слова | 510 | | ✓ | | ||
| 48. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Нераз. пробел после § | 510 | | ✓ | | ||
| 48. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Нераз. узкий пробел после § | 510 | | ✓ | | ||
| 49. | [common/nbsp/afterNumber](../src/rules/common/nbsp/afterNumber.js) | Нераз. пробел между числом и словом | 510 | | | | ||
@@ -62,3 +62,3 @@ | 50. | [ru/nbsp/year](../src/rules/ru/nbsp/year.js) | Нераз. пробел после XXXX г. (2012 г.) | 510 | | ✓ | | ||
| 56. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Удаление пробелов и лишних точек в «вв.» | 510 | | ✓ | | ||
| 57. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Нераз. пробел после № | 510 | | ✓ | | ||
| 57. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Нераз. узкий пробел после № | 510 | | ✓ | | ||
| 58. | [ru/nbsp/abbr](../src/rules/ru/nbsp/abbr.js) | Нераз. пробел в сокращениях, например, в “т. д.” | 510 | | ✓ | | ||
@@ -65,0 +65,0 @@ | 59. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Расстановка неразрывного пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др. | 510 | | ✓ | |
@@ -12,3 +12,3 @@ ## Rules of typograf | ||
| 7. | [common/nbsp/afterNumber](../src/rules/common/nbsp/afterNumber.js) | Non-breaking space between number and word | 510 | | | | ||
| 8. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Non-breaking space after § | 510 | | ✓ | | ||
| 8. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Non-breaking thin space after § | 510 | | ✓ | | ||
| 9. | [common/nbsp/afterShortWord](../src/rules/common/nbsp/afterShortWord.js) | Non-breaking space after short word | 510 | | ✓ | | ||
@@ -65,3 +65,3 @@ | 10. | [common/nbsp/beforeShortLastWord](../src/rules/common/nbsp/beforeShortLastWord.js) | Non-breaking space before last short word in sentence | 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 space after № | 510 | | ✓ | | ||
| 60. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Non-breaking thin space after № | 510 | | ✓ | | ||
| 61. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Non-breaking space before “ли”, “ль”, “же”, “бы”, “б” | 515 | | ✓ | | ||
@@ -68,0 +68,0 @@ | 62. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Remove spaces and extra points in “вв.” | 510 | | ✓ | |
@@ -12,3 +12,3 @@ ## Правила типографа | ||
| 7. | [common/nbsp/afterNumber](../src/rules/common/nbsp/afterNumber.js) | Нераз. пробел между числом и словом | 510 | | | | ||
| 8. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Нераз. пробел после § | 510 | | ✓ | | ||
| 8. | [common/nbsp/afterParagraph](../src/rules/common/nbsp/afterParagraph.js) | Нераз. узкий пробел после § | 510 | | ✓ | | ||
| 9. | [common/nbsp/afterShortWord](../src/rules/common/nbsp/afterShortWord.js) | Нераз. пробел после короткого слова | 510 | | ✓ | | ||
@@ -65,3 +65,3 @@ | 10. | [common/nbsp/beforeShortLastWord](../src/rules/common/nbsp/beforeShortLastWord.js) | Нераз. пробел перед последним коротким словом в предложении | 510 | | ✓ | | ||
| 59. | [ru/nbsp/addr](../src/rules/ru/nbsp/addr.js) | Расстановка неразрывного пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др. | 510 | | ✓ | | ||
| 60. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Нераз. пробел после № | 510 | | ✓ | | ||
| 60. | [ru/nbsp/afterNumberSign](../src/rules/ru/nbsp/afterNumberSign.js) | Нераз. узкий пробел после № | 510 | | ✓ | | ||
| 61. | [ru/nbsp/beforeParticle](../src/rules/ru/nbsp/beforeParticle.js) | Нераз. пробел перед «ли», «ль», «же», «бы», «б» | 515 | | ✓ | | ||
@@ -68,0 +68,0 @@ | 62. | [ru/nbsp/centuries](../src/rules/ru/nbsp/centuries.js) | Удаление пробелов и лишних точек в «вв.» | 510 | | ✓ | |
{ | ||
"name": "typograf", | ||
"description": "The client and server typographer", | ||
"version": "4.0.1", | ||
"version": "4.1.0", | ||
"author": { | ||
@@ -42,2 +42,3 @@ "name": "Denis Seleznev", | ||
"gulp-rename": "~1.2.0", | ||
"gulp-replace": "^0.5.4", | ||
"gulp-uglify": "~1.4.1", | ||
@@ -49,5 +50,5 @@ "gulp-util": "~3.0.2", | ||
"mocha": "~2.3.3", | ||
"sort-keys": "~1.1.1", | ||
"through": "~2.3.6", | ||
"yaspeller": "~2.5.0", | ||
"sort-keys": "~1.1.1" | ||
"yaspeller": "~2.5.0" | ||
}, | ||
@@ -54,0 +55,0 @@ "scripts": { |
175521
2636
18