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

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

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

Сообщение БудДен » 26.04.20 16:04

Есть какая-то взаимосвязь между форматом BBT и отображением картинок, поскольку, как я понял, веб-браузер как-то использовал формат BBT для отображения веб-страниц, а в веб-страницах картинки есть.
Формат Oberon, в котором есть ряд документов с расширением Text, плох тем, что кириллица в нём пропадает при сохранении.

Для получения формата BBT нужно переключить формат в блокноте (Notepad) и сохранить файл. Этот формат основан на XML. Но со шрифтами творятся чудеса. Например, если сохранить Tutorial в формате BBT, то после повторного открытия шрифты уменьшаются и не слушаются команд установки стиля от инструмента Win-Esc/Edit/Styles.

Да и вообще этот инструмент странный. Он не всегда считывает шрифт, не всегда устанавливает, не всегда вообще работает и непонятно, как определить список доступных шрифтов.

Вот если со всем этим разобраться, то можно будет объявить формат Оберон устаревшим и всюду использовать вместо него ббт.

Этому и посвящена данная тема.

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

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

Сообщение БудДен » 26.04.20 16:11

Загрузка шрифтов управляется конфигурацией. WindowManager/FontManager/FontLoaders - здесь перечислены команды загрузки шрифтов, такие как WMOberonFonts.LoadExactFont и WMOTFonts.LoadApproximateFont. Эти команды ниоткуда больше не вызываются, а значит, нужно смотреть, как используется этот FontLoaders. Наша цель - понять, какие имена шрифтов существуют в системе.

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

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

Сообщение БудДен » 26.04.20 16:33

Обращение к этой ветке конфигурации находится в WMFontManger.Mod/.../GetConfig. GetConfig вызывается из WMFontManager.Install, а он в свою очередь вызывается при загрузке модуля WindowManager.Mod. И что же происходит в GetConfig?

Оттуда вызываются AddExact и AddApproximate с Value, а Value - это как раз команда, например, WMOTFonts.LoadExactFont. Посмотрим, что же происходит в AddExact.

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

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

Сообщение БудДен » 26.04.20 16:45

А там только заполняется список exactLoaders и approximateLoaders. Где они используются? Используются они в FontManager.GetFont(CONST name : ARRAY OF CHAR; size : SIZE; style : SET) : WMGraphics.Font;

В нём реализован кеш шрифтов, но при его пустоте вызывается процедура, поименованная в XML-файле.
Этой процедуре передаётся объект FontInfo:

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

	FontInfo* = OBJECT
	VAR
		name* : String;
		size* : SIZE;
		style* : SET;
	END FontInfo;
Аналогично (наверное) для приблизительных шрифтов.

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

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

Сообщение БудДен » 26.04.20 16:55

Изучение WMOTFonts.LoadFont показывает, что имя шрифта - это имя файла, откуда его нужно взять. Попробуем посмотреть, какие файлы система пытается открывать. Для этого слегка меняем исходник:

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

(* WMOTFonts.Mod/Font.Load *)
		PROCEDURE Load(filename : ARRAY OF CHAR; size : SIZE) : BOOLEAN;
		VAR i, j, k, ngri, splitCount : SIGNED32; res : SIGNED16;
			ascent, descent : SIGNED32;
		BEGIN
			KernelLog.String("WMOTFonts.Font.Load - пытаюсь загрузить шрифт из файла ");
			KernelLog.String(filename); KernelLog.Ln;
			fontFile := Files.Old(filename);															(* open file *)
			IF fontFile = NIL THEN 
				KernelLog.String("WMOTFonts.Font.Load - файл шрифта не найден"); RETURN FALSE END;
			ofont := OpenType.Open(filename);														(* read file *)
			IF ofont = NIL THEN KernelLog.String("OT: Could not open Font: "); KernelLog.String(filename); KernelLog.Ln; RETURN FALSE END;
И сразу видим:

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

WMOTFonts.Font.Load - пытаюсь загрузить шрифт из файла IBMPlexMonob.ttf
WMOTFonts.Font.Load - файл шрифта не найденWMOTFonts.Font.Load - пытаюсь загрузить шрифт из файла IBMPlexMono-Bold.ttf
WMOTFonts.Font.Load - файл шрифта не найденWMOTFonts.Font.Load - пытаюсь загрузить шрифт из файла IBMPlexMonobd.ttf
WMOTFonts.Font.Load - файл шрифта не найденWMOTFonts.Font.Load - пытаюсь загрузить шрифт из файла IBMPlexMono_bd.ttf
WMOTFonts.Font.Load - пытаюсь загрузить шрифт из файла IBMPlexMono.ttf
WMOTFonts.Font.Load - пытаюсь загрузить шрифт из файла IBMPlexMonoi.ttf
WMOTFonts.Font.Load - файл шрифта не найденWMOTFonts.Font.Load - пытаюсь загрузить шрифт из файла IBMPlexMono-Italic.ttf
WMOTFonts.Font.Load - файл шрифта не найденWMOTFonts.Font.Load - пытаюсь загрузить шрифт из файла IBMPlexMono_i.ttf
Кучу раз мы промахнулись, т.к. имена файлов не соответствуют ожиданиям, но шрифты IBMPlexMono.ttf всё же загрузились. Посему в Меню/Edit/Styles вписываем шрифт IBMPlexMono - и ура! А шрифта Courier.fft не нашлось. Но, возможно, такой шрифт попал в систему через другой загрузчик.

Плохо то, что инструмент спокойно воспринимает несуществующее имя шрифта и никак не ругается.

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

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

Сообщение БудДен » 26.04.20 21:30

Видимо, надо выпилить шрифт Оберон, т.к. открыть его сторонним инструментом я не смог, и непонятно, как в него добавить кириллицу. Останутся только шрифты opentype

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

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

Сообщение БудДен » 27.04.20 14:30

Нужно привести в соответствие имена имеющихся шрифтов и алгоритм их поиска. В большинстве шрифтов названия идут как _bd и т.п. Так и сделаем в алгоритме поиска, а недостающие шрифты получим копированием. Как-то так:

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

den@d18:/y/jaos/source$ cp VeraBd.ttf Vera_bd.ttf
den@d18:/y/jaos/source$ cp VeraBI.ttf Vera_bi.ttf
den@d18:/y/jaos/source$ cp VeraI.ttf Vera_i.ttf
den@d18:/y/jaos/source$ cp VeraMoBd.ttf VeraMo_bd.ttf
den@d18:/y/jaos/source$ cp VeraMoI.ttf VeraMo_i.ttf
den@d18:/y/jaos/source$ cp VeraSeBd.ttf VeraSe_bd.ttf
den@d18:/y/jaos/source$ cp VeraMoBI.ttf VeraMo_bi.ttf

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

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

Сообщение БудДен » 27.04.20 16:54

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

В Configuration.XML отключаем все загрузчики шрифтов (FontLoaders), кроме OTFonts и копируем файлы Vera*.ttf в Oberon*.ttf, чтобы шрифт Оберон, к-рый везде прописан, не отвалился как-нибудь насовсем.

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

den@d18:/y/jaos/source$ cp Vera.ttf Oberon.ttf
den@d18:/y/jaos/source$ cp VeraBd.ttf OberonBd.ttf
den@d18:/y/jaos/source$ cp VeraBI.ttf OberonBI.ttf
den@d18:/y/jaos/source$ cp VeraI.ttf OberonI.ttf
https://gitlab.com/budden/jaos/-/commit ... 853a0d2b3a

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

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

Сообщение БудДен » 27.04.20 21:37

Теперь пытаемся понять, почему для файла, загруженного в формате BBT, не удаётся поменять шрифт. И выясняем следующее:

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

<?xml version="1.0" encoding="UTF-8"?>
<?bluebottle format version="0.1" ?>
<?xml-stylesheet type="text/xsl" href="http://bluebottle.ethz.ch/bluebottle.xsl" ?>
<Text>
<Span style="Normal"><![CDATA[dfddddddd
d]]></Span><Span style="Bold"><![CDATA[dd]]></Span><Span style="Normal"><![CDATA[dd]]></Span><Span style="AdHoc Vera 25 3 0 00000FF 0000000"><![CDATA[dd]]></Span><Span style="Normal"><![CDATA[d]]></Span><Span style="AdHoc Vera 24 2 0 F0000FF 0FF40FF"><![CDATA[dee]]></Span>

</Text>
Во-первых, таблица стилей в интернете, а такого сайта нет.
Во-вторых, стиль Normal почему-то не перешибается
В-третьих, вообще сохранение и восстановление стилей в формате bbt глючное.

Вот всё это надо починить.

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

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

Сообщение БудДен » 27.04.20 22:20

WMTextStyleTool - это тот инструмент, который отвечает за ввод стилей пользователем.
Блин. Это не он! В меню вставлен другой - WMTextTool.

Какой из двух хуже? Оба. Но похоже, что WMTextStyleTool более работоспособен.

Честно сказать, у меня складывается всё более устойчивое ощущение, что я нахожусь на помойке :)

Ответить