typograf 6.12.0 → 6.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/dist/typograf.all.js +89 -48
- package/dist/typograf.all.min.js +1 -1
- package/dist/typograf.js +70 -45
- package/dist/typograf.min.js +1 -1
- package/dist/typograf.titles.js +19 -3
- package/dist/typograf.titles.json +19 -3
- package/docs/RULES.en-US.md +76 -72
- package/docs/RULES.ru.md +76 -72
- package/docs/RULES_SORTED.en-US.md +93 -89
- package/docs/RULES_SORTED.ru.md +93 -89
- package/package.json +6 -8
- package/CHANGELOG.md +0 -413
package/README.md
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/typograf)
|
|
6
6
|
[](https://www.npmjs.com/package/typograf)
|
|
7
7
|
[](https://coveralls.io/r/typograf/typograf)
|
|
8
|
-
[](https://david-dm.org/typograf/typograf)
|
|
9
8
|
[](https://bundlephobia.com/result?p=typograf)
|
|
10
9
|
|
|
11
10
|
Помогает автоматически расставить неразрывные пробелы, исправить мелкие опечатки, привести кавычки к правильному виду, заменить дефисы на тире в нужных местах и многое другое.
|
package/dist/typograf.all.js
CHANGED
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
function _iterableToArrayLimit(arr, i) {
|
|
55
|
-
var _i = arr
|
|
55
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
56
56
|
|
|
57
57
|
if (_i == null) return;
|
|
58
58
|
var _arr = [];
|
|
@@ -380,6 +380,10 @@
|
|
|
380
380
|
|
|
381
381
|
var regExpUrl = new RegExp('(https?|file|ftp)://([a-zA-Z0-9/+-=%&:_.~?]+[a-zA-Z0-9#+]*)', 'g');
|
|
382
382
|
var regExpNumber = '\\d+([.,]\\d+)?';
|
|
383
|
+
var regExpDigit = /\d/;
|
|
384
|
+
function isDigit(symbol) {
|
|
385
|
+
return symbol.search(regExpDigit) > -1;
|
|
386
|
+
}
|
|
383
387
|
|
|
384
388
|
var privateLabel = "\uF000";
|
|
385
389
|
var privateSeparateLabel = "\uF001";
|
|
@@ -1211,7 +1215,7 @@
|
|
|
1211
1215
|
|
|
1212
1216
|
return Typograf;
|
|
1213
1217
|
}();
|
|
1214
|
-
Typograf.version = '6.
|
|
1218
|
+
Typograf.version = '6.14.0';
|
|
1215
1219
|
Typograf.addLocale = addLocale;
|
|
1216
1220
|
Typograf.getLocales = getLocales;
|
|
1217
1221
|
Typograf.hasLocale = hasLocale;
|
|
@@ -1630,7 +1634,7 @@
|
|
|
1630
1634
|
var afterNumber = {
|
|
1631
1635
|
name: 'common/nbsp/afterNumber',
|
|
1632
1636
|
handler: function handler(text, settings, context) {
|
|
1633
|
-
var re = '(^|\\
|
|
1637
|
+
var re = '(^|\\s)(\\d{1,5}) ([' + context.getData('char') + ']+)';
|
|
1634
1638
|
return text.replace(new RegExp(re, 'gi'), "$1$2\xA0$3");
|
|
1635
1639
|
},
|
|
1636
1640
|
disabled: true
|
|
@@ -1823,12 +1827,12 @@
|
|
|
1823
1827
|
}
|
|
1824
1828
|
};
|
|
1825
1829
|
|
|
1830
|
+
var MAX_LEVEL_WITH_ERRORS = 2;
|
|
1826
1831
|
var Quote = {
|
|
1827
1832
|
bufferQuotes: {
|
|
1828
1833
|
left: "\uF005\uF006\uF007",
|
|
1829
1834
|
right: "\uF008\uF009\uF0A0"
|
|
1830
1835
|
},
|
|
1831
|
-
maxLevel: 3,
|
|
1832
1836
|
beforeLeft: " \n\t\xA0[(",
|
|
1833
1837
|
afterRight: " \n\t\xA0!?.:;#*,\u2026)\\]",
|
|
1834
1838
|
process: function process(params) {
|
|
@@ -1935,8 +1939,8 @@
|
|
|
1935
1939
|
var lquote = params.settings.left[0];
|
|
1936
1940
|
var lquote2 = params.settings.left[1] || lquote;
|
|
1937
1941
|
var rquote = params.settings.right[0];
|
|
1938
|
-
var reL = new RegExp('(^|[' + this.beforeLeft + '])([' + quotes + ']
|
|
1939
|
-
var reR = new RegExp('([^\\s' + privateLabel + '])([' + quotes + ']
|
|
1942
|
+
var reL = new RegExp('(^|[' + this.beforeLeft + '])([' + quotes + ']+)(?=[^\\s' + privateLabel + '])', 'gim');
|
|
1943
|
+
var reR = new RegExp('([^\\s' + privateLabel + '])([' + quotes + ']+)(?=[' + this.afterRight + ']|$)', 'gim');
|
|
1940
1944
|
text = text.replace(reL, function ($0, $1, $2) {
|
|
1941
1945
|
return $1 + repeat(lquote, $2.length);
|
|
1942
1946
|
}).replace(reR, function ($0, $1, $2) {
|
|
@@ -2037,18 +2041,10 @@
|
|
|
2037
2041
|
return null;
|
|
2038
2042
|
},
|
|
2039
2043
|
setInner: function setInner(text, settings) {
|
|
2040
|
-
var leftQuotes = [];
|
|
2041
|
-
var rightQuotes = [];
|
|
2042
|
-
|
|
2043
|
-
for (var k = 0; k < settings.left.length; k++) {
|
|
2044
|
-
leftQuotes.push(settings.left[k]);
|
|
2045
|
-
rightQuotes.push(settings.right[k]);
|
|
2046
|
-
}
|
|
2047
|
-
|
|
2048
2044
|
var lquote = settings.left[0];
|
|
2049
2045
|
var rquote = settings.right[0];
|
|
2050
|
-
var minLevel =
|
|
2051
|
-
var maxLevel =
|
|
2046
|
+
var minLevel = 0;
|
|
2047
|
+
var maxLevel = this.getMaxLevel(text, lquote, rquote, settings.left.length);
|
|
2052
2048
|
var level = minLevel;
|
|
2053
2049
|
var result = '';
|
|
2054
2050
|
|
|
@@ -2056,25 +2052,20 @@
|
|
|
2056
2052
|
var letter = text[i];
|
|
2057
2053
|
|
|
2058
2054
|
if (letter === lquote) {
|
|
2055
|
+
result += settings.left[level > maxLevel - 1 ? maxLevel - 1 : level];
|
|
2059
2056
|
level++;
|
|
2060
2057
|
|
|
2061
2058
|
if (level > maxLevel) {
|
|
2062
2059
|
level = maxLevel;
|
|
2063
2060
|
}
|
|
2064
|
-
|
|
2065
|
-
result += leftQuotes[level];
|
|
2066
2061
|
} else if (letter === rquote) {
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
result += rightQuotes[level];
|
|
2072
|
-
level--;
|
|
2073
|
-
|
|
2074
|
-
if (level < minLevel) {
|
|
2075
|
-
level = minLevel;
|
|
2076
|
-
}
|
|
2062
|
+
level--;
|
|
2063
|
+
|
|
2064
|
+
if (level < minLevel) {
|
|
2065
|
+
level = minLevel;
|
|
2077
2066
|
}
|
|
2067
|
+
|
|
2068
|
+
result += settings.right[level];
|
|
2078
2069
|
} else {
|
|
2079
2070
|
if (letter === '"') {
|
|
2080
2071
|
level = minLevel;
|
|
@@ -2084,8 +2075,11 @@
|
|
|
2084
2075
|
}
|
|
2085
2076
|
}
|
|
2086
2077
|
|
|
2087
|
-
|
|
2088
|
-
|
|
2078
|
+
return result;
|
|
2079
|
+
},
|
|
2080
|
+
getMaxLevel: function getMaxLevel(text, leftQuote, rightQuote, length) {
|
|
2081
|
+
var count = this.count(text);
|
|
2082
|
+
return count[leftQuote] === count[rightQuote] ? length : Math.min(length, MAX_LEVEL_WITH_ERRORS);
|
|
2089
2083
|
}
|
|
2090
2084
|
};
|
|
2091
2085
|
var quote = {
|
|
@@ -2137,15 +2131,6 @@
|
|
|
2137
2131
|
|
|
2138
2132
|
Typograf.addRules([apostrophe, delDoublePunctuation, hellip, quote, quoteLink]);
|
|
2139
2133
|
|
|
2140
|
-
var afterPunctuation = {
|
|
2141
|
-
name: 'common/space/afterPunctuation',
|
|
2142
|
-
handler: function handler(text) {
|
|
2143
|
-
var reExcl = new RegExp('(!|;|\\?)([^).…!;?\\s[\\])' + privateLabel + getData('common/quote') + '])', 'g');
|
|
2144
|
-
var reComma = new RegExp('(\\D)(,|:)([^)",:.?\\s\\/\\\\' + privateLabel + '])', 'g');
|
|
2145
|
-
return text.replace(reExcl, '$1 $2').replace(reComma, '$1$2 $3');
|
|
2146
|
-
}
|
|
2147
|
-
};
|
|
2148
|
-
|
|
2149
2134
|
var beforeBracket = {
|
|
2150
2135
|
name: 'common/space/beforeBracket',
|
|
2151
2136
|
handler: function handler(text, settings, context) {
|
|
@@ -2277,7 +2262,49 @@
|
|
|
2277
2262
|
}
|
|
2278
2263
|
};
|
|
2279
2264
|
|
|
2280
|
-
|
|
2265
|
+
var reColon = new RegExp('(\\D):([^)",:.?\\s\\/\\\\' + privateLabel + '])', 'g');
|
|
2266
|
+
var afterColon = {
|
|
2267
|
+
name: 'common/space/afterColon',
|
|
2268
|
+
handler: function handler(text) {
|
|
2269
|
+
return text.replace(reColon, '$1: $2');
|
|
2270
|
+
}
|
|
2271
|
+
};
|
|
2272
|
+
|
|
2273
|
+
var reComma = new RegExp('(.),([^)",:.?\\s\\/\\\\' + privateLabel + '])', 'g');
|
|
2274
|
+
var afterComma = {
|
|
2275
|
+
name: 'common/space/afterComma',
|
|
2276
|
+
handler: function handler(text) {
|
|
2277
|
+
return text.replace(reComma, function ($0, $1, $2) {
|
|
2278
|
+
return isDigit($1) && isDigit($2) ? $0 : $1 + ', ' + $2;
|
|
2279
|
+
});
|
|
2280
|
+
}
|
|
2281
|
+
};
|
|
2282
|
+
|
|
2283
|
+
var reQuestionMark = new RegExp('\\?([^).…!;?\\s[\\])' + privateLabel + getData('common/quote') + '])', 'g');
|
|
2284
|
+
var afterQuestionMark = {
|
|
2285
|
+
name: 'common/space/afterQuestionMark',
|
|
2286
|
+
handler: function handler(text) {
|
|
2287
|
+
return text.replace(reQuestionMark, '? $1');
|
|
2288
|
+
}
|
|
2289
|
+
};
|
|
2290
|
+
|
|
2291
|
+
var reExclamationMark = new RegExp('!([^).…!;?\\s[\\])' + privateLabel + getData('common/quote') + '])', 'g');
|
|
2292
|
+
var afterExclamationMark = {
|
|
2293
|
+
name: 'common/space/afterExclamationMark',
|
|
2294
|
+
handler: function handler(text) {
|
|
2295
|
+
return text.replace(reExclamationMark, '! $1');
|
|
2296
|
+
}
|
|
2297
|
+
};
|
|
2298
|
+
|
|
2299
|
+
var reSemicolon = new RegExp(';([^).…!;?\\s[\\])' + privateLabel + getData('common/quote') + '])', 'g');
|
|
2300
|
+
var afterSemicolon = {
|
|
2301
|
+
name: 'common/space/afterSemicolon',
|
|
2302
|
+
handler: function handler(text) {
|
|
2303
|
+
return text.replace(reSemicolon, '; $1');
|
|
2304
|
+
}
|
|
2305
|
+
};
|
|
2306
|
+
|
|
2307
|
+
Typograf.addRules([afterColon, afterComma, afterQuestionMark, afterExclamationMark, afterSemicolon, beforeBracket, bracket, delBeforeDot, delBeforePercent, delBeforePunctuation, delBetweenExclamationMarks, delLeadingBlanks, delRepeatN, delRepeatSpace, delTrailingBlanks, insertFinalNewline, replaceTab, squareBracket, trimLeft, trimRight]);
|
|
2281
2308
|
|
|
2282
2309
|
var arrow = {
|
|
2283
2310
|
name: 'common/symbols/arrow',
|
|
@@ -2649,7 +2676,7 @@
|
|
|
2649
2676
|
var spaces = "\xA0\u202F "; // nbsp, thinsp
|
|
2650
2677
|
|
|
2651
2678
|
var quote = getData('ru/quote');
|
|
2652
|
-
var re = new RegExp('(^|[' + spaces + quote.left + privateLabel + '"])([А-ЯЁ])\\.[' + spaces + ']?([А-ЯЁ])\\.[' + spaces + ']?([А-ЯЁ][а-яё]+)(?=[\\s.,;:?!"' + quote.right + ']|$)', 'gm');
|
|
2679
|
+
var re = new RegExp('(^|[' + spaces + quote.left + privateLabel + '"])([А-ЯЁ])\\.[' + spaces + ']?([А-ЯЁ])\\.[' + spaces + ']?([А-ЯЁ][а-яё]+)(?=[\\s.,;:?!"' + quote.right + privateLabel + ']|$)', 'gm');
|
|
2653
2680
|
return text.replace(re, "$1$2.\xA0$3.\xA0$4");
|
|
2654
2681
|
}
|
|
2655
2682
|
};
|
|
@@ -3009,11 +3036,9 @@
|
|
|
3009
3036
|
var ano = {
|
|
3010
3037
|
name: 'ru/punctuation/ano',
|
|
3011
3038
|
handler: function handler(text) {
|
|
3012
|
-
var re = new RegExp(
|
|
3039
|
+
var re = new RegExp('([^«„[(!?,:;\\-‒–—\\s' + privateLabel + "])(\\s+)(\u0430|\u043D\u043E)(?= |\xA0|\\n)", 'g');
|
|
3013
3040
|
return text.replace(re, '$1,$2$3');
|
|
3014
|
-
}
|
|
3015
|
-
// Запятая может идти после ссылки.
|
|
3016
|
-
queue: 'hide-safe-tags-html'
|
|
3041
|
+
}
|
|
3017
3042
|
};
|
|
3018
3043
|
|
|
3019
3044
|
var exclamation = {
|
|
@@ -3217,9 +3242,25 @@
|
|
|
3217
3242
|
"en-US": "Removal quotes outside a link",
|
|
3218
3243
|
"ru": "Вынос кавычек за пределы ссылки"
|
|
3219
3244
|
},
|
|
3220
|
-
"common/space/
|
|
3221
|
-
"en-US": "space after
|
|
3222
|
-
"ru": "Пробел после
|
|
3245
|
+
"common/space/afterColon": {
|
|
3246
|
+
"en-US": "space after colon",
|
|
3247
|
+
"ru": "Пробел после двоеточия"
|
|
3248
|
+
},
|
|
3249
|
+
"common/space/afterComma": {
|
|
3250
|
+
"en-US": "space after comma",
|
|
3251
|
+
"ru": "Пробел после запятой"
|
|
3252
|
+
},
|
|
3253
|
+
"common/space/afterExclamationMark": {
|
|
3254
|
+
"en-US": "space after exclamation mark",
|
|
3255
|
+
"ru": "Пробел после знака восклицания"
|
|
3256
|
+
},
|
|
3257
|
+
"common/space/afterQuestionMark": {
|
|
3258
|
+
"en-US": "space after question mark",
|
|
3259
|
+
"ru": "Пробел после знака вопроса"
|
|
3260
|
+
},
|
|
3261
|
+
"common/space/afterSemicolon": {
|
|
3262
|
+
"en-US": "space after semicolon",
|
|
3263
|
+
"ru": "Пробел после точки с запятой"
|
|
3223
3264
|
},
|
|
3224
3265
|
"common/space/beforeBracket": {
|
|
3225
3266
|
"en-US": "Space before opening bracket",
|