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.
@@ -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.13.0';
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 = 1;
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 + ']{1,' + this.maxLevel + '})(?=[^\\s' + privateLabel + '])', 'gim');
1940
- var reR = new RegExp('([^\\s' + privateLabel + '])([' + quotes + ']{1,' + this.maxLevel + '})(?=[' + this.afterRight + ']|$)', 'gim');
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 = -1;
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
- if (level <= minLevel) {
2069
- level = 0;
2070
- result += rightQuotes[level];
2071
- } else {
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, settings) {
2091
- var count = this.count(text, settings);
2092
- var leftQuotesCount = count[settings.left[0]] || 0;
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
- Typograf.addRules([afterPunctuation, beforeBracket, bracket, delBeforeDot, delBeforePercent, delBeforePunctuation, delBetweenExclamationMarks, delLeadingBlanks, delRepeatN, delRepeatSpace, delTrailingBlanks, insertFinalNewline, replaceTab, squareBracket, trimLeft, trimRight]);
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/afterPunctuation": {
3225
- "en-US": "space after punctuation",
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",