Search by

zoibana / typograph

zoibana

Package info

github.com/zoibana/typograph

pkg:composer/zoibana/typograph

Statistics

Installs: 3 210

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.1.0 2026-09-23 16:09 UTC

This package is auto-updated.

Last update: 2026-09-23 16:09:41 UTC


README

Переписанный в относительно нормальный вид типограф Муравьева на PHP. Поддерживает все возможности оригинального типографа, и добавляет возможность кастомизации и добавления своих правил обработки текста.

Устройство

Все правила сгруппированны по типам (согласно группировке, используемой в оригинальном типографе) Классы групп правил реализуют интерфейс RuleGroupInterface. Классы групп правил объединяют в себе правила, реализующие интерфейс RuleInterface.

Вы можете создать свой класс группы правил, реализующий интерфейс RuleGroupInterface и/или свой класс правила, реализующий интерфейс RuleInterface.

Установка

composer require zoibana/typograph

Использование

Типограф со всеми правилами:

<?php

use zoibana\Typograph;

$text = "initial text";

// Инициализируем типограф со стандартным набором правил
$typo = new Typograph();

// Задаем текст для обработки
$typo->setText($text);

// Получаем обработанный текст
$formattedText->apply());

// Получаем содержимое css-файла со всеми стилями, примененными к тексту
$cssStyles = $typo->getCssStyles();

Типограф со своими правилами:

<?php

use zoibana\Typograph;

$text = "initial text";

// Инициализируем типограф с собственным набором правил
$typo = new Typograph([
     CustomRuleGroup::class,
]);

// Задаем текст для обработки
$typo->setText($text);

// Получаем обработанный текст
$formattedText->apply());

// Получаем содержимое css-файла со всеми стилями, примененными к тексту
$cssStyles = $typo->getCssStyles();

Простой текст вместо HTML — текстовый узел документа редактора, заголовок, подпись:

<?php

use zoibana\Typograph\Typograph;

// "Итог\u{A0}— «ок»": символы и неразрывные пробелы вместо сущностей, без тегов
(new Typograph())->applyToPlainText('Итог - "ок"');

applyToPlainText() не ставит параграфы, переносы, автоссылки и висячую пунктуацию (группы Text и OpticalAlign), сохраняет пробелы по краям, оставляет символы <, >, & символами и не трогает адреса, почту и домены.

Поведение по умолчанию

  • Точка в конце текста не дописывается: PunctuationPeriodAtEndRule не входит в группу Punctuation (заголовки и пункты списков не должны получать точку). Правило можно подключить своей группой.
  • apply() возвращает типографские символы вместо HTML-сущностей («, —, неразрывный пробел), кроме сущностей разметки: &lt;, &gt;, &amp;, &quot; и их числовые формы не раскодируются — иначе экранированный текст стал бы тегами.

Тесты

composer install
vendor/bin/phpunit

CI прогоняет их на PHP 8.3 (.github/workflows/tests.yml).