diff --git a/src/data/en/letter.js b/src/data/en/letter.js index a2a33ce4..fda12b53 100644 --- a/src/data/en/letter.js +++ b/src/data/en/letter.js @@ -1,5 +1,8 @@ Typograf.data({ 'en/l': 'a-z', + 'en/ld': 'a-z\\d', 'en/L': 'A-Z', - 'en/lL': 'a-zA-Z' + 'en/Ld': 'A-Z\\d', + 'en/lL': 'a-zA-Z', + 'en/lLd': 'a-zA-Z\\d' }); diff --git a/src/data/en/rquote.js b/src/data/en/rquote.js new file mode 100644 index 00000000..ffe08d5e --- /dev/null +++ b/src/data/en/rquote.js @@ -0,0 +1 @@ +Typograf.data('en/rquote', '”’'); diff --git a/src/data/ru/letter.js b/src/data/ru/letter.js index 849c8d0e..7166763c 100644 --- a/src/data/ru/letter.js +++ b/src/data/ru/letter.js @@ -1,5 +1,8 @@ Typograf.data({ 'ru/l': 'а-яёa-z', + 'ru/ld': 'а-яёa-z\\d', 'ru/L': 'А-ЯЁA-Z', - 'ru/lL': 'а-яёА-ЯЁa-zA-Z' + 'ru/Ld': 'А-ЯЁA-Z\\d', + 'ru/lL': 'а-яёА-ЯЁa-zA-Z', + 'ru/lLd': 'а-яёА-ЯЁa-zA-Z\\d' }); diff --git a/src/data/ru/rquote.js b/src/data/ru/rquote.js new file mode 100644 index 00000000..9d3a8d37 --- /dev/null +++ b/src/data/ru/rquote.js @@ -0,0 +1 @@ +Typograf.data('ru/rquote', '»“‘'); diff --git a/src/rules/common/nbsp/beforeShortLastNumber.js b/src/rules/common/nbsp/beforeShortLastNumber.js new file mode 100644 index 00000000..959a19a7 --- /dev/null +++ b/src/rules/common/nbsp/beforeShortLastNumber.js @@ -0,0 +1,14 @@ +Typograf.rule({ + name: 'common/nbsp/beforeShortLastNumber', + handler: function(text, settings) { + var re = new RegExp('([' + this._data('lL') + + ']) (?=\\d{1,' + settings.lengthLastNumber + + '}[-+−%\'"' + this._data('rquote') + ']?([.!?…]( [' + + this._data('L') + ']|$)|$))', 'gm'); + + return text.replace(re, '$1\u00A0'); + }, + settings: { + lengthLastNumber: 2 + } +}); diff --git a/src/rules/common/nbsp/beforeShortLastNumber.json b/src/rules/common/nbsp/beforeShortLastNumber.json new file mode 100644 index 00000000..b898e155 --- /dev/null +++ b/src/rules/common/nbsp/beforeShortLastNumber.json @@ -0,0 +1,4 @@ +{ + "en": "Non-breaking space before number (maximum 2 digits) at end of sentence", + "ru": "Нераз. пробел перед числом (не более 2 цифр) в конце предложения" +} diff --git a/src/rules/common/nbsp/beforeShortLastNumber.spec.js b/src/rules/common/nbsp/beforeShortLastNumber.spec.js new file mode 100644 index 00000000..d8520574 --- /dev/null +++ b/src/rules/common/nbsp/beforeShortLastNumber.spec.js @@ -0,0 +1,42 @@ +tests.push(['common/nbsp/beforeShortLastNumber', [ + [ + 'Сегодня я получил 5. И очень рад.', + 'Сегодня я получил\u00A05. И очень рад.', + 'ru' + ], + [ + 'Сегодня я получил 5\nИ дальше продолжаю стих', + 'Сегодня я получил\u00A05\nИ дальше продолжаю стих', + 'ru' + ], + [ + 'Сегодня я получил 5+', + 'Сегодня я получил\u00A05+', + 'ru' + ], + [ + 'или 5-', + 'или\u00A05-', + 'ru' + ], + [ + 'Доллар вырос на 1%.\nДоллар вырос на 2%.', + 'Доллар вырос на\u00A01%.\nДоллар вырос на\u00A02%.', + 'ru' + ], + [ + 'Сегодня диагональ равна 5"', + 'Сегодня диагональ равна\u00A05"', + 'ru' + ], + [ + 'Пять секунд некоторые пишут в виде 5\'', + 'Пять секунд некоторые пишут в виде\u00A05\'', + 'ru' + ], + [ + '"Справка 09"', + '"Справка\u00A009"', + 'ru' + ] +]]); diff --git a/src/rules/common/nbsp/beforeShortLastWord.js b/src/rules/common/nbsp/beforeShortLastWord.js index e818ffec..a0186a89 100644 --- a/src/rules/common/nbsp/beforeShortLastWord.js +++ b/src/rules/common/nbsp/beforeShortLastWord.js @@ -1,7 +1,7 @@ Typograf.rule({ name: 'common/nbsp/beforeShortLastWord', handler: function(text, settings) { - var re = new RegExp('([' + this._data('l') + '\d]) ([' + + var re = new RegExp('([' + this._data('ld') + ']) ([' + this._data('lL') + ']{1,' + settings.lengthLastWord + '}[.!?…])( [' + this._data('L') + ']|$)', 'g'); return text.replace(re, '$1\u00A0$2$3'); diff --git a/test/test.typograph.basic.js b/test/test.typograph.basic.js index b7fa7b45..d29ac5eb 100644 --- a/test/test.typograph.basic.js +++ b/test/test.typograph.basic.js @@ -180,7 +180,7 @@ var ruTests = [ ], [ '"Справка 09"', - '«Справка 09»' + '«Справка\u00A009»' ], [ '"новый тариф*"',