Шрифты и формат BBT

Операционная система, написанная на языке Оберон и проект её перевода на русский язык. Только технические вопросы.
БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 27.04.20 23:57

Во всяком случае, глядя на оба инструмента сразу, можно представить себе, что они создали где-то стили (кстати, где?)
По нажатию на кнопочку устанавливается стиль. Также можно установить конкретные параметры (шрифт и т.п.)

В целом такая идея выглядит не совсем абсурдной. Но, во-первых, непонятно, как она должна работать, во-вторых, она не работает.

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

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 28.04.20 00:00

Итак, время 00:00, надо ложиться спать пораньше. Где же берутся стили?

WMTextStyleTool (который более работающий)

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 28.04.20 00:14

Оказывается, они берутся из файлов UserTextStyles.XML и DefaultTextStyles.XML (и наверняка это написано в документации :) )
Инициализация происходит в процедуре Texts.InitDefaultStyles. Сразу меняем там размер 10 на 14.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 29.04.20 23:16

В формате файла Oberon (.Text) стили кодируются номерами. Размеры шрифтов меняются при масштабировании. При последующем сохранении, размеры, которые получились, кодируются в примерно таком виде в файле .Text: "Oberon24b.Scn.Fnt".

Кроме того, в раскодировщике файла Оберон видны следы своеобразного OLE - там вырезан код, который должен загрузить библиотеку, отвечающую за отображения объектов такого типа.

При преобразовании текста в формат bbt стили букв угадываются по цвету и им даются имена, которых в формате Оберон в принципе нет (там только анонимные цифры). Именованные шрифты - это само по себе это может быть даже и неплохо.

Плохо то, что если документ открыт в формате bbt, то масштабирование не работает. Чтобы оно заработало, нужно, видимо, сделать две вещи:

1. Сделать, чтобы масштабирование меняло стили, если стили есть. Сейчас оно их не меняет.
2. Сделать, чтобы стили запоминались вместе с документом.

Есть более энтропийный способ - расширить все стили, после этого они потеряют имена и станут "Ad hoc" стилями, непосредственно заданными в тексте. Как лучше поступить - неясно, но это влияет на веб-браузер. Есть промежуточный вариант - сделать, чтобы стили масштабировались, но не сохранялись. Тогда будет удобнее работать, но придётся менять размер шрифта каждый раз. Выглядит терпимым.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 29.04.20 23:17

Как сделать масштабирование шрифта? Есть процедура WMTextView.GetNewSize - начнём копать от неё вглубь стека.

Код: Выделить всё

ChangeAttribute
WMTextView.TextView.WheelMove
Дальше вглубь копать безполезно. Теперь нужно научиться менять шрифт в присутствии CharacterStyle.
Для этого нужно понять, хранится ли стиль в самом текстовом документе или он глобален. Второй случай хуже. Возвращаемся в TextUtilities.BluebottleDecoder.

Нда. Стиль глобален, но зато он глобален. Если мы его оторвём и запихнём в документ, мы сможем масштабировать этот документ. Зато пока стиль един, мы можем управлять сразу всеми документами. Как лучше-то? По идее, если стиль глобален, то клонировать его по документом - увеличивает энтропию. И что же нам, терпеть без масштабирования? Или мы ещё что можем сделать - ввести параметр масштаба для данного документа. Но и это может нас куда-нибудь далеко завести.

В общем, пока оставим, пожалуй, как есть. Мы таки можем управлять стилем документов в формате bbt, если нам прямо приспичило их увеличивать или уменьшать. Хотя ещё можно как сделать: уничтожать стили при первой попытке изменения масштаба. Но сначала проверим, что изменение масштаба при уничтоженных стилях работает.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 29.04.20 23:41

Вообще, если смотреть на VS Code, они там не заморачиваются со стилями, а делают единый размер для всего документа. Это нормально для всего, кроме вёрстки. Хотя... у нас bbt как раз для вёрстки (веб-страниц)... Блииин.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 30.04.20 00:04

После временного отключения вызовов SetCharacterStyle и SetParagraphStyle масштабирование bbt заработало. Ну ок, включаю обратно и давайте уничтожать стили при попытке масштабирования и писать об этом в KernelLog.
Последний раз редактировалось БудДен 30.04.20 01:24, всего редактировалось 1 раз.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 30.04.20 00:08

Ещё не совсем ясно, где же обработчик Ctrl-стрелка-вверх, который то же самое делает. Но потом поищем.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 30.04.20 01:19

Обработчик нашёлся. Теперь всё "работает" так:

- при попытке масштабирования с помощью ctrl-колесо мыши или ctrl-стрелка вверх стили в документе bbt стираются и масштабирование работает
- однако при последующем сохранении стили откуда-то воскресают. Ну и хорошо, это не баг, это фича.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Шрифты и формат BBT

Сообщение БудДен » 30.04.20 20:39

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

Ответить