Быстрый старт
Установка
dotnet add package Typographer
Три способа вызвать
Статический фасад — когда настройки не нужны:
using Typographer;
string html = Typographer.Html("<p>Он - человек</p>");
string text = Typographer.PlainText("Он - человек");
Настраиваемый типограф — иммутабельный и потокобезопасный, создаётся один раз и живёт столько, сколько приложение:
var typographer = new HtmlTypographer(new HtmlOptions
{
Entities = EntityMode.Named,
Rules = RuleSet.Default,
});
string html = typographer.Process(source);
Без промежуточной строки — ноль аллокаций в куче после прогрева пула:
var writer = new ArrayBufferWriter<char>();
typographer.Process(source.AsSpan(), writer);
Наборы правил
| Пресет | Когда брать |
|---|---|
RuleSet.Default |
по умолчанию: только оформление, смысл текста не меняется |
RuleSet.Lebedev |
поведение веб-сервиса typograf.artlebedev.ru |
RuleSet.Typograf |
паритет дефолтов с JS-typograf |
RuleSet.Gost |
строго по ГОСТ Р 7.0.110-2025 |
RuleSet.Minimal |
кавычки, тире, многоточие — и всё |
RuleSet.All |
всё, включая рискованное и требующее внешнего CSS |
RuleSet.None |
ничего: вход возвращается тем же экземпляром строки |
Набор правится точечно и остаётся иммутабельным:
RuleSet rules = RuleSet.Default
.Without(RuleId.Ru.Money.Ruble)
.With(RuleId.Ru.OptAlign.Quote);
Полный список — в справочнике правил.
Настройки HTML
| Настройка | Что делает |
|---|---|
Entities |
вид типографских символов: Symbols, Named, Numeric, Mixed |
UseBr |
перевод строки заменяется тегом переноса |
UseP |
абзацы оборачиваются в теги абзаца |
MaxNobr |
сколько слов объединять в неразрывный блок |
MaxOutputLength |
предел длины результата; при превышении — OutputTooLargeException |
UseBr, UseP, MaxNobr и Entities не имеют смысла вне HTML, и в TextOptions их
физически нет: невалидная комбинация не компилируется.
Командная строка
dotnet tool install --global dotnet-typographer
echo 'Он - человек' | dotnet-typographer
dotnet-typographer --help