← На главную

Шрифт QR Font превращает текст в скобках в QR-код

07.07.2026 16:30 · hackernews

Джим сделал экспериментальный OpenType-шрифт, который прямо в тексте рисует QR-коды. Всё, что заключено в квадратные скобки [ и ], шрифт превращает в QR-код, а остальной текст остаётся обычным. Кодировка — byte mode, используются только печатные ASCII-символы, фиксированная маска pattern 0.

Шрифт не нарисован вручную — его собирает скрипт. Он генерирует контуры глифов, логику GSUB, а потом компилирует всё в файлы dist/qrfont-*.ttf. В полной сборке прописывается парсер разделителей, разрядное расширение байтов, схема коррекции Рида-Соломона, размещение модулей QR и фиксированная маска. Обычные печатные глифы скопированы из шрифта Liberation Sans Regular (масштабированы под квадратную сетку QR-шрифта), так что текст вне скобок выглядит как обычный текст тем же шрифтом.

Из-за лицензии исходного шрифта (Liberation — зарезервированное имя) готовые семейства называются QR Font 1-L, QR Font 2-L и QR Font 3-L. Версии отличаются максимальной длиной данных внутри одного QR-блока: 17, 32 или 53 символа соответственно.

Для сборки используется uv (менеджер зависимостей Python). Запустить генератор можно командой uv run tools/build_font.py. По умолчанию он берёт Liberation Sans Regular из системной папки /usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf, но можно указать другой совместимый TrueType-шрифт через флаг --base-font. Сборка с полной схемой Рида-Соломона (это дефолтный make) генерирует тысячи контекстных подстановок и работает заметно дольше, чем layout-only сборка с нулевой чётностью — та быстрее, но для демонстрации достаточно.

Есть утилита для отладки: uv run tools/shape_debug.py '[a]' '[b]' показывает, как шрифт обрабатывает строки. Результат сборки — не только TTF-файлы, но и интерактивная веб-демка dist/index.html. Открываешь её в браузере, печатаешь что-то вроде [hello] — и QR-код появляется прямо среди текста.

Шрифт — модифицированная версия Liberation Sans Regular, распространяется по лицензии SIL Open Font License 1.1. Важный нюанс: он полагается на OpenType-шейпинг, так что работает только в окружениях, которые умеют применять GSUB-фичи. Это proof-of-concept.

Читать оригинал →