
Research
Security News
Malicious PyPI Package Exploits Deezer API for Coordinated Music Piracy
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Помогает автоматически расставить неразрывные пробелы, исправить мелкие опечатки, привести кавычки к правильному виду, заменить дефисы на тире в нужных местах и многое другое.
Попробуйте типограф в действии.
npm install typograf
<script src="./node_modules/typograf/dist/typograf.min.js"></script>
<script>
var tp = new Typograf({locale: ['ru', 'en-US']});
alert(tp.execute(' Мир - мой мир!! '));
</script>
npm install typograf
const Typograf = require('typograf');
const tp = new Typograf({locale: ['ru', 'en-US']});
console.log(tp.execute(' Мир - мой мир!! '));
Типограф поддерживает несколько десятков локалей.
Задать локаль можно как одну, так и несколько. Первая локаль является основной, по ней выбирается какие будут выполнены правила и вид кавычек.
// Выполняются правила "common/*" и "ru/*".
// Кавычки русские.
// Расстановка неразрывных пробелов только между русскими словами.
var tpRu = new Typograf({locale: 'ru'});
// Выполняются правила "common/*" и "ru/*".
// Кавычки русские.
// Расстановка неразрывных пробелов между русскими и английскими словами.
var tpRuEn = new Typograf({locale: ['ru', 'en-US']});
// Выполняются правила "common/*" и "en-US/*".
// Кавычки английские.
// Расстановка неразрывных пробелов между русскими и английскими словами.
var tpEnRu = new Typograf({locale: ['en-US', 'ru']});
По умолчанию висячая пунктуация отключена.
Для включения необходимо подключить правила:
var Typograf = require('typograf'),
tp = new Typograf({locale: ['ru', 'en-US']});
tp.enableRule('ru/optalign/*');
console.log(tp.execute('"Мир"'));
А также в HTML-код страницы добавить:
<!-- Для висячей пунктуации -->
<link rel="stylesheet" href="dist/typograf.css" />
var tp = new Typograf({locale: ['ru', 'en-US']});
tp.enableRule('ru/money/ruble'); // Включить правило
tp.enableRule('ru/money/*'); // Включить все правила в группе
tp.enableRule('*'); // Включить все правила
//...
tp.disableRule('ru/money/ruble'); // Отключить правило
tp.disableRule('ru/money/*'); // Отключить все правила в группе
tp.disableRule('*'); // Отключить все правила
var tp = new Typograf({locale: ['ru', 'en-US']});
// Название правила, название настройки, значение
// Неразрывный пробел перед последним словом в предложении, не более 5 символов
tp.setSetting('common/nbsp/beforeShortLastWord', 'lengthLastWord', 5);
// Вложенные кавычки тоже «ёлочки» для русской типографики
tp.setSetting('common/punctuation/quote', 'ru', {left: '«', right: '»', removeDuplicateQuotes: true});
// Неразрывный пробел после короткого слова, не более 3 символов
tp.setSetting('common/nbsp/afterShortWord', 'lengthShortWord', 3);
// Типографический смайлик
Typograf.addRule({
name: 'common/other/typographicSmiley',
handler: function (text) {
return text.replace(/:-\)/g, ':—)');
}
});
// Режим по умолчанию, HTML-сущности, как UTF-8 символы
var tp = new Typograf({locale: ['ru', 'en-US']});
tp.execute('12 кг...'); // 12 кг…
// HTML-сущности в виде имён
var tpName = new Typograf({
locale: ['ru', 'en-US'],
htmlEntity: {type: 'name'}
});
tpName.execute('12 кг...'); // 12 кг…
// HTML-сущности в виде цифр
var tpDigit = new Typograf({
locale: ['ru', 'en-US'],
htmlEntity: {type: 'digit'}
});
tpDigit.execute('12 кг...'); // 12 кг…
// Все HTML-сущности в UTF-8, а невидимые сущности в виде цифр
// Невидимые сущности —       ­ ‌ ‍ ‎ ‏
var tpNameInvisible = new Typograf({
locale: ['ru', 'en-US'],
htmlEntity: {
type: 'name',
onlyInvisible: true
}
});
tpNameInvisible.execute('12 кг...'); // 12 кг…
// Все HTML-сущности в UTF-8, а заданные в списке в виде цифр
var tpDigit = new Typograf({
locale: ['ru', 'en-US'],
htmlEntity: {
type: 'digit',
list: ['nbsp', 'shy', 'mdash', 'ndash']
}
});
tpDigit.execute('12 кг...'); // 12 кг…
Данный live-режим необходим, если текст типографируется на каждый ввод символа в текстовых полях.
var tp = new Typograf({locale: ['ru', 'en-US'], live: true});
По умолчанию типограф не заменяет неразрывные пробелы на обычные, чтобы не удалить ранее проставленные неразрывные пробелы. Если в тексте неправильно расставлены неразрывные пробелы, включите правило common/nbsp/replaceNbsp
.
Перед типографированием в live-режиме неразрывные пробелы заменяются на обычные, т. к. один и тот же текст типографируется многократно при каждом вводе символа.
var tp = new Typograf({locale: ['ru', 'en-US']});
// Отключить типографирование внутри тега <no-typography>
tp.addSafeTag('<no-typography>', '</no-typography>');
//...
// Отключить типографирование внутри управляющих конструкций какого-нибудь шаблонизатора
tp.addSafeTag('\\{\\{', '\\}\\}'); // {{...}}
tp.addSafeTag('\\[\\[', '\\]\\]'); // [[...]]
//...
// Отключить типографирование внутри PHP-кода
tp.addSafeTag('<\\?php', '\\?>');
tp.execute(text);
Для типографирования HTML-атрибутов необходимо включить правило common/html/processingAttrs
.
В правиле, по умолчанию, обрабатываются атрибуты title
и placeholder
.
var tp = new Typograf({locale: ['ru', 'en-US']});
tp.enableRule('common/html/processingAttrs');
tp.setSetting('common/html/processingAttrs', 'attrs', ['title', 'placeholder', 'alt', 'my-attr']);
Если typograf.js
сжимается вместе с другими js-файлами в UglifyJS
,
то необходимо использовать опцию ascii_only: false
, иначе типограф будет работать некорректно.
git clone https://github.com/typograf/typograf.git
Пересборка:
npm run rebuild
Пересборка и запуск тестов:
npm test
Подготовка новой версии:
npm run dist
Проверка скорости работы правил:
npm run benchmark
MIT License
v6.2.0
execute
в правилах.FAQs
The client and server typography
The npm package typograf receives a total of 5,122 weekly downloads. As such, typograf popularity was classified as popular.
We found that typograf demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Research
The Socket Research Team discovered a malicious npm package, '@ton-wallet/create', stealing cryptocurrency wallet keys from developers and users in the TON ecosystem.
Security News
Newly introduced telemetry in devenv 1.4 sparked a backlash over privacy concerns, leading to the removal of its AI-powered feature after strong community pushback.