LINUX.ORG.RU

HarfBuzz 11.5.0

 , , , ,


0

3

12 сентября состоялся выпуск 11.5.0 библиотеки и сопутствующих утилит проекта HarfBuzz.
Библиотека предназначена для преобразования строк Unicode в правильно отформатированные и расположенные глифы (text shaping) для их дальнейшего рендеринга — для любой системы письма и любого языка.

Проект написан на языке C++ и распространяется по лицензии Old MIT.

Изменения:

  • Поддержка Unicode 17.0.
  • Оптимизация сабсеттинга.
  • Множество внутренних микрооптимизаций.

>>> Подробности на GitHub

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от safocl

Как использовать? Конкретные примеры в студию. Чтобы нарисовать символ нужная сложная обработка вроде HarfBuzz. Чтобы измерить количество знакомест в консоли также требуется специальная обработка. От голого кодпойта мало толку.

X512 ★★★★★
()
Ответ на: комментарий от X512

Ну вот там в шрифте латинские символы 8x16, а китайские 16x16. И это по-прежнему считается моноширинным шрифтом

Считается какими-то врунами. Не слушай их. В моноширинном шрифте размер символа - свойство самого шрифта, и по-хорошему даже формат хранения этого шрифта не должен поддерживать задание размера отдельных символов.

firkax ★★★★★
()
Ответ на: комментарий от X512

Хватит клоунствовать. Людям нужно знать где предыдущий символ а где следующий. От того что ты заявляешь будто это ненужно, реальность не меняется. Просто признай что юникод в его имеющейся реализации убог.

Про следующую подставу с «этот символ - не символ» safocl просто скорее всего не знает, иначе бы он и про это заявил.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

А других китайских/японских/корейских моноширинных шрифтов просто не бывает. Мир не ограничивается только Европой.

X512 ★★★★★
()
Ответ на: комментарий от X512

Если у них символы разной ширины - они не моноширинные. Так что, по-твоему получается что моноширинных китайских не существует. Сомневаюсь что это и правда так.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Так что, по-твоему получается что моноширинных китайских не существует.

По вашему определению не существуют. По общепринятому определению моноширинных шрифтов существуют. Набор символов которые занимают два знакоместа можно узнать из стандартных таблиц Юникода и это не зависит от конкретного шрифта. Терминалы Линукса и Windows это понимают. Консольные редакторы вроде Nano и Vim тоже.

Попробуйте вставить в консоль «漢字» и посмотрите что будет.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от firkax

Людям нужно знать где предыдущий символ а где следующий.

Там же в юникоде есть замечательные знаки «а теперь текст меняет направление». Активно используются на израильских бордах.

sarumeister
()
Ответ на: комментарий от firkax

Людям нужно знать где предыдущий символ а где следующий

Что такое «символ» и зачем нужно получать «следующий»?

pasquale
()
Ответ на: комментарий от X512

можно узнать из стандартных таблиц Юникода

Вот именно, надо таскать с собой таблицы всего лишь для того чтоб узнать где находится символ, выведенный в текстовую консоль! Неужели ты не видишь всю абсурдность этой ситуации?

И таскать их надо и для этой чуши с «два знакоместа на символ», и для того чтоб узнать а не окажется ли очередной символ несимволом, который не двигает курсор. Да, по сравнению с этим необходимость парсить utf-8 выглядит лёгкой шалостью, она хотя бы детерминистична относительно фантазий графоманов-стандартописателей по добавлению новых не пойми какой ширины символов в рандомные места кодовой таблицы. Но она, тем не менее, всё так же вредна как и раньше.

По общепринятому определению

Общепринятое среди невменяемых людей и обычно незамечаемое остальными т.к. иероглифами почти никто не пользуется. (да, я знаю то китайцев больше миллиарда но с их культурой я не знаком, обсуждать её соответственно не могу, и поэтому проигнорирую её наличие). Собственно, именно эта пакость и есть главная причина почему я вынужден пользоваться эмулятором терминала из дистра (который уже 2 раза падал и терял на этом кучу данных из запущеного в нём софта) а не самописным, ибо реализовывать такое крайне не хочется. Подумываю в очередной забить на графоманов и написать в спецификации терминала «1 кодпоинт = 1 знакоместо», тогда всё лучше будет.

firkax ★★★★★
()
Ответ на: комментарий от sarumeister

Да, помню, а ещё его можно использовать чтобы портить вёрстку некоторых сайтов/форумов где юзерские тексты местами неизолированно вставляются в что-то внешнее.

firkax ★★★★★
()
Ответ на: комментарий от cdtemp

Эт-точно! Понапридумывали языков и письменностей! Всех пересадить на латиницу и запретить все кодировки, кроме ASCII!

TeopeTuK ★★★★★
()
Ответ на: комментарий от TeopeTuK

16-битная кодировка покрывает все европейские и славянские языки и даже японский. Остальное мусор, отсталые чуркестаны сами свои костыли изобретут

cdtemp
()
Ответ на: комментарий от cdtemp

Что-то ты как-то многовато отсталых языков и письменностей собираешься поддерживать… Должен быть один язык и одна письменность!

TeopeTuK ★★★★★
()
Ответ на: комментарий от TeopeTuK

КОИ-7 Н2 навсегда! Ну или КОИ-7 Н0/Н1 и ^N/^O для переключения.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

Я не разобрался как ему удобное оформление настроить (а может быть он это и не умеет). Вкладки точно не умеет. А ещё у него в ldd помойка.

Хотя может и стоит его доработать а не писать с нуля.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Вот именно, надо таскать с собой таблицы всего лишь для того чтоб узнать где находится символ, выведенный в текстовую консоль!

А что, если я скажу тебе, что ты уже таскаешь их в своих шрифтах? Метрики глифов, правила объединения в лигатуры, точки прикрепления акцентов определяются дизайнерами и хранятся в TTF и OTF.

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

«Не хочется реализовывать» не в плане нежелания писать код, а в плане нежелания выпускать в эксплуатацию идеологически дефективную прогу.

firkax ★★★★★
()
Ответ на: комментарий от static_lab

В терминале положение символа должно определяться как (char_width*x, char_hright*y). Обрати внимание, тут всего два умножения, и никаких обращений ни к таблицам, ни к содержимому текстовых буферов, ни к шрифтам.

firkax ★★★★★
()
Ответ на: комментарий от TeopeTuK

Не-не-не! Экономим! Восьмой бит вообще надо отрезать и перейти на септеты!

Галлифрейская кольцевая письменность ограничилась септетами. Кому-то легче стало?

sarumeister
()
Ответ на: комментарий от firkax

Попытка подогнать реальность под некие «идеологически правильные» концепции — какое-то квадратно-гнездовое мышление во всех смыслах. Это как обижаться на односвязный список, что у него доступ к произвольному элементу — O(n).

Так или иначе терминал всё равно должен именно поток байтов обрабатывать, в котором и строки в UTF-8 будут, и управляющие символы, и управляющие последовательности — чем не grapheme clusters?

В терминале положение символа должно определяться как (char_widthx, char_heighty).

Мы уже выяснили, что глифы TrueType- и OpenType-шрифтов работают сложнее, особенно в случае combining marks, лигатур и прочего. Если нужна детерминированность — нужно делать свои шрифты.

static_lab ★★★★★
()
Ответ на: комментарий от sarumeister

Там была семеричная система, не семибитный байт.

TeopeTuK ★★★★★
()
Ответ на: комментарий от static_lab

Попытка подогнать реальность под некие «идеологически правильные» концепции — какое-то квадратно-гнездовое мышление во всех смыслах.

Совершенно нет. Подогнать реальность под свои идеалы - желание любого психически здорового человека. Некоторым «везёт» и у них идеалы оказываются уже совпадающими с реальностью (а скорее они просто ведомы ей), они ничего не подгоняют. А вот иметь отличающиеся и не хотеть переделать окружающий мир под соответствие им - это уже заболевание какое-то. Вся человеческая эволюция была связана именно с переходом от пассивного потребления к агрессивному насаждению своих порядков вокруг себя.

Так или иначе терминал всё равно должен именно поток байтов обрабатывать, в котором и строки в UTF-8 будут, и управляющие символы, и управляющие последовательности — чем не grapheme clusters?

Разница в том, что управляющие последовательности терминала реализуются в целом на усмотрение его авторов (консультируясь при этом с древними vt100/vt220/vt420 спецификациями а так же чуть менее древней спецификацией xterm), и делаются они для вполне понятных технических нужд. А вот поддержка чьей-то нестабиьной во времени графомании - совсем другое. Черезчур современная прога тебе прислала неизвестный для тебя кодпоинт - и гадай теперь как его отобразить чтобы не рассинхронизироваться с прогой касательно положения курсора (важно именно положение курсора, что там будет нарисовано - вообще плевать).

Мы уже выяснили, что глифы TrueType- и OpenType-шрифтов работают сложнее,

«Мы» ничего не выяснили. И шрифты тут ни при чём. Условно, если эмулятору терминала пришла строка «ABC», он должен нарисовать букву A на координатах (0,0), букву B на (8,0) и букву C на (16,0). Если там будут какие-то другое кодпоинты - нарисовать соответственно их. Не вижу как шрифтовый движок может испортить эту простую логику. Максимум он может вместо рисования запрошенного кодпоинта выдать какую-нить ошибку и/или не рисовать вообще ничего - ну, будет пробел значит.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Подогнать реальность под свои идеалы - желание любого психически здорового человека.

Для изменения реальности нужны затраты энергии. Иногда они несравнимы с затратами на адаптацию к реальности. Здесь уже эффективную стратегию определяет в том числе теория игр.

Некоторым «везёт» и у них идеалы оказываются уже совпадающими с реальностью (а скорее они просто ведомы ей), они ничего не подгоняют. А вот иметь отличающиеся и не хотеть переделать окружающий мир под соответствие им - это уже заболевание какое-то.

Слепое игнорирование действительности тоже выглядит как заболевание. И из этих слов также следует, что наличие хорошего удобного для всех стандарта — плохо, потому что его пользователям «везёт», и они остаются ведомы реальностью :)

Вся человеческая эволюция была связана именно с переходом от пассивного потребления к агрессивному насаждению своих порядков вокруг себя.

Эволюция (как в природе, так и в человеческом обществе) больше связана с адаптацией. Побеждает тот, кто наиболее эффективным способом подстроился к условиям реальности.

именно эта пакость и есть главная причина почему я вынужден пользоваться эмулятором терминала из дистра

Пассивно потребляете? :)

И шрифты тут ни при чём. Условно, если эмулятору терминала пришла строка «ABC», он должен нарисовать букву A на координатах (0,0), букву B на (8,0) и букву C на (16,0). Если там будут какие-то другое кодпоинты - нарисовать соответственно их. Не вижу как шрифтовый движок может испортить эту простую логику.

В данном случае принимается за аксиому, что ширина символов «A» и «B» с учётом межбуквенного интервала равна 8. Однако если моноширинные шрифты разработаны под Юникод, ширина любого глифа не обязательно будет константной. И даже правила выбора глифов могут быть нетривиальными. Поэтому нужны собственные шрифты, где размеры явно задекларированы.

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Для изменения реальности нужны затраты энергии. Иногда они несравнимы с затратами на адаптацию к реальности. Здесь уже эффективную стратегию определяет в том числе теория игр.

Вот как раз стремление выбрать «изменения» вместо адаптации, даже если на них и требуется больше энергии, и есть признак высокоразвитого существа, а не одноклеточного, плывущего по градиенту внешних факторов + рандому.

И из этих слов также следует, что наличие хорошего удобного для всех стандарта — плохо, потому что его пользователям «везёт», и они остаются ведомы реальностью :)

Не следует. Я там написал «скорее», т.е. это не всегда. Если стандарт действительно хороший и его выбрали именно поэтому - все норм. Но чаще выбирают «потому что так принято», это уже ведомые.

Пассивно потребляете? :)

Ну испортившийся гном на нормальное вм я уже заменил. Терминал тоже надо но пока, увы, потребляю, да.

Поэтому нужны собственные шрифты, где размеры явно задекларированы.

Не, всё проще. Терминал знает правильные координаты и игнорирует «мнение» шрифтов на этот счёт, даже если оно где-то там прописано. В результате, возможно, иероглифы станут налезать на соседей (или выглядеть обрезанными справа), но это уже следующая проблема. Чтобы её исправить надо фиксить шрифты, да. Или забить, если иероглифы тебя не интересуют (можно вместо них вообще вопросительные знаки рисовать или ещё какие заглушки).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 4)
Ответ на: комментарий от firkax

не одноклеточного, плывущего по градиенту внешних факторов

забить

nuff said


можно вместо них вообще вопросительные знаки рисовать

В большинстве случаев скорее там будет несколько битых символов вместо некоторых эмодзи типа флагов или других хитрых.

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

можно вместо них вообще вопросительные знаки рисовать

В большинстве случаев скорее там будет несколько битых символов вместо некоторых эмодзи типа флагов или других хитрых.

Ну да, ведь в нашем 2025м году эмуляторы терминалов одни дурачки пишут, которые вообще не слышали ни про шейдеры, ни про эмодзи, ни про HarfBuzz, ни про масштабирование на хоткеях, и ни во что не вдупляют.

sarumeister
()

Циркулярные зависимости вызывает этот флаг/пакет если его врубить. Вот ведь заковыка.

With ★☆☆
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.