From 27ddcc6664902a31e3950949dfd22ca6611696b9 Mon Sep 17 00:00:00 2001 From: Denis Seleznev Date: Mon, 10 Jul 2017 21:56:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=BD=D0=B5=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=83=20"=20=D0=BD=D0=B0=20"=20=D0=B2?= =?UTF-8?q?=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/html-entities.js | 2 -- src/main.js | 2 ++ src/rules/common/html/quot.js | 7 ++++++ src/rules/common/html/quot.json | 3 +++ src/rules/common/html/quot.spec.js | 6 +++++ src/rules/common/html/stripTags.spec.js | 15 +++++++++--- src/rules/common/punctuation/quote.ru.spec.js | 22 +++++++++++------ test/test.rules.js | 24 ++++++++++++------- 8 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 src/rules/common/html/quot.js create mode 100644 src/rules/common/html/quot.json create mode 100644 src/rules/common/html/quot.spec.js diff --git a/src/html-entities.js b/src/html-entities.js index 82ffe407..90f91ea7 100644 --- a/src/html-entities.js +++ b/src/html-entities.js @@ -288,8 +288,6 @@ Typograf.HtmlEntities = { context.text = context.text.replace(entity.reName, entity.utf); }); } - - context.text = context.text.replace(/"/g, '"'); }, /** * Entities in decimal or hexadecimal form to UTF-8. diff --git a/src/main.js b/src/main.js index 329cff2a..4b7bcad3 100644 --- a/src/main.js +++ b/src/main.js @@ -408,6 +408,8 @@ }, _enableByMask: function(rule, enabled) { var re; + if (!rule) { return; } + if (rule.search(/\*/) !== -1) { re = new RegExp(rule .replace(/\//g, '\\\/') diff --git a/src/rules/common/html/quot.js b/src/rules/common/html/quot.js new file mode 100644 index 00000000..f4a70aed --- /dev/null +++ b/src/rules/common/html/quot.js @@ -0,0 +1,7 @@ +Typograf.addRule({ + name: 'common/html/quot', + queue: 'hide-safe-tags', + handler: function(text) { + return text.replace(/"/g, '"'); + } +}); diff --git a/src/rules/common/html/quot.json b/src/rules/common/html/quot.json new file mode 100644 index 00000000..b6ac9093 --- /dev/null +++ b/src/rules/common/html/quot.json @@ -0,0 +1,3 @@ +{ + "common": "" → \"" +} diff --git a/src/rules/common/html/quot.spec.js b/src/rules/common/html/quot.spec.js new file mode 100644 index 00000000..b37adae7 --- /dev/null +++ b/src/rules/common/html/quot.spec.js @@ -0,0 +1,6 @@ +tests.push(['common/html/quot', [ + [ + '"Огонь затухает, и повелители пепла покидают свои троны"', + '"Огонь затухает, и повелители пепла покидают свои троны"', + ] +]]); diff --git a/src/rules/common/html/stripTags.spec.js b/src/rules/common/html/stripTags.spec.js index 811e86fe..07b03527 100644 --- a/src/rules/common/html/stripTags.spec.js +++ b/src/rules/common/html/stripTags.spec.js @@ -1,5 +1,14 @@ tests.push(['common/html/stripTags', [ - ['123123 12
12312 312 3

asdlalsdpa

', '123123 1212312 312 3asdlalsdpa'], - ['Hello

', 'Hello'] + [ + '

В апреле 2014 года Kadokawa Corporation объявила о намерении перекупить FromSoftware у компании Transcosmos.
\nСделка была завершена 21 мая 2014 года.

', + 'В апреле 2014 года Kadokawa Corporation объявила о намерении перекупить FromSoftware у компании Transcosmos.\nСделка была завершена 21 мая 2014 года.', + ], + [ + 'Hello

', + 'Hello' + ] ]]); diff --git a/src/rules/common/punctuation/quote.ru.spec.js b/src/rules/common/punctuation/quote.ru.spec.js index dffd11a1..e8fe92b3 100644 --- a/src/rules/common/punctuation/quote.ru.spec.js +++ b/src/rules/common/punctuation/quote.ru.spec.js @@ -142,27 +142,35 @@ tests.push([ ], [ 'по произведению Достоевского "Преступление и наказание"в театре Моссовета', - 'по произведению Достоевского «Преступление и наказание"в театре Моссовета' + 'по произведению Достоевского «Преступление и наказание"в театре Моссовета', + { + enableRule: 'common/html/quot' + } ], [ 'Из всей нашей культурной программы самое сильное впечатление на меня произвела постановка "Р.Р.Р." по произведению Достоевского "Преступление и наказание"в театре Моссовета.' + 'Она буквально влюбила меня в театр.\n"Мы напихиваем в детей ненужное барахло". 5 радикальных тезисов Германа Грефа об образовании', - + 'Из всей нашей культурной программы самое сильное впечатление на меня произвела постановка «Р.Р.Р.» по произведению Достоевского «Преступление и наказание"в театре Моссовета.' + - 'Она буквально влюбила меня в театр.\n«Мы напихиваем в детей ненужное барахло». 5 радикальных тезисов Германа Грефа об образовании' + 'Она буквально влюбила меня в театр.\n«Мы напихиваем в детей ненужное барахло». 5 радикальных тезисов Германа Грефа об образовании', + { + enableRule: 'common/html/quot' + } ], [ 'Из всей нашей культурной программы самое сильное впечатление на меня произвела постановка "Р.Р.Р." по произведению Достоевского "Преступление и наказание"в театре Моссовета.' + - 'Она буквально влюбила меня в театр.\n"Мы напихиваем в детей ненужное барахло". 5 радикальных тезисов Германа Грефа об образовании\n' + + 'Она буквально влюбила меня в театр.\n"Мы напихиваем в детей ненужное барахло". 5 радикальных тезисов Германа Грефа об образовании\n' + 'Из всей нашей культурной программы самое сильное впечатление на меня произвела постановка "Р.Р.Р." по произведению Достоевского "Преступление и наказание"в театре Моссовета.' + 'Она буквально влюбила меня в театр.\n"Мы напихиваем в детей ненужное барахло". 5 радикальных тезисов Германа Грефа об образовании', - + 'Из всей нашей культурной программы самое сильное впечатление на меня произвела постановка «Р.Р.Р.» по произведению Достоевского «Преступление и наказание"в театре Моссовета.' + 'Она буквально влюбила меня в театр.\n«Мы напихиваем в детей ненужное барахло». 5 радикальных тезисов Германа Грефа об образовании\n' + 'Из всей нашей культурной программы самое сильное впечатление на меня произвела постановка «Р.Р.Р.» по произведению Достоевского «Преступление и наказание"в театре Моссовета.' + - 'Она буквально влюбила меня в театр.\n«Мы напихиваем в детей ненужное барахло». 5 радикальных тезисов Германа Грефа об образовании' + 'Она буквально влюбила меня в театр.\n«Мы напихиваем в детей ненужное барахло». 5 радикальных тезисов Германа Грефа об образовании', + { + enableRule: 'common/html/quot' + } ] ], {locale: 'ru'} ]); - diff --git a/test/test.rules.js b/test/test.rules.js index 1faf58b6..2c1f8d76 100644 --- a/test/test.rules.js +++ b/test/test.rules.js @@ -43,10 +43,13 @@ describe('rules', function() { const [name, items, props] = elem; it(name, function() { items.forEach(function(item) { - const [before, after] = item; - const itTypograf = new Typograf({disableRule: '*', enableRule: name}); - + const [before, after, testSettings] = item; + const itTypograf = new Typograf({ + disableRule: '*', + enableRule: [].concat(name, testSettings && testSettings.enableRule) + }); const result = itTypograf.execute(before, {locale: getLocale(name, props)}); + assert.equal(result, after, before + ' → ' + after); }); }); @@ -58,15 +61,18 @@ describe('rules, double execute', function() { const [name, items, props] = elem; it(name, function() { items.forEach(function(item) { - const itTypograf = new Typograf({disableRule: '*', enableRule: name}); - const [before, after] = item; - const locale = getLocale(name, props); + const [before, after, testSettings] = item; + const itTypograf = new Typograf({ + disableRule: '*', + enableRule: [].concat(name, testSettings && testSettings.enableRule) + }); + let result = itTypograf.execute(before, {locale: getLocale(name, props)}); - let result = itTypograf.execute(before, {locale: locale}); assert.equal(result, after, before + ' → ' + after); if (!itTypograf._getRule(name).disabled) { - result = itTypograf.execute(result, {locale: locale}); + result = itTypograf.execute(result, {locale: getLocale(name, props)}); + assert.equal(result, after, before + ' → ' + after); } }); @@ -138,7 +144,7 @@ describe('common specific tests', function() { ] } ]; - + tests.forEach(function(t) { it(t.enableRule.toString(), function() { check(t);