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

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

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

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

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

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

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

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

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

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

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

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

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

БудДен
Сообщения: 2839
Зарегистрирован: 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.

БудДен
Сообщения: 2839
Зарегистрирован: 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;
Аналогично (наверное) для приблизительных шрифтов.

БудДен
Сообщения: 2839
Зарегистрирован: 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 не нашлось. Но, возможно, такой шрифт попал в систему через другой загрузчик.

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

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

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

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

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

БудДен
Сообщения: 2839
Зарегистрирован: 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

БудДен
Сообщения: 2839
Зарегистрирован: 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

БудДен
Сообщения: 2839
Зарегистрирован: 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 глючное.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

БудДен
Сообщения: 2839
Зарегистрирован: 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" стилями, непосредственно заданными в тексте. Как лучше поступить - неясно, но это влияет на веб-браузер. Есть промежуточный вариант - сделать, чтобы стили масштабировались, но не сохранялись. Тогда будет удобнее работать, но придётся менять размер шрифта каждый раз. Выглядит терпимым.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сообщение БудДен » 30.04.20 22:13

Адище. В итоге я нашёл, что PTMono Regular и PTSans Regular приемлемо выглядят и отображаются без глюков. Поэтому остальные шрифты постараюсь изжить. Также есть WMDefaultFont, который, ессно, без кириллицы. На него ставлю HALT. Посмотрим, что будет...

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

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

Сообщение БудДен » 30.04.20 22:43

PT Sans Regular ничего, PT Mono regular сошёл с дистанции из-за знака равенства, который при определённом размере становится минусом, а потом опять превращается в знак равенства. Теперь нету моноширинного шрифта, буду искать дальше... Anonymous Pro Bold не содержит багов, но на вид чудовищен.

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

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

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

В итогде везде, где мог, поставил DejaVu , но есть ещё встроенный шрифт, который нельзя не загружать. В целом стало лучше.

Игнат99
Сообщения: 124
Зарегистрирован: 27.09.23 15:29

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

Сообщение Игнат99 » 27.09.23 17:02

БудДен писал(а):
29.04.20 23:41
Вообще, если смотреть на VS Code, они там не заморачиваются со стилями, а делают единый размер для всего документа. Это нормально для всего, кроме вёрстки. Хотя... у нас bbt как раз для вёрстки (веб-страниц)... Блииин.
https://github.com/btreut/a2

Надеюсь что не совсем ошибся темой. Просто хотелось бы узнать в каком состоянии сейчас ОС А2 в рамках русификации?

Создал этот репозитарий 8 лет назад, а потом по настойчивому требованию одного студента из Швейцарии передал ему права. Он сказал что имеет некое отношение к этой системе.

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

Вместо них я хотел использовать "бесконечный" дисплей. Для тестирования этой возможности я открыл файл операционной системы в текстовом редакторе. И даже более 2 файлов. Затем растянул окно до максимальной координаты окон, так чтоб весь текст был в буфере обмена.

К сожалению на моём Линуксе это привело к ошибке. Я решил что в Голубой Бутылки (в смысле из старинного стекла) или А2 слишком много не отловленных багов. И совсем нет тестов (если я не путаю). И на том этапе (когда я не мог тратить слишком много времени на отлов ошибок), я посчитал А2 слишком сырой в силу её студенческой разработки.

Хотя целостность ассемблера и дизассемблера очень подкупала.

Ну и совсем недавно я узнал что на 8-битных процессорах практически невозможно запускать оконный интерфейс из за ограничений в адрессации и скорости. Хорошо когда есть возможность представить структуру чипа в топологии.

Так например микропроцессор 6800 совершенно не подходит в отличии от 68000 или z80 или 8086 где имеются достаточный объем внутренней памяти или кеша около ядра. На ARM Cortex-A9 Samsung на базе чипа Exynos 4210 с тактовой частотой 1.2 ГГц с которым я работал к сожалению были ошибки при переключении ядер. Поэтому до сих пор все приложения для старых планшетов 2012 года по сути имеют только один поток.

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

Поэтому часть ОС А2 по перетаскиванию и перерисовыванию окон на экране, мне видится совершенно устаревшей по 2 вышеназванным причинам.

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

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

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

Состояние работоспособное, запускается на x86 в QEMU и на некоторых железках (здесь в форуме где-то есть список железок, на которых запускалась, и результаты). Также запускается как приложение в Linux и Win32. Также запускается на Zybo Z7 (видеокарта в FPGA) и на эмуляторе оной (без эмуляции FPGA). При запуске на железке гуй не работает, ввод команд только через UART.

Под Linux баги есть, но в целом работать можно (я работал). Касаемо окошек - я не любитель бесконечных дисплеев, сделал команды Alt-Enter 4 (на левую половину экрана), Alt-Enter 6 (на правую) и Alt-Enter 5 (на весь экран). Такой вот мозаичный менеджер окошек для бедных.

Приложения Oberon и Voyager я выкинул для облегчения полёта, равно как и кооперативную версию (она всё равно не вполне работоспособна была).

Выкинуть гуй из ЯОС можно, но не нужно, т.к. там уникальная (на данный момент) среда разработки, позволяющая переходить к определениям сущностей (процедур, типов, модулей). Других таких сред для активного оберона нет, и без этого я не вижу смысла вообще пользоваться этой технологией, ну разве только для тех, кто может прочитать и запомнить наизусть миллион строк.

Игнат99
Сообщения: 124
Зарегистрирован: 27.09.23 15:29

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

Сообщение Игнат99 » 27.09.23 23:32

Я в другой ветке форума предложил технологию похожую на топологию для создания приложений.
И там же предложил концепцию нового чипа на который по моему мнению нужно держать ориентир.
Основную организацию мемоник консонантного письма предлождил для ассемблера.

viewtopic.php?f=12&t=666&p=4204#p4202

Ответить