У термінальних програмах важливо точно визначити ширину відображення символів Unicode для коректного вирівнювання та форматування тексту. Однак сучасний текст Unicode має свої складнощі:
- Емодзі та символи східноазійських мов (CJK) зазвичай займають дві клітинки в терміналах.
- Символи з нульовою шириною (наприклад, сполучники, діакритичні знаки) не впливають на розташування, проте можуть спричинити помилки в розрахунках ширини.
- Складний текст, такий як емодзі з модифікаторами кольору шкіри або прапорами, потребує особливого підходу.
- Вбудовані функції PHP не завжди можуть вирішити ці проблеми.
Щоб вирішити ці питання, Аарон Франсіс створив бібліотеку Grapheme, яка забезпечує точні, швидкі та ретельно протестовані методи для обчислення ширини відображення будь-якого символа чи кластеру графем у PHP-додатках.
# Основні можливості:
- Широка підтримка Unicode: Обробляє символи CJK, емодзі (включаючи модифікатори), символи з нульовою шириною, комбіновані знаки, регіональні індикатори та селектори варіацій.
- Висока продуктивність: Оптимізовано з використанням раннього виходу та розумних механізмів кешування.
- Мінімальні залежності: Потребує PHP 8.2+ та необов'язкове розширення intl.
- Сумісність з терміналами: Спрямована на відповідність поведінці
wcwidth() у сучасних емуляторах терміналів.
Щоб встановити цей пакет, скористайтеся Composer:
composer require soloterm/grapheme
Ось кілька прикладів використання пакета:
use SoloTerm\Grapheme\Grapheme;
Grapheme::wcwidth('Я'); // Поверне: 1
Grapheme::wcwidth('文'); // Поверне: 2
Grapheme::wcwidth('😀'); // Поверне: 2
Для отримання додаткової інформації та перегляду вихідного коду відвідайте репозиторій Grapheme на GitHub.