From f3d0021b7aa8cf99ecfdf9d7f3b21824847d0693 Mon Sep 17 00:00:00 2001 From: Denis Seleznev Date: Wed, 23 Sep 2015 08:43:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=BE=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D1=81=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=BD=D0=B5=D1=80=D0=B0=D0=B7=D1=80?= =?UTF-8?q?.=20=D0=BF=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=D0=B0=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=20=D1=87=D0=B8=D1=81=D0=BB=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=86=D0=B5=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20#140?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/en/letter.js | 5 ++- src/data/en/rquote.js | 1 + src/data/ru/letter.js | 5 ++- src/data/ru/rquote.js | 1 + .../common/nbsp/beforeShortLastNumber.js | 14 +++++++ .../common/nbsp/beforeShortLastNumber.json | 4 ++ .../common/nbsp/beforeShortLastNumber.spec.js | 42 +++++++++++++++++++ src/rules/common/nbsp/beforeShortLastWord.js | 2 +- test/test.typograph.basic.js | 2 +- 9 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 src/data/en/rquote.js create mode 100644 src/data/ru/rquote.js create mode 100644 src/rules/common/nbsp/beforeShortLastNumber.js create mode 100644 src/rules/common/nbsp/beforeShortLastNumber.json create mode 100644 src/rules/common/nbsp/beforeShortLastNumber.spec.js 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»' ], [ '"новый тариф*"',