typograf 7.4.4 → 7.6.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.
- package/CHANGELOG.md +15 -0
- package/LICENSE.md +1 -1
- package/dist/data/en-GB.d.ts +1 -0
- package/dist/data/it.d.ts +1 -0
- package/dist/htmlEntities/index.d.ts +7 -4
- package/dist/rules/common/nbsp/afterShortWord.d.ts +0 -1
- package/dist/rules/common/nbsp/afterShortWordByList.d.ts +4 -0
- package/dist/rules/common/nbsp/afterShortWordByList.test.d.ts +1 -0
- package/dist/typograf.all.js +64 -41
- package/dist/typograf.all.min.js +1 -1
- package/dist/typograf.es.mjs +63 -40
- package/dist/typograf.js +63 -40
- package/dist/typograf.min.js +1 -1
- package/dist/typograf.titles.js +1 -1
- package/dist/typograf.titles.json +1 -1
- package/dist/version.d.ts +1 -1
- package/docs/RULES.en-US.md +94 -93
- package/docs/RULES.ru.md +94 -93
- package/docs/RULES_SORTED.en-US.md +41 -40
- package/docs/RULES_SORTED.ru.md +41 -40
- package/docs/api_attrs.md +1 -1
- package/docs/api_entities.md +5 -5
- package/docs/api_fly.md +1 -1
- package/docs/api_localization.md +3 -3
- package/docs/api_nbsp.md +1 -1
- package/docs/api_optalign.md +1 -1
- package/docs/api_parts.md +1 -1
- package/docs/api_rules.md +2 -2
- package/docs/using.md +12 -3
- package/package.json +17 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
# v7.6.0
|
|
4
|
+
Добавлен новый тип HTML-сущностей `js`. У Типографа появилась возможность корректно обрабатывать строки с `\uXXXX` в коде JavaScript и TypeScript.
|
|
5
|
+
|
|
6
|
+
```js
|
|
7
|
+
const tp = new Typograf({ locale: 'ru', htmlEntity: { type: 'js', onlyInvisible: true }});
|
|
8
|
+
console.log(tp.execute('1м²')); // '1\\u00a0м²'
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
# v7.5.0
|
|
12
|
+
Добавлено правило `afterShortWordByList` для расстановки неразрывного пробела после союзов, артиклей, предлогов и пр.
|
|
13
|
+
|
|
14
|
+
Поддержка в локалях: `ru`, `it`, `en-GB` и `en-US`.
|
|
15
|
+
|
|
16
|
+
Удалена настройка `useShortWordList` из правила`afterShortWord` в пользу нового правила.
|
|
17
|
+
|
|
3
18
|
# v7.4.4
|
|
4
19
|
- Фикс минификации сборки.
|
|
5
20
|
|
package/LICENSE.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
## Лицензия
|
|
2
2
|
The MIT License (MIT)
|
|
3
3
|
|
|
4
|
-
© 2014–
|
|
4
|
+
© 2014–2025 Денис Селезнёв, <hcodes@yandex.ru>
|
|
5
5
|
|
|
6
6
|
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
7
7
|
|
package/dist/data/en-GB.d.ts
CHANGED
package/dist/data/it.d.ts
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import type { TypografContext } from '../main';
|
|
2
2
|
export type Entity = [string, number];
|
|
3
|
-
export type TypografHtmlEntityType = 'name' | 'digit' | 'default';
|
|
3
|
+
export type TypografHtmlEntityType = 'name' | 'digit' | 'js' | 'default';
|
|
4
4
|
interface HtmlEntityInfo {
|
|
5
5
|
name: string;
|
|
6
|
-
nameEntity: string;
|
|
7
|
-
digitEntity: string;
|
|
8
6
|
utf: string;
|
|
9
|
-
reName: RegExp;
|
|
10
7
|
reUtf: RegExp;
|
|
8
|
+
type: {
|
|
9
|
+
name: string;
|
|
10
|
+
digit: string;
|
|
11
|
+
js: string;
|
|
12
|
+
};
|
|
11
13
|
}
|
|
12
14
|
declare class HtmlEntities {
|
|
13
15
|
private entities;
|
|
14
16
|
private invisibleEntities;
|
|
15
17
|
private entitiesByName;
|
|
16
18
|
private entitiesByNameEntity;
|
|
19
|
+
private entitiesByJsEntity;
|
|
17
20
|
private entitiesByDigitEntity;
|
|
18
21
|
private entitiesByUtf;
|
|
19
22
|
constructor();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/typograf.all.js
CHANGED
|
@@ -312,11 +312,13 @@
|
|
|
312
312
|
this.entitiesByName = {};
|
|
313
313
|
this.entitiesByNameEntity = {};
|
|
314
314
|
this.entitiesByDigitEntity = {};
|
|
315
|
+
this.entitiesByJsEntity = {};
|
|
315
316
|
this.entitiesByUtf = {};
|
|
316
317
|
this.entities.forEach(function (entity) {
|
|
317
318
|
_this.entitiesByName[entity.name] = entity;
|
|
318
|
-
_this.entitiesByNameEntity[entity.
|
|
319
|
-
_this.entitiesByDigitEntity[entity.
|
|
319
|
+
_this.entitiesByNameEntity[entity.type.name] = entity;
|
|
320
|
+
_this.entitiesByDigitEntity[entity.type.digit] = entity;
|
|
321
|
+
_this.entitiesByJsEntity[entity.type.js] = entity;
|
|
320
322
|
_this.entitiesByUtf[entity.utf] = entity;
|
|
321
323
|
});
|
|
322
324
|
this.invisibleEntities = this.prepareEntities(invisibleEntities);
|
|
@@ -326,9 +328,11 @@
|
|
|
326
328
|
*/
|
|
327
329
|
HtmlEntities.prototype.toUtf = function (context) {
|
|
328
330
|
var _this = this;
|
|
331
|
+
//  
|
|
329
332
|
if (context.text.search(/&#/) !== -1) {
|
|
330
333
|
context.text = this.decHexToUtf(context.text);
|
|
331
334
|
}
|
|
335
|
+
//
|
|
332
336
|
if (context.text.search(/&[a-z]/i) !== -1) {
|
|
333
337
|
// 2 - min length of entity without & and ;. Example: ⅅ
|
|
334
338
|
// 31 - max length of entity without & and ;. Example: ∳
|
|
@@ -337,6 +341,13 @@
|
|
|
337
341
|
return entity ? entity.utf : key;
|
|
338
342
|
});
|
|
339
343
|
}
|
|
344
|
+
// \u00a0
|
|
345
|
+
if (context.text.search(/\\u[\da-f]/i) !== -1) {
|
|
346
|
+
context.text = context.text.replace(/\\u[\da-f]{4};/gi, function (key) {
|
|
347
|
+
var entity = _this.entitiesByJsEntity[key.toLowerCase()];
|
|
348
|
+
return entity ? entity.utf : key;
|
|
349
|
+
});
|
|
350
|
+
}
|
|
340
351
|
};
|
|
341
352
|
/**
|
|
342
353
|
* Entities in decimal or hexadecimal form to UTF-8.
|
|
@@ -356,38 +367,34 @@
|
|
|
356
367
|
HtmlEntities.prototype.restore = function (context) {
|
|
357
368
|
var params = context.prefs.htmlEntity;
|
|
358
369
|
var type = params.type;
|
|
370
|
+
if (type === 'default') {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
359
373
|
var entities = this.entities;
|
|
360
|
-
if (
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
entities = entities.concat(this.prepareListParam(params.list));
|
|
368
|
-
}
|
|
374
|
+
if (params.onlyInvisible || params.list) {
|
|
375
|
+
entities = [];
|
|
376
|
+
if (params.onlyInvisible) {
|
|
377
|
+
entities = entities.concat(this.invisibleEntities);
|
|
378
|
+
}
|
|
379
|
+
if (params.list) {
|
|
380
|
+
entities = entities.concat(this.prepareListParam(params.list));
|
|
369
381
|
}
|
|
370
|
-
var entityType = type === 'name' ? 'nameEntity' : 'digitEntity';
|
|
371
|
-
context.text = this.restoreEntitiesByIndex(context.text, entityType, entities);
|
|
372
382
|
}
|
|
383
|
+
context.text = this.restoreEntitiesByIndex(context.text, type, entities);
|
|
373
384
|
};
|
|
374
385
|
/**
|
|
375
386
|
* Get a entity by utf using the type.
|
|
376
387
|
*/
|
|
377
388
|
HtmlEntities.prototype.getByUtf = function (symbol, type) {
|
|
378
|
-
var result;
|
|
379
389
|
switch (type) {
|
|
380
390
|
case 'digit':
|
|
381
|
-
|
|
382
|
-
break;
|
|
391
|
+
return this.entitiesByDigitEntity[symbol];
|
|
383
392
|
case 'name':
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
result = symbol;
|
|
388
|
-
break;
|
|
393
|
+
return this.entitiesByNameEntity[symbol];
|
|
394
|
+
case 'js':
|
|
395
|
+
return this.entitiesByJsEntity[symbol];
|
|
389
396
|
}
|
|
390
|
-
return
|
|
397
|
+
return symbol;
|
|
391
398
|
};
|
|
392
399
|
HtmlEntities.prototype.prepareEntities = function (entities) {
|
|
393
400
|
var result = [];
|
|
@@ -396,11 +403,13 @@
|
|
|
396
403
|
var utf = String.fromCharCode(digit);
|
|
397
404
|
result.push({
|
|
398
405
|
name: name,
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
406
|
+
utf: utf, // \u00a0
|
|
407
|
+
reUtf: new RegExp(utf, 'g'),
|
|
408
|
+
type: {
|
|
409
|
+
name: '&' + name + ';', //
|
|
410
|
+
digit: '&#' + digit + ';', //  
|
|
411
|
+
js: '\\u' + ('0000' + digit.toString(16)).slice(-4), // \u00a0
|
|
412
|
+
},
|
|
404
413
|
});
|
|
405
414
|
});
|
|
406
415
|
return result;
|
|
@@ -418,7 +427,7 @@
|
|
|
418
427
|
};
|
|
419
428
|
HtmlEntities.prototype.restoreEntitiesByIndex = function (text, type, entities) {
|
|
420
429
|
entities.forEach(function (entity) {
|
|
421
|
-
text = text.replace(entity.reUtf, entity[type]);
|
|
430
|
+
text = text.replace(entity.reUtf, entity.type[type]);
|
|
422
431
|
});
|
|
423
432
|
return text;
|
|
424
433
|
};
|
|
@@ -806,7 +815,7 @@
|
|
|
806
815
|
return preparedRule;
|
|
807
816
|
}
|
|
808
817
|
|
|
809
|
-
var PACKAGE_VERSION = '7.
|
|
818
|
+
var PACKAGE_VERSION = '7.6.0';
|
|
810
819
|
|
|
811
820
|
function prepareHtmlEntity(htmlEntity) {
|
|
812
821
|
var result = {
|
|
@@ -1213,7 +1222,8 @@
|
|
|
1213
1222
|
'en-GB/quote': {
|
|
1214
1223
|
left: '‘“',
|
|
1215
1224
|
right: '’”',
|
|
1216
|
-
}
|
|
1225
|
+
},
|
|
1226
|
+
'en-GB/shortWord': 'a|an|and|as|at|bar|but|by|for|if|in|nor|not|of|off|on|or|out|per|pro|so|the|to|up|via|yet',
|
|
1217
1227
|
};
|
|
1218
1228
|
|
|
1219
1229
|
var enUS = {
|
|
@@ -1287,7 +1297,8 @@
|
|
|
1287
1297
|
'it/quote': {
|
|
1288
1298
|
left: '«“',
|
|
1289
1299
|
right: '»”',
|
|
1290
|
-
}
|
|
1300
|
+
},
|
|
1301
|
+
'it/shortWord': 'a|da|di|in|la|il|lo|e|o|se|su|che|come|ma|è|ho|ha|sa',
|
|
1291
1302
|
};
|
|
1292
1303
|
|
|
1293
1304
|
var lv = {
|
|
@@ -1346,7 +1357,7 @@
|
|
|
1346
1357
|
removeDuplicateQuotes: true,
|
|
1347
1358
|
},
|
|
1348
1359
|
'ru/shortMonth': 'янв|фев|мар|апр|ма[ейя]|июн|июл|авг|сен|окт|ноя|дек',
|
|
1349
|
-
'ru/shortWord': '
|
|
1360
|
+
'ru/shortWord': 'а|без|в|во|если|да|до|для|за|и|или|из|к|ко|как|ли|на|но|не|ни|о|об|обо|от|по|про|при|под|с|со|то|у',
|
|
1350
1361
|
'ru/weekday': 'понедельник|вторник|среда|четверг|пятница|суббота|воскресенье',
|
|
1351
1362
|
};
|
|
1352
1363
|
|
|
@@ -1643,14 +1654,11 @@
|
|
|
1643
1654
|
var afterShortWordRule = {
|
|
1644
1655
|
name: 'common/nbsp/afterShortWord',
|
|
1645
1656
|
handler: function (text, settings, context) {
|
|
1646
|
-
var lengthShortWord = settings.lengthShortWord
|
|
1657
|
+
var lengthShortWord = settings.lengthShortWord;
|
|
1647
1658
|
var quote = getData('common/quote');
|
|
1648
1659
|
var char = context.getData('char');
|
|
1649
|
-
var shortWord = context.getData('shortWord');
|
|
1650
1660
|
var before = ' \u00A0(' + privateLabel + quote;
|
|
1651
|
-
var subStr =
|
|
1652
|
-
? '(^|[' + before + '])(' + shortWord + ') '
|
|
1653
|
-
: '(^|[' + before + '])([' + char + ']{1,' + lengthShortWord + '}) ';
|
|
1661
|
+
var subStr = '(^|[' + before + '])([' + char + ']{1,' + lengthShortWord + '}) ';
|
|
1654
1662
|
var newSubStr = '$1$2\u00A0';
|
|
1655
1663
|
var re = new RegExp(subStr, 'gim');
|
|
1656
1664
|
return text
|
|
@@ -1659,7 +1667,21 @@
|
|
|
1659
1667
|
},
|
|
1660
1668
|
settings: {
|
|
1661
1669
|
lengthShortWord: 2,
|
|
1662
|
-
|
|
1670
|
+
},
|
|
1671
|
+
};
|
|
1672
|
+
|
|
1673
|
+
var afterShortWordByListRule = {
|
|
1674
|
+
name: 'common/nbsp/afterShortWordByList',
|
|
1675
|
+
handler: function (text, _, context) {
|
|
1676
|
+
var quote = getData('common/quote');
|
|
1677
|
+
var shortWord = context.getData('shortWord');
|
|
1678
|
+
var before = ' \u00A0(' + privateLabel + quote;
|
|
1679
|
+
var subStr = '(^|[' + before + '])(' + shortWord + ') ';
|
|
1680
|
+
var newSubStr = '$1$2\u00A0';
|
|
1681
|
+
var re = new RegExp(subStr, 'gim');
|
|
1682
|
+
return text
|
|
1683
|
+
.replace(re, newSubStr)
|
|
1684
|
+
.replace(re, newSubStr);
|
|
1663
1685
|
},
|
|
1664
1686
|
};
|
|
1665
1687
|
|
|
@@ -1729,6 +1751,7 @@
|
|
|
1729
1751
|
afterParagraphMarkRule,
|
|
1730
1752
|
afterSectionMarkRule,
|
|
1731
1753
|
afterShortWordRule,
|
|
1754
|
+
afterShortWordByListRule,
|
|
1732
1755
|
beforeShortLastNumberRule,
|
|
1733
1756
|
beforeShortLastWordRule,
|
|
1734
1757
|
dpiRule,
|
|
@@ -1817,9 +1840,9 @@
|
|
|
1817
1840
|
handler: function (text, settings, context) {
|
|
1818
1841
|
var quote = getData('common/quote');
|
|
1819
1842
|
var char = context.getData('char');
|
|
1820
|
-
var punc = '[;:,.?! \n' + quote + ']';
|
|
1843
|
+
var punc = '[;:,.?! \u00a0\n' + quote + ']';
|
|
1821
1844
|
var re = new RegExp('(' + punc + '|^)' +
|
|
1822
|
-
'([' + char + ']{' + settings.min + ',}) ' +
|
|
1845
|
+
'([' + char + ']{' + settings.min + ',})[ \u00a0]' +
|
|
1823
1846
|
'\\2(' + punc + '|$)', 'gi');
|
|
1824
1847
|
return text.replace(re, '$1$2$3');
|
|
1825
1848
|
},
|
|
@@ -3296,7 +3319,7 @@
|
|
|
3296
3319
|
switchingKeyboardLayoutRule,
|
|
3297
3320
|
]);
|
|
3298
3321
|
|
|
3299
|
-
var titles = {"common/html/e-mail":{"en-US":"Placement of links for e-mail","ru":"Расстановка ссылок для эл. почты"},"common/html/escape":{"en-US":"Escaping HTML","ru":"Экранирование HTML"},"common/html/nbr":{"en-US":"Replacement line break on <br/>","ru":"Замена перевода строки на <br/>"},"common/html/p":{"en-US":"Placement of paragraph","ru":"Расстановка абзацев"},"common/html/processingAttrs":{"en-US":"Processing HTML attributes","ru":"Типографирование HTML-атрибутов"},"common/html/quot":{"common":"" → \""},"common/html/stripTags":{"en-US":"Removing HTML-tags","ru":"Удаление HTML-тегов"},"common/html/url":{"en-US":"Placement of links","ru":"Расстановка ссылок"},"common/nbsp/afterNumber":{"en-US":"Non-breaking space between number and word","ru":"Нераз. пробел между числом и словом"},"common/nbsp/afterParagraphMark":{"en-US":"Non-breaking space after ¶","ru":"Нераз. пробел после ¶"},"common/nbsp/afterSectionMark":{"en-US":"Non-breaking space after §","ru":"Нераз. узкий пробел после §"},"common/nbsp/afterShortWord":{"en-US":"Non-breaking space after short word","ru":"Нераз. пробел после короткого слова"},"common/nbsp/beforeShortLastNumber":{"en-US":"Non-breaking space before number (maximum 2 digits) at end of sentence","ru":"Нераз. пробел перед числом (не более 2 цифр) в конце предложения"},"common/nbsp/beforeShortLastWord":{"en-US":"Non-breaking space before last short word in sentence","ru":"Нераз. пробел перед последним коротким словом в предложении"},"common/nbsp/dpi":{"en-US":"Non-breaking space before lpi and dpi","ru":"Нераз. пробел перед lpi и dpi"},"common/nbsp/nowrap":{"en-US":"Replace non-breaking space to normal space in tags nowrap and nobr","ru":"Заменять нераз. пробел на обычный пробел в тегах nowrap и nobr"},"common/nbsp/replaceNbsp":{"en-US":"Replacing non-breaking space on normal before text correction","ru":"Замена неразрывного пробела на обычный перед типографированием"},"common/number/digitGrouping":{"en-US":"Divide into groups numbers with many digits","ru":"Разбивать длинные числа по разрядам"},"common/number/fraction":{"common":"1/2 → ½, 1/4 → ¼, 3/4 → ¾"},"common/number/mathSigns":{"common":"!= → ≠, <= → ≤, >= → ≥, ~= → ≅, +- → ±"},"common/number/times":{"common":"x → × (10 x 5 → 10×5)"},"common/other/delBOM":{"en-US":"Delete character BOM (Byte Order Mark)","ru":"Удаление символа BOM (Byte Order Mark)"},"common/other/repeatWord":{"en-US":"Removing repeat words","ru":"Удаление повтора слова"},"common/punctuation/apostrophe":{"en-US":"Placement of correct apostrophe","ru":"Расстановка правильного апострофа"},"common/punctuation/delDoublePunctuation":{"en-US":"Removing double punctuation","ru":"Удаление двойной пунктуации"},"common/punctuation/hellip":{"en-US":"Replacement of three points by ellipsis","ru":"Замена трёх точек на многоточие"},"common/punctuation/quote":{"en-US":"Placement of quotation marks in texts","ru":"Расстановка кавычек правильного вида"},"common/punctuation/quoteLink":{"en-US":"Removal quotes outside a link","ru":"Вынос кавычек за пределы ссылки"},"common/space/afterColon":{"en-US":"space after colon","ru":"Пробел после двоеточия"},"common/space/afterComma":{"en-US":"space after comma","ru":"Пробел после запятой"},"common/space/afterExclamationMark":{"en-US":"space after exclamation mark","ru":"Пробел после знака восклицания"},"common/space/afterQuestionMark":{"en-US":"space after question mark","ru":"Пробел после знака вопроса"},"common/space/afterSemicolon":{"en-US":"space after semicolon","ru":"Пробел после точки с запятой"},"common/space/beforeBracket":{"en-US":"Space before opening bracket","ru":"Пробел перед открывающей скобкой"},"common/space/bracket":{"en-US":"Remove extra spaces after opening and before closing bracket","ru":"Удаление лишних пробелов после открывающей и перед закрывающей скобкой"},"common/space/delBeforeDot":{"en-US":"Remove space before dot","ru":"Удаление пробела перед точкой"},"common/space/delBeforePercent":{"en-US":"Remove space before %, ‰ and ‱","ru":"Удаление пробела перед %, ‰ и ‱"},"common/space/delBeforePunctuation":{"en-US":"Remove spaces before punctuation","ru":"Удаление пробелов перед знаками пунктуации"},"common/space/delBetweenExclamationMarks":{"en-US":"Remove spaces before exclamation marks","ru":"Удаление пробелов между знаками восклицания"},"common/space/delLeadingBlanks":{"en-US":"Remove spaces at start of line","ru":"Удаление пробелов в начале строки"},"common/space/delRepeatN":{"en-US":"Remove duplicate line breaks","ru":"Удаление повторяющихся переносов строки"},"common/space/delRepeatSpace":{"en-US":"Removing duplicate spaces between characters","ru":"Удаление повторяющихся пробелов между символами"},"common/space/delTrailingBlanks":{"en-US":"Remove spaces at end of line","ru":"Удаление пробелов в конце строки"},"common/space/insertFinalNewline":{"en-US":"Insert final newline","ru":"Вставить в конце текста перевод строки"},"common/space/replaceTab":{"en-US":"Replacement of tab to 4 spaces","ru":"Замена таба на 4 пробела"},"common/space/squareBracket":{"en-US":"Remove extra spaces after opening and before closing square bracket","ru":"Удаление лишних пробелов после открывающей и перед закрывающей квадратной скобкой"},"common/space/trimLeft":{"en-US":"Remove spaces and line breaks in beginning of text","ru":"Удаление пробелов и переносов строк в начале текста"},"common/space/trimRight":{"en-US":"Remove spaces and line breaks at end of text","ru":"Удаление пробелов и переносов строк в конце текста"},"common/symbols/arrow":{"common":"-> → →, <- → ←"},"common/symbols/cf":{"en-US":"Adding ° to C and F","ru":"Добавление ° к C и F"},"common/symbols/copy":{"common":"(c) → ©, (tm) → ™, (r) → ®"},"en-US/dash/main":{"en-US":"Replace hyphens surrounded by spaces with an em-dash","ru":"Замена дефиса на длинное тире"},"ru/dash/centuries":{"en-US":"Hyphen to dash in centuries","ru":"Замена дефиса на тире в веках"},"ru/dash/daysMonth":{"en-US":"Dash between days of one month","ru":"Тире между днями одного месяца"},"ru/dash/de":{"en-US":"Hyphen before “де”","ru":"Дефис перед «де»"},"ru/dash/decade":{"en-US":"Dash in decade","ru":"Тире в десятилетиях, 80—90-е гг."},"ru/dash/directSpeech":{"en-US":"Dash in direct speech","ru":"Тире в прямой речи"},"ru/dash/izpod":{"en-US":"Hyphen between “из-под”","ru":"Дефис между «из-под»"},"ru/dash/izza":{"en-US":"Hyphen between “из-за”","ru":"Дефис между «из-за»"},"ru/dash/ka":{"en-US":"Hyphen before “ка” and “кась”","ru":"Дефис перед «ка» и «кась»"},"ru/dash/kakto":{"en-US":"Hyphen for “как то”","ru":"Дефис для «как то»"},"ru/dash/koe":{"en-US":"Hyphen after “кое” and “кой”","ru":"Дефис после «кое» и «кой»"},"ru/dash/main":{"en-US":"Replacement hyphen with dash","ru":"Замена дефиса на тире"},"ru/dash/month":{"en-US":"Dash between months","ru":"Тире между месяцами"},"ru/dash/surname":{"en-US":"Acronyms with a dash","ru":"Сокращения с помощью тире"},"ru/dash/taki":{"en-US":"Hyphen between “верно-таки” and etc.","ru":"Дефис между «верно-таки» и т. д."},"ru/dash/time":{"en-US":"Dash in time intervals","ru":"Тире в интервалах времени"},"ru/dash/to":{"en-US":"Hyphen before “то”, “либо”, “нибудь”","ru":"Дефис перед «то», «либо», «нибудь»"},"ru/dash/weekday":{"en-US":"Dash between the days of the week","ru":"Тире между днями недели"},"ru/dash/years":{"en-US":"Hyphen to dash in years","ru":"Замена дефиса на тире в годах"},"ru/date/fromISO":{"en-US":"Converting dates YYYY-MM-DD type DD.MM.YYYY","ru":"Преобразование дат YYYY-MM-DD к виду DD.MM.YYYY"},"ru/date/weekday":{"common":"2 Мая, Понедельник → 2 мая, понедельник"},"ru/money/currency":{"en-US":"Currency symbol ($, €, ¥, Ұ, £ and ₤) after the number, $100 → 100 $","ru":"Символ валюты ($, €, ¥, Ұ, £ и ₤) после числа, $100 → 100 $"},"ru/money/ruble":{"common":"1 руб. → 1 ₽"},"ru/nbsp/abbr":{"en-US":"Non-breaking space in abbreviations, e.g. “т. д.”","ru":"Нераз. пробел в сокращениях, например, в «т. д.»"},"ru/nbsp/addr":{"en-US":"Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al.","ru":"Расстановка нераз. пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др."},"ru/nbsp/afterNumberSign":{"en-US":"Non-breaking thin space after №","ru":"Нераз. узкий пробел после №"},"ru/nbsp/beforeParticle":{"en-US":"Non-breaking space before “ли”, “ль”, “же”, “бы”, “б”","ru":"Нераз. пробел перед «ли», «ль», «же», «бы», «б»"},"ru/nbsp/centuries":{"en-US":"Remove spaces and extra points in “вв.”","ru":"Удаление пробелов и лишних точек в «вв.»"},"ru/nbsp/dayMonth":{"en-US":"Non-breaking space between number and month","ru":"Нераз. пробел между числом и месяцем"},"ru/nbsp/initials":{"en-US":"Binding of initials to the name","ru":"Привязка инициалов к фамилии"},"ru/nbsp/m":{"en-US":"m2 → м², m3 → м³ and non-breaking space","ru":"м2 → м², м3 → м³ и нераз. пробел"},"ru/nbsp/mln":{"en-US":"Non-breaking space between number and “тыс.”, “млн”, “млрд” and “трлн”","ru":"Неразр. пробел между числом и «тыс.», «млн», «млрд» и «трлн»"},"ru/nbsp/ooo":{"en-US":"Non-breaking space after “OOO, ОАО, ЗАО, НИИ, ПБОЮЛ”","ru":"Нераз. пробел после OOO, ОАО, ЗАО, НИИ и ПБОЮЛ"},"ru/nbsp/page":{"en-US":"Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.”","ru":"Нераз. пробел после «стр.», «гл.», «рис.», «илл.»"},"ru/nbsp/ps":{"en-US":"Non-breaking space in P. S. and P. P. S.","ru":"Нераз. пробел в P. S. и P. P. S."},"ru/nbsp/rubleKopek":{"en-US":"Not once. space before the “rub” and “cop.”","ru":"Нераз. пробел перед «руб.» и «коп.»"},"ru/nbsp/see":{"en-US":"Non-breaking space after abbreviation «см.» and «им.»","ru":"Нераз. пробел после сокращений «см.» и «им.»"},"ru/nbsp/year":{"en-US":"Non-breaking space before XXXX г. (2012 г.)","ru":"Нераз. пробел после XXXX г. (2012 г.)"},"ru/nbsp/years":{"en-US":"г.г. → гг. and non-breaking space","ru":"г.г. → гг. и нераз. пробел"},"ru/number/comma":{"en-US":"Commas in numbers","ru":"Замена точки на запятую в числах"},"ru/number/ordinals":{"common":"N-ый, -ой, -ая, -ое, -ые, -ым, -ом, -ых → N-й, -я, -е, -м, -х (25-й)"},"ru/optalign/bracket":{"en-US":"for opening bracket","ru":"для открывающей скобки"},"ru/optalign/comma":{"en-US":"for comma","ru":"для запятой"},"ru/optalign/quote":{"en-US":"for opening quotation marks","ru":"для открывающей кавычки"},"ru/other/accent":{"en-US":"Replacement capital letters to lowercase with addition of accent","ru":"Замена заглавной буквы на строчную с добавлением ударения"},"ru/other/phone-number":{"en-US":"Formatting phone numbers","ru":"Форматирование телефонных номеров"},"ru/punctuation/ano":{"en-US":"Placement of commas before “а” and “но”","ru":"Расстановка запятых перед «а» и «но»"},"ru/punctuation/exclamation":{"common":"!! → !"},"ru/punctuation/exclamationQuestion":{"common":"!? → ?!"},"ru/punctuation/hellipQuestion":{"common":"«?…» → «?..», «!…» → «!..», «…,» → «…»"},"ru/space/afterHellip":{"en-US":"Space after “...”, “!..” and “?..”","ru":"Пробел после «...», «!..» и «?..»"},"ru/space/year":{"en-US":"Space between number and word “год”","ru":"Пробел между числом и словом «год»"},"ru/symbols/NN":{"common":"№№ → №"},"ru/typo/switchingKeyboardLayout":{"en-US":"Replacement of Latin letters in Russian. Typos occur when you switch keyboard layouts","ru":"Замена латинских букв на русские. Опечатки, возникающие при переключении клавиатурной раскладки"}};
|
|
3322
|
+
var titles = {"common/html/e-mail":{"en-US":"Placement of links for e-mail","ru":"Расстановка ссылок для эл. почты"},"common/html/escape":{"en-US":"Escaping HTML","ru":"Экранирование HTML"},"common/html/nbr":{"en-US":"Replacement line break on <br/>","ru":"Замена перевода строки на <br/>"},"common/html/p":{"en-US":"Placement of paragraph","ru":"Расстановка абзацев"},"common/html/processingAttrs":{"en-US":"Processing HTML attributes","ru":"Типографирование HTML-атрибутов"},"common/html/quot":{"common":"" → \""},"common/html/stripTags":{"en-US":"Removing HTML-tags","ru":"Удаление HTML-тегов"},"common/html/url":{"en-US":"Placement of links","ru":"Расстановка ссылок"},"common/nbsp/afterNumber":{"en-US":"Non-breaking space between number and word","ru":"Нераз. пробел между числом и словом"},"common/nbsp/afterParagraphMark":{"en-US":"Non-breaking space after ¶","ru":"Нераз. пробел после ¶"},"common/nbsp/afterSectionMark":{"en-US":"Non-breaking space after §","ru":"Нераз. узкий пробел после §"},"common/nbsp/afterShortWord":{"en-US":"Non-breaking space after short word","ru":"Нераз. пробел после короткого слова"},"common/nbsp/afterShortWordByList":{"en-US":"Non-breaking space after conjunctions, articles and prepositions","ru":"Нераз. пробел после союзов, артиклей и предлогов"},"common/nbsp/beforeShortLastNumber":{"en-US":"Non-breaking space before number (maximum 2 digits) at end of sentence","ru":"Нераз. пробел перед числом (не более 2 цифр) в конце предложения"},"common/nbsp/beforeShortLastWord":{"en-US":"Non-breaking space before last short word in sentence","ru":"Нераз. пробел перед последним коротким словом в предложении"},"common/nbsp/dpi":{"en-US":"Non-breaking space before lpi and dpi","ru":"Нераз. пробел перед lpi и dpi"},"common/nbsp/nowrap":{"en-US":"Replace non-breaking space to normal space in tags nowrap and nobr","ru":"Заменять нераз. пробел на обычный пробел в тегах nowrap и nobr"},"common/nbsp/replaceNbsp":{"en-US":"Replacing non-breaking space on normal before text correction","ru":"Замена неразрывного пробела на обычный перед типографированием"},"common/number/digitGrouping":{"en-US":"Divide into groups numbers with many digits","ru":"Разбивать длинные числа по разрядам"},"common/number/fraction":{"common":"1/2 → ½, 1/4 → ¼, 3/4 → ¾"},"common/number/mathSigns":{"common":"!= → ≠, <= → ≤, >= → ≥, ~= → ≅, +- → ±"},"common/number/times":{"common":"x → × (10 x 5 → 10×5)"},"common/other/delBOM":{"en-US":"Delete character BOM (Byte Order Mark)","ru":"Удаление символа BOM (Byte Order Mark)"},"common/other/repeatWord":{"en-US":"Removing repeat words","ru":"Удаление повтора слова"},"common/punctuation/apostrophe":{"en-US":"Placement of correct apostrophe","ru":"Расстановка правильного апострофа"},"common/punctuation/delDoublePunctuation":{"en-US":"Removing double punctuation","ru":"Удаление двойной пунктуации"},"common/punctuation/hellip":{"en-US":"Replacement of three points by ellipsis","ru":"Замена трёх точек на многоточие"},"common/punctuation/quote":{"en-US":"Placement of quotation marks in texts","ru":"Расстановка кавычек правильного вида"},"common/punctuation/quoteLink":{"en-US":"Removal quotes outside a link","ru":"Вынос кавычек за пределы ссылки"},"common/space/afterColon":{"en-US":"space after colon","ru":"Пробел после двоеточия"},"common/space/afterComma":{"en-US":"space after comma","ru":"Пробел после запятой"},"common/space/afterExclamationMark":{"en-US":"space after exclamation mark","ru":"Пробел после знака восклицания"},"common/space/afterQuestionMark":{"en-US":"space after question mark","ru":"Пробел после знака вопроса"},"common/space/afterSemicolon":{"en-US":"space after semicolon","ru":"Пробел после точки с запятой"},"common/space/beforeBracket":{"en-US":"Space before opening bracket","ru":"Пробел перед открывающей скобкой"},"common/space/bracket":{"en-US":"Remove extra spaces after opening and before closing bracket","ru":"Удаление лишних пробелов после открывающей и перед закрывающей скобкой"},"common/space/delBeforeDot":{"en-US":"Remove space before dot","ru":"Удаление пробела перед точкой"},"common/space/delBeforePercent":{"en-US":"Remove space before %, ‰ and ‱","ru":"Удаление пробела перед %, ‰ и ‱"},"common/space/delBeforePunctuation":{"en-US":"Remove spaces before punctuation","ru":"Удаление пробелов перед знаками пунктуации"},"common/space/delBetweenExclamationMarks":{"en-US":"Remove spaces before exclamation marks","ru":"Удаление пробелов между знаками восклицания"},"common/space/delLeadingBlanks":{"en-US":"Remove spaces at start of line","ru":"Удаление пробелов в начале строки"},"common/space/delRepeatN":{"en-US":"Remove duplicate line breaks","ru":"Удаление повторяющихся переносов строки"},"common/space/delRepeatSpace":{"en-US":"Removing duplicate spaces between characters","ru":"Удаление повторяющихся пробелов между символами"},"common/space/delTrailingBlanks":{"en-US":"Remove spaces at end of line","ru":"Удаление пробелов в конце строки"},"common/space/insertFinalNewline":{"en-US":"Insert final newline","ru":"Вставить в конце текста перевод строки"},"common/space/replaceTab":{"en-US":"Replacement of tab to 4 spaces","ru":"Замена таба на 4 пробела"},"common/space/squareBracket":{"en-US":"Remove extra spaces after opening and before closing square bracket","ru":"Удаление лишних пробелов после открывающей и перед закрывающей квадратной скобкой"},"common/space/trimLeft":{"en-US":"Remove spaces and line breaks in beginning of text","ru":"Удаление пробелов и переносов строк в начале текста"},"common/space/trimRight":{"en-US":"Remove spaces and line breaks at end of text","ru":"Удаление пробелов и переносов строк в конце текста"},"common/symbols/arrow":{"common":"-> → →, <- → ←"},"common/symbols/cf":{"en-US":"Adding ° to C and F","ru":"Добавление ° к C и F"},"common/symbols/copy":{"common":"(c) → ©, (tm) → ™, (r) → ®"},"en-US/dash/main":{"en-US":"Replace hyphens surrounded by spaces with an em-dash","ru":"Замена дефиса на длинное тире"},"ru/dash/centuries":{"en-US":"Hyphen to dash in centuries","ru":"Замена дефиса на тире в веках"},"ru/dash/daysMonth":{"en-US":"Dash between days of one month","ru":"Тире между днями одного месяца"},"ru/dash/de":{"en-US":"Hyphen before “де”","ru":"Дефис перед «де»"},"ru/dash/decade":{"en-US":"Dash in decade","ru":"Тире в десятилетиях, 80—90-е гг."},"ru/dash/directSpeech":{"en-US":"Dash in direct speech","ru":"Тире в прямой речи"},"ru/dash/izpod":{"en-US":"Hyphen between “из-под”","ru":"Дефис между «из-под»"},"ru/dash/izza":{"en-US":"Hyphen between “из-за”","ru":"Дефис между «из-за»"},"ru/dash/ka":{"en-US":"Hyphen before “ка” and “кась”","ru":"Дефис перед «ка» и «кась»"},"ru/dash/kakto":{"en-US":"Hyphen for “как то”","ru":"Дефис для «как то»"},"ru/dash/koe":{"en-US":"Hyphen after “кое” and “кой”","ru":"Дефис после «кое» и «кой»"},"ru/dash/main":{"en-US":"Replacement hyphen with dash","ru":"Замена дефиса на тире"},"ru/dash/month":{"en-US":"Dash between months","ru":"Тире между месяцами"},"ru/dash/surname":{"en-US":"Acronyms with a dash","ru":"Сокращения с помощью тире"},"ru/dash/taki":{"en-US":"Hyphen between “верно-таки” and etc.","ru":"Дефис между «верно-таки» и т. д."},"ru/dash/time":{"en-US":"Dash in time intervals","ru":"Тире в интервалах времени"},"ru/dash/to":{"en-US":"Hyphen before “то”, “либо”, “нибудь”","ru":"Дефис перед «то», «либо», «нибудь»"},"ru/dash/weekday":{"en-US":"Dash between the days of the week","ru":"Тире между днями недели"},"ru/dash/years":{"en-US":"Hyphen to dash in years","ru":"Замена дефиса на тире в годах"},"ru/date/fromISO":{"en-US":"Converting dates YYYY-MM-DD type DD.MM.YYYY","ru":"Преобразование дат YYYY-MM-DD к виду DD.MM.YYYY"},"ru/date/weekday":{"common":"2 Мая, Понедельник → 2 мая, понедельник"},"ru/money/currency":{"en-US":"Currency symbol ($, €, ¥, Ұ, £ and ₤) after the number, $100 → 100 $","ru":"Символ валюты ($, €, ¥, Ұ, £ и ₤) после числа, $100 → 100 $"},"ru/money/ruble":{"common":"1 руб. → 1 ₽"},"ru/nbsp/abbr":{"en-US":"Non-breaking space in abbreviations, e.g. “т. д.”","ru":"Нераз. пробел в сокращениях, например, в «т. д.»"},"ru/nbsp/addr":{"en-US":"Placement of non-breaking space after “г.”, “обл.”, “ул.”, “пр.”, “кв.” et al.","ru":"Расстановка нераз. пробела после «г.», «обл.», «ул.», «пр.», «кв.» и др."},"ru/nbsp/afterNumberSign":{"en-US":"Non-breaking thin space after №","ru":"Нераз. узкий пробел после №"},"ru/nbsp/beforeParticle":{"en-US":"Non-breaking space before “ли”, “ль”, “же”, “бы”, “б”","ru":"Нераз. пробел перед «ли», «ль», «же», «бы», «б»"},"ru/nbsp/centuries":{"en-US":"Remove spaces and extra points in “вв.”","ru":"Удаление пробелов и лишних точек в «вв.»"},"ru/nbsp/dayMonth":{"en-US":"Non-breaking space between number and month","ru":"Нераз. пробел между числом и месяцем"},"ru/nbsp/initials":{"en-US":"Binding of initials to the name","ru":"Привязка инициалов к фамилии"},"ru/nbsp/m":{"en-US":"m2 → м², m3 → м³ and non-breaking space","ru":"м2 → м², м3 → м³ и нераз. пробел"},"ru/nbsp/mln":{"en-US":"Non-breaking space between number and “тыс.”, “млн”, “млрд” and “трлн”","ru":"Неразр. пробел между числом и «тыс.», «млн», «млрд» и «трлн»"},"ru/nbsp/ooo":{"en-US":"Non-breaking space after “OOO, ОАО, ЗАО, НИИ, ПБОЮЛ”","ru":"Нераз. пробел после OOO, ОАО, ЗАО, НИИ и ПБОЮЛ"},"ru/nbsp/page":{"en-US":"Non-breaking space after “стр.”, “гл.”, “рис.”, “илл.”","ru":"Нераз. пробел после «стр.», «гл.», «рис.», «илл.»"},"ru/nbsp/ps":{"en-US":"Non-breaking space in P. S. and P. P. S.","ru":"Нераз. пробел в P. S. и P. P. S."},"ru/nbsp/rubleKopek":{"en-US":"Not once. space before the “rub” and “cop.”","ru":"Нераз. пробел перед «руб.» и «коп.»"},"ru/nbsp/see":{"en-US":"Non-breaking space after abbreviation «см.» and «им.»","ru":"Нераз. пробел после сокращений «см.» и «им.»"},"ru/nbsp/year":{"en-US":"Non-breaking space before XXXX г. (2012 г.)","ru":"Нераз. пробел после XXXX г. (2012 г.)"},"ru/nbsp/years":{"en-US":"г.г. → гг. and non-breaking space","ru":"г.г. → гг. и нераз. пробел"},"ru/number/comma":{"en-US":"Commas in numbers","ru":"Замена точки на запятую в числах"},"ru/number/ordinals":{"common":"N-ый, -ой, -ая, -ое, -ые, -ым, -ом, -ых → N-й, -я, -е, -м, -х (25-й)"},"ru/optalign/bracket":{"en-US":"for opening bracket","ru":"для открывающей скобки"},"ru/optalign/comma":{"en-US":"for comma","ru":"для запятой"},"ru/optalign/quote":{"en-US":"for opening quotation marks","ru":"для открывающей кавычки"},"ru/other/accent":{"en-US":"Replacement capital letters to lowercase with addition of accent","ru":"Замена заглавной буквы на строчную с добавлением ударения"},"ru/other/phone-number":{"en-US":"Formatting phone numbers","ru":"Форматирование телефонных номеров"},"ru/punctuation/ano":{"en-US":"Placement of commas before “а” and “но”","ru":"Расстановка запятых перед «а» и «но»"},"ru/punctuation/exclamation":{"common":"!! → !"},"ru/punctuation/exclamationQuestion":{"common":"!? → ?!"},"ru/punctuation/hellipQuestion":{"common":"«?…» → «?..», «!…» → «!..», «…,» → «…»"},"ru/space/afterHellip":{"en-US":"Space after “...”, “!..” and “?..”","ru":"Пробел после «...», «!..» и «?..»"},"ru/space/year":{"en-US":"Space between number and word “год”","ru":"Пробел между числом и словом «год»"},"ru/symbols/NN":{"common":"№№ → №"},"ru/typo/switchingKeyboardLayout":{"en-US":"Replacement of Latin letters in Russian. Typos occur when you switch keyboard layouts","ru":"Замена латинских букв на русские. Опечатки, возникающие при переключении клавиатурной раскладки"}};
|
|
3300
3323
|
|
|
3301
3324
|
var groups = [
|
|
3302
3325
|
{
|