Skip to content

Commit

Permalink
Поправил первую кавычку в предложении
Browse files Browse the repository at this point in the history
  • Loading branch information
hcodes committed Jun 8, 2015
1 parent f35f5fa commit cb4df95
Show file tree
Hide file tree
Showing 7 changed files with 109 additions and 81 deletions.
38 changes: 20 additions & 18 deletions dist/typograf.js
Expand Up @@ -111,24 +111,26 @@ Typograf._quot = function(text, settings) {
rquot = settings.rquot,
lquot2 = settings.lquot2,
rquot2 = settings.rquot2,
openingQuotes = '[«„“"]',
closingQuotes = '[»”“"]',
quotes = '[«»„“”"]',
phrase = '[' + letters + ')!?.:;#*,]*?',
reL = new RegExp(openingQuotes + '([…' + letters + '])', 'gi'),
reR = new RegExp('(' + phrase + ')' + closingQuotes + '(' + phrase + ')', 'gi'),
reL = new RegExp('"([…' + letters + '])', 'gi'),
reR = new RegExp('(' + phrase + ')"(' + phrase + ')', 'gi'),
reL1 = new RegExp(rquot2 + '([^' + lquot2 + rquot2 + ']*?)' + rquot2, 'g'),
reR1 = new RegExp(lquot2 + '([^' + lquot2 + rquot2 + ']*?)' + lquot2, 'g'),
reL2 = new RegExp(lquot2, 'g'),
reR2 = new RegExp(rquot2, 'g'),
reQuotes = new RegExp(quotes, 'g'),
reFirstQuote = new RegExp('^(\s)?(' + quotes + ')', 'g'),
reOpeningTag = new RegExp('(^|\\s)' + quotes + '\uDBFF', 'g'),
reClosingTag = new RegExp('\uDBFF' + quotes + '([\s!?.:;#*,]|$)', 'g');

text = text
.replace(reQuotes, '"')
.replace(reL, lquot2 + '$1') // Opening quote
.replace(reR, '$1' + rquot2 + '$2') // Closing quote
.replace(reOpeningTag, '$1' + lquot2 + '\uDBFF')
.replace(reClosingTag, '\uDBFF' + rquot2 + '$1')
.replace(reFirstQuote, '$1' + lquot2)
.replace(new RegExp('(^|\\w|\\s)' + rquot2 + lquot2, 'g'),
'$1' + lquot2 + lquot2); // Fixed for the case »« at the beginning of the text

Expand All @@ -145,7 +147,7 @@ Typograf._quot = function(text, settings) {
.replace(reL1, rquot2 + '$1' + rquot)
.replace(reR1, lquot + '$1' + lquot2);

if(text.search(new RegExp(lquot + '|' + rquot)) === -1) {
if(text.search(lquot) === -1 || text.search(rquot) === -1) {
text = text
.replace(reL2, lquot)
.replace(reR2, rquot);
Expand Down Expand Up @@ -1008,6 +1010,19 @@ Typograf.rule({
}
});

Typograf.rule({
name: 'common/other/repeatWord',
sortIndex: 1200,
func: function(text) {
var re = '([' +
this.letters() +
'\u0301]+) \\1([;:,.?! \n])';

return text.replace(new RegExp(re, 'gi'), '$1$2');
},
disabled: true
});

Typograf.rule({
name: 'common/punctuation/delDoublePunctuation',
sortIndex: 580,
Expand Down Expand Up @@ -1043,19 +1058,6 @@ Typograf.rule({
}
});

Typograf.rule({
name: 'common/other/repeatWord',
sortIndex: 1200,
func: function(text) {
var re = '([' +
this.letters() +
'\u0301]+) \\1([;:,.?! \n])';

return text.replace(new RegExp(re, 'gi'), '$1$2');
},
disabled: true
});

Typograf.rule({
name: 'common/space/afterPunctuation',
sortIndex: 560,
Expand Down
2 changes: 1 addition & 1 deletion dist/typograf.min.js

Large diffs are not rendered by default.

48 changes: 24 additions & 24 deletions dist/typograf.titles.js
@@ -1,4 +1,28 @@
Typograf.prototype.titles = {
"common/html/escape": {
"en": "Escaping HTML",
"ru": "Экранирование HTML"
},
"common/html/mail": {
"en": "Placement of links for e-mail",
"ru": "Расстановка ссылок для эл. почты"
},
"common/html/nbr": {
"en": "Replacement line break on br tag",
"ru": "Замена перевода строки на тег br"
},
"common/html/pbr": {
"en": "Placement of p and br tags",
"ru": "Расстановка тегов p и br"
},
"common/html/stripTags": {
"en": "Removing HTML-tags",
"ru": "Удаление HTML-тегов"
},
"common/html/url": {
"en": "Placement of links",
"ru": "Расстановка ссылок"
},
"common/nbsp/afterNumber": {
"en": "Non-breaking space between number and word",
"ru": "Нераз. пробел между числом и словом"
Expand Down Expand Up @@ -222,29 +246,5 @@ Typograf.prototype.titles = {
"ru/punctuation/quot": {
"en": "Placement of quotation marks",
"ru": "Расстановка кавычек"
},
"common/html/escape": {
"en": "Escaping HTML",
"ru": "Экранирование HTML"
},
"common/html/mail": {
"en": "Placement of links for e-mail",
"ru": "Расстановка ссылок для эл. почты"
},
"common/html/nbr": {
"en": "Replacement line break on br tag",
"ru": "Замена перевода строки на тег br"
},
"common/html/pbr": {
"en": "Placement of p and br tags",
"ru": "Расстановка тегов p и br"
},
"common/html/stripTags": {
"en": "Removing HTML-tags",
"ru": "Удаление HTML-тегов"
},
"common/html/url": {
"en": "Placement of links",
"ru": "Расстановка ссылок"
}
};
48 changes: 24 additions & 24 deletions dist/typograf.titles.json
@@ -1,4 +1,28 @@
{
"common/html/escape": {
"en": "Escaping HTML",
"ru": "Экранирование HTML"
},
"common/html/mail": {
"en": "Placement of links for e-mail",
"ru": "Расстановка ссылок для эл. почты"
},
"common/html/nbr": {
"en": "Replacement line break on br tag",
"ru": "Замена перевода строки на тег br"
},
"common/html/pbr": {
"en": "Placement of p and br tags",
"ru": "Расстановка тегов p и br"
},
"common/html/stripTags": {
"en": "Removing HTML-tags",
"ru": "Удаление HTML-тегов"
},
"common/html/url": {
"en": "Placement of links",
"ru": "Расстановка ссылок"
},
"common/nbsp/afterNumber": {
"en": "Non-breaking space between number and word",
"ru": "Нераз. пробел между числом и словом"
Expand Down Expand Up @@ -222,29 +246,5 @@
"ru/punctuation/quot": {
"en": "Placement of quotation marks",
"ru": "Расстановка кавычек"
},
"common/html/escape": {
"en": "Escaping HTML",
"ru": "Экранирование HTML"
},
"common/html/mail": {
"en": "Placement of links for e-mail",
"ru": "Расстановка ссылок для эл. почты"
},
"common/html/nbr": {
"en": "Replacement line break on br tag",
"ru": "Замена перевода строки на тег br"
},
"common/html/pbr": {
"en": "Placement of p and br tags",
"ru": "Расстановка тегов p и br"
},
"common/html/stripTags": {
"en": "Removing HTML-tags",
"ru": "Удаление HTML-тегов"
},
"common/html/url": {
"en": "Placement of links",
"ru": "Расстановка ссылок"
}
}
12 changes: 7 additions & 5 deletions src/main.js
Expand Up @@ -95,24 +95,26 @@ Typograf._quot = function(text, settings) {
rquot = settings.rquot,
lquot2 = settings.lquot2,
rquot2 = settings.rquot2,
openingQuotes = '[«„“"]',
closingQuotes = '[»”“"]',
quotes = '[«»„“”"]',
phrase = '[' + letters + ')!?.:;#*,]*?',
reL = new RegExp(openingQuotes + '([…' + letters + '])', 'gi'),
reR = new RegExp('(' + phrase + ')' + closingQuotes + '(' + phrase + ')', 'gi'),
reL = new RegExp('"([…' + letters + '])', 'gi'),
reR = new RegExp('(' + phrase + ')"(' + phrase + ')', 'gi'),
reL1 = new RegExp(rquot2 + '([^' + lquot2 + rquot2 + ']*?)' + rquot2, 'g'),
reR1 = new RegExp(lquot2 + '([^' + lquot2 + rquot2 + ']*?)' + lquot2, 'g'),
reL2 = new RegExp(lquot2, 'g'),
reR2 = new RegExp(rquot2, 'g'),
reQuotes = new RegExp(quotes, 'g'),
reFirstQuote = new RegExp('^(\s)?(' + quotes + ')', 'g'),
reOpeningTag = new RegExp('(^|\\s)' + quotes + '\uDBFF', 'g'),
reClosingTag = new RegExp('\uDBFF' + quotes + '([\s!?.:;#*,]|$)', 'g');

text = text
.replace(reQuotes, '"')
.replace(reL, lquot2 + '$1') // Opening quote
.replace(reR, '$1' + rquot2 + '$2') // Closing quote
.replace(reOpeningTag, '$1' + lquot2 + '\uDBFF')
.replace(reClosingTag, '\uDBFF' + rquot2 + '$1')
.replace(reFirstQuote, '$1' + lquot2)
.replace(new RegExp('(^|\\w|\\s)' + rquot2 + lquot2, 'g'),
'$1' + lquot2 + lquot2); // Fixed for the case »« at the beginning of the text

Expand All @@ -129,7 +131,7 @@ Typograf._quot = function(text, settings) {
.replace(reL1, rquot2 + '$1' + rquot)
.replace(reR1, lquot + '$1' + lquot2);

if(text.search(new RegExp(lquot + '|' + rquot)) === -1) {
if(text.search(lquot) === -1 || text.search(rquot) === -1) {
text = text
.replace(reL2, lquot)
.replace(reR2, rquot);
Expand Down
12 changes: 12 additions & 0 deletions src/rules/ru/punctuation/quot.spec.js
Expand Up @@ -86,5 +86,17 @@ tests.push(['ru/punctuation/quot', [
[
'"<i>Екатеринбург лучше Стамбула, однозначно, а\u00A0люди здесь добрее, чем в\u00A0Москве и\u00A0Питере"</i>, \u00A0- рассказывает он\u00A0со\u00A0знанием дела: во\u00A0время подготовки книги об\u00A0уральской столице Аслиддин прожил по\u00A0две недели и\u00A0в\u00A0Белокаменной, и\u00A0в\u00A0Северной Пальмире. \u00A0"<i>Все оплачивают спонсоры\u00A0-; бизнесмены из\u00A0Таджикистана, которые заинтересовались моими работами. Они-то и\u00A0договаривались с\u00A0издательством"</i>, \u00A0-; объясняет\u00A0строитель-историк.\u00A0Из\u00A0пятисот отпечатанных экземпляров автору достанется 15. Все остальные пойдут на\u00A0магазинные прилавки и\u00A0в\u00A0Центральную библиотеку Таджикистана, а\u00A0также самим спонсорам. Размеры гонорара, который дойдет до\u00A0Аслиддина, не\u00A0позволят уволиться со\u00A0стройки. \u00A0<i>"Да я\u00A0рад уже тому, что мои книги свет увидели, их\u00A0читают, отзывы делают", \u00A0</i>- рассказывает писатель.',
'«<i>Екатеринбург лучше Стамбула, однозначно, а\u00A0люди здесь добрее, чем в\u00A0Москве и\u00A0Питере»</i>, \u00A0- рассказывает он\u00A0со\u00A0знанием дела: во\u00A0время подготовки книги об\u00A0уральской столице Аслиддин прожил по\u00A0две недели и\u00A0в\u00A0Белокаменной, и\u00A0в\u00A0Северной Пальмире. \u00A0«<i>Все оплачивают спонсоры\u00A0-; бизнесмены из\u00A0Таджикистана, которые заинтересовались моими работами. Они-то и\u00A0договаривались с\u00A0издательством»</i>, \u00A0-; объясняет\u00A0строитель-историк.\u00A0Из\u00A0пятисот отпечатанных экземпляров автору достанется 15. Все остальные пойдут на\u00A0магазинные прилавки и\u00A0в\u00A0Центральную библиотеку Таджикистана, а\u00A0также самим спонсорам. Размеры гонорара, который дойдет до\u00A0Аслиддина, не\u00A0позволят уволиться со\u00A0стройки. \u00A0<i>«Да я\u00A0рад уже тому, что мои книги свет увидели, их\u00A0читают, отзывы делают», \u00A0</i>- рассказывает писатель.'
],
[
'"',
'«'
],
[
'"Газета',
'«Газета'
],
[
'" Газета',
'« Газета'
]
]]);
30 changes: 21 additions & 9 deletions test/rules.js
Expand Up @@ -126,6 +126,15 @@ tests.push(['common/number/times', [
['Пример: 30x3=90', 'Пример: 30×3=90']
]]);

tests.push(['common/other/repeatWord', [
['Я пошел домой.', 'Я пошел домой.', 'ru'],
['Я пошел пошел домой.', 'Я пошел домой.', 'ru'],
['Я пошел пошел пошел домой домой.', 'Я пошел пошел домой.', 'ru'],
['Я пошел пошел пошел домой домой.', 'Я пошел пошел домой.', 'ru'],
['Пью молоко\u0301 молоко\u0301.', 'Пью молоко\u0301.', 'ru'],
['Hello world world!', 'Hello world!', 'en']
]]);

/* jshint maxlen:1000 */
tests.push(['common/punctuation/delDoublePunctuation', [
['У меня была только синяя краска;; но,, несмотря на это,, я затеял нарисовать охоту.', 'У меня была только синяя краска; но, несмотря на это, я затеял нарисовать охоту.'],
Expand All @@ -151,15 +160,6 @@ tests.push(['common/punctuation/hellip', [
['.....', '.....']
]]);

tests.push(['common/other/repeatWord', [
['Я пошел домой.', 'Я пошел домой.', 'ru'],
['Я пошел пошел домой.', 'Я пошел домой.', 'ru'],
['Я пошел пошел пошел домой домой.', 'Я пошел пошел домой.', 'ru'],
['Я пошел пошел пошел домой домой.', 'Я пошел пошел домой.', 'ru'],
['Пью молоко\u0301 молоко\u0301.', 'Пью молоко\u0301.', 'ru'],
['Hello world world!', 'Hello world!', 'en']
]]);

tests.push(['common/space/afterPunctuation', [
['Солнце садилось за горизонт,и поднялся ветер. Вот.', 'Солнце садилось за горизонт, и поднялся ветер. Вот.'],
['Солнце садилось за горизонт,и поднялся ветер!Вот.', 'Солнце садилось за горизонт, и поднялся ветер! Вот.'],
Expand Down Expand Up @@ -612,5 +612,17 @@ tests.push(['ru/punctuation/quot', [
[
'"<i>Екатеринбург лучше Стамбула, однозначно, а\u00A0люди здесь добрее, чем в\u00A0Москве и\u00A0Питере"</i>, \u00A0- рассказывает он\u00A0со\u00A0знанием дела: во\u00A0время подготовки книги об\u00A0уральской столице Аслиддин прожил по\u00A0две недели и\u00A0в\u00A0Белокаменной, и\u00A0в\u00A0Северной Пальмире. \u00A0"<i>Все оплачивают спонсоры\u00A0-; бизнесмены из\u00A0Таджикистана, которые заинтересовались моими работами. Они-то и\u00A0договаривались с\u00A0издательством"</i>, \u00A0-; объясняет\u00A0строитель-историк.\u00A0Из\u00A0пятисот отпечатанных экземпляров автору достанется 15. Все остальные пойдут на\u00A0магазинные прилавки и\u00A0в\u00A0Центральную библиотеку Таджикистана, а\u00A0также самим спонсорам. Размеры гонорара, который дойдет до\u00A0Аслиддина, не\u00A0позволят уволиться со\u00A0стройки. \u00A0<i>"Да я\u00A0рад уже тому, что мои книги свет увидели, их\u00A0читают, отзывы делают", \u00A0</i>- рассказывает писатель.',
'«<i>Екатеринбург лучше Стамбула, однозначно, а\u00A0люди здесь добрее, чем в\u00A0Москве и\u00A0Питере»</i>, \u00A0- рассказывает он\u00A0со\u00A0знанием дела: во\u00A0время подготовки книги об\u00A0уральской столице Аслиддин прожил по\u00A0две недели и\u00A0в\u00A0Белокаменной, и\u00A0в\u00A0Северной Пальмире. \u00A0«<i>Все оплачивают спонсоры\u00A0-; бизнесмены из\u00A0Таджикистана, которые заинтересовались моими работами. Они-то и\u00A0договаривались с\u00A0издательством»</i>, \u00A0-; объясняет\u00A0строитель-историк.\u00A0Из\u00A0пятисот отпечатанных экземпляров автору достанется 15. Все остальные пойдут на\u00A0магазинные прилавки и\u00A0в\u00A0Центральную библиотеку Таджикистана, а\u00A0также самим спонсорам. Размеры гонорара, который дойдет до\u00A0Аслиддина, не\u00A0позволят уволиться со\u00A0стройки. \u00A0<i>«Да я\u00A0рад уже тому, что мои книги свет увидели, их\u00A0читают, отзывы делают», \u00A0</i>- рассказывает писатель.'
],
[
'"',
'«'
],
[
'"Газета',
'«Газета'
],
[
'" Газета',
'« Газета'
]
]]);

0 comments on commit cb4df95

Please sign in to comment.