typograf 6.13.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/dist/typograf.all.js +82 -45
- package/dist/typograf.all.min.js +1 -1
- package/dist/typograf.js +63 -42
- 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 +4 -4
package/dist/typograf.all.js
CHANGED
|
@@ -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;
|
|
@@ -1823,13 +1827,12 @@
|
|
|
1823
1827
|
}
|
|
1824
1828
|
};
|
|
1825
1829
|
|
|
1826
|
-
var MAX_LEVEL_WITH_ERRORS =
|
|
1830
|
+
var MAX_LEVEL_WITH_ERRORS = 2;
|
|
1827
1831
|
var Quote = {
|
|
1828
1832
|
bufferQuotes: {
|
|
1829
1833
|
left: "\uF005\uF006\uF007",
|
|
1830
1834
|
right: "\uF008\uF009\uF0A0"
|
|
1831
1835
|
},
|
|
1832
|
-
maxLevel: 3,
|
|
1833
1836
|
beforeLeft: " \n\t\xA0[(",
|
|
1834
1837
|
afterRight: " \n\t\xA0!?.:;#*,\u2026)\\]",
|
|
1835
1838
|
process: function process(params) {
|
|
@@ -1936,8 +1939,8 @@
|
|
|
1936
1939
|
var lquote = params.settings.left[0];
|
|
1937
1940
|
var lquote2 = params.settings.left[1] || lquote;
|
|
1938
1941
|
var rquote = params.settings.right[0];
|
|
1939
|
-
var reL = new RegExp('(^|[' + this.beforeLeft + '])([' + quotes + ']
|
|
1940
|
-
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');
|
|
1941
1944
|
text = text.replace(reL, function ($0, $1, $2) {
|
|
1942
1945
|
return $1 + repeat(lquote, $2.length);
|
|
1943
1946
|
}).replace(reR, function ($0, $1, $2) {
|
|
@@ -2038,18 +2041,10 @@
|
|
|
2038
2041
|
return null;
|
|
2039
2042
|
},
|
|
2040
2043
|
setInner: function setInner(text, settings) {
|
|
2041
|
-
var leftQuotes = [];
|
|
2042
|
-
var rightQuotes = [];
|
|
2043
|
-
|
|
2044
|
-
for (var k = 0; k < settings.left.length; k++) {
|
|
2045
|
-
leftQuotes.push(settings.left[k]);
|
|
2046
|
-
rightQuotes.push(settings.right[k]);
|
|
2047
|
-
}
|
|
2048
|
-
|
|
2049
2044
|
var lquote = settings.left[0];
|
|
2050
2045
|
var rquote = settings.right[0];
|
|
2051
|
-
var minLevel =
|
|
2052
|
-
var maxLevel = this.getMaxLevel(text, settings);
|
|
2046
|
+
var minLevel = 0;
|
|
2047
|
+
var maxLevel = this.getMaxLevel(text, lquote, rquote, settings.left.length);
|
|
2053
2048
|
var level = minLevel;
|
|
2054
2049
|
var result = '';
|
|
2055
2050
|
|
|
@@ -2057,25 +2052,20 @@
|
|
|
2057
2052
|
var letter = text[i];
|
|
2058
2053
|
|
|
2059
2054
|
if (letter === lquote) {
|
|
2055
|
+
result += settings.left[level > maxLevel - 1 ? maxLevel - 1 : level];
|
|
2060
2056
|
level++;
|
|
2061
2057
|
|
|
2062
2058
|
if (level > maxLevel) {
|
|
2063
2059
|
level = maxLevel;
|
|
2064
2060
|
}
|
|
2065
|
-
|
|
2066
|
-
result += leftQuotes[level];
|
|
2067
2061
|
} else if (letter === rquote) {
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
result += rightQuotes[level];
|
|
2073
|
-
level--;
|
|
2074
|
-
|
|
2075
|
-
if (level < minLevel) {
|
|
2076
|
-
level = minLevel;
|
|
2077
|
-
}
|
|
2062
|
+
level--;
|
|
2063
|
+
|
|
2064
|
+
if (level < minLevel) {
|
|
2065
|
+
level = minLevel;
|
|
2078
2066
|
}
|
|
2067
|
+
|
|
2068
|
+
result += settings.right[level];
|
|
2079
2069
|
} else {
|
|
2080
2070
|
if (letter === '"') {
|
|
2081
2071
|
level = minLevel;
|
|
@@ -2087,11 +2077,9 @@
|
|
|
2087
2077
|
|
|
2088
2078
|
return result;
|
|
2089
2079
|
},
|
|
2090
|
-
getMaxLevel: function getMaxLevel(text,
|
|
2091
|
-
var count = this.count(text
|
|
2092
|
-
|
|
2093
|
-
var rightQuotesCount = count[settings.right[0]] || 0;
|
|
2094
|
-
return leftQuotesCount === rightQuotesCount ? settings.left.length - 1 : Math.min(settings.left.length - 1, MAX_LEVEL_WITH_ERRORS);
|
|
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);
|
|
2095
2083
|
}
|
|
2096
2084
|
};
|
|
2097
2085
|
var quote = {
|
|
@@ -2143,15 +2131,6 @@
|
|
|
2143
2131
|
|
|
2144
2132
|
Typograf.addRules([apostrophe, delDoublePunctuation, hellip, quote, quoteLink]);
|
|
2145
2133
|
|
|
2146
|
-
var afterPunctuation = {
|
|
2147
|
-
name: 'common/space/afterPunctuation',
|
|
2148
|
-
handler: function handler(text) {
|
|
2149
|
-
var reExcl = new RegExp('(!|;|\\?)([^).…!;?\\s[\\])' + privateLabel + getData('common/quote') + '])', 'g');
|
|
2150
|
-
var reComma = new RegExp('(\\D)(,|:)([^)",:.?\\s\\/\\\\' + privateLabel + '])', 'g');
|
|
2151
|
-
return text.replace(reExcl, '$1 $2').replace(reComma, '$1$2 $3');
|
|
2152
|
-
}
|
|
2153
|
-
};
|
|
2154
|
-
|
|
2155
2134
|
var beforeBracket = {
|
|
2156
2135
|
name: 'common/space/beforeBracket',
|
|
2157
2136
|
handler: function handler(text, settings, context) {
|
|
@@ -2283,7 +2262,49 @@
|
|
|
2283
2262
|
}
|
|
2284
2263
|
};
|
|
2285
2264
|
|
|
2286
|
-
|
|
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]);
|
|
2287
2308
|
|
|
2288
2309
|
var arrow = {
|
|
2289
2310
|
name: 'common/symbols/arrow',
|
|
@@ -3221,9 +3242,25 @@
|
|
|
3221
3242
|
"en-US": "Removal quotes outside a link",
|
|
3222
3243
|
"ru": "Вынос кавычек за пределы ссылки"
|
|
3223
3244
|
},
|
|
3224
|
-
"common/space/
|
|
3225
|
-
"en-US": "space after
|
|
3226
|
-
"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": "Пробел после точки с запятой"
|
|
3227
3264
|
},
|
|
3228
3265
|
"common/space/beforeBracket": {
|
|
3229
3266
|
"en-US": "Space before opening bracket",
|