Шрифты и формат BBT
Шрифты и формат BBT
Есть какая-то взаимосвязь между форматом BBT и отображением картинок, поскольку, как я понял, веб-браузер как-то использовал формат BBT для отображения веб-страниц, а в веб-страницах картинки есть.
Формат Oberon, в котором есть ряд документов с расширением Text, плох тем, что кириллица в нём пропадает при сохранении.
Для получения формата BBT нужно переключить формат в блокноте (Notepad) и сохранить файл. Этот формат основан на XML. Но со шрифтами творятся чудеса. Например, если сохранить Tutorial в формате BBT, то после повторного открытия шрифты уменьшаются и не слушаются команд установки стиля от инструмента Win-Esc/Edit/Styles.
Да и вообще этот инструмент странный. Он не всегда считывает шрифт, не всегда устанавливает, не всегда вообще работает и непонятно, как определить список доступных шрифтов.
Вот если со всем этим разобраться, то можно будет объявить формат Оберон устаревшим и всюду использовать вместо него ббт.
Этому и посвящена данная тема.
Формат Oberon, в котором есть ряд документов с расширением Text, плох тем, что кириллица в нём пропадает при сохранении.
Для получения формата BBT нужно переключить формат в блокноте (Notepad) и сохранить файл. Этот формат основан на XML. Но со шрифтами творятся чудеса. Например, если сохранить Tutorial в формате BBT, то после повторного открытия шрифты уменьшаются и не слушаются команд установки стиля от инструмента Win-Esc/Edit/Styles.
Да и вообще этот инструмент странный. Он не всегда считывает шрифт, не всегда устанавливает, не всегда вообще работает и непонятно, как определить список доступных шрифтов.
Вот если со всем этим разобраться, то можно будет объявить формат Оберон устаревшим и всюду использовать вместо него ббт.
Этому и посвящена данная тема.
Re: Шрифты и формат BBT
Загрузка шрифтов управляется конфигурацией. WindowManager/FontManager/FontLoaders - здесь перечислены команды загрузки шрифтов, такие как WMOberonFonts.LoadExactFont и WMOTFonts.LoadApproximateFont. Эти команды ниоткуда больше не вызываются, а значит, нужно смотреть, как используется этот FontLoaders. Наша цель - понять, какие имена шрифтов существуют в системе.
Re: Шрифты и формат BBT
Обращение к этой ветке конфигурации находится в WMFontManger.Mod/.../GetConfig. GetConfig вызывается из WMFontManager.Install, а он в свою очередь вызывается при загрузке модуля WindowManager.Mod. И что же происходит в GetConfig?
Оттуда вызываются AddExact и AddApproximate с Value, а Value - это как раз команда, например, WMOTFonts.LoadExactFont. Посмотрим, что же происходит в AddExact.
Оттуда вызываются AddExact и AddApproximate с Value, а Value - это как раз команда, например, WMOTFonts.LoadExactFont. Посмотрим, что же происходит в AddExact.
Re: Шрифты и формат BBT
А там только заполняется список exactLoaders и approximateLoaders. Где они используются? Используются они в FontManager.GetFont(CONST name : ARRAY OF CHAR; size : SIZE; style : SET) : WMGraphics.Font;
В нём реализован кеш шрифтов, но при его пустоте вызывается процедура, поименованная в XML-файле.
Этой процедуре передаётся объект FontInfo:
Аналогично (наверное) для приблизительных шрифтов.
В нём реализован кеш шрифтов, но при его пустоте вызывается процедура, поименованная в XML-файле.
Этой процедуре передаётся объект FontInfo:
Код: Выделить всё
FontInfo* = OBJECT
VAR
name* : String;
size* : SIZE;
style* : SET;
END FontInfo;
Re: Шрифты и формат BBT
Изучение WMOTFonts.LoadFont показывает, что имя шрифта - это имя файла, откуда его нужно взять. Попробуем посмотреть, какие файлы система пытается открывать. Для этого слегка меняем исходник:
И сразу видим:
Кучу раз мы промахнулись, т.к. имена файлов не соответствуют ожиданиям, но шрифты IBMPlexMono.ttf всё же загрузились. Посему в Меню/Edit/Styles вписываем шрифт IBMPlexMono - и ура! А шрифта Courier.fft не нашлось. Но, возможно, такой шрифт попал в систему через другой загрузчик.
Плохо то, что инструмент спокойно воспринимает несуществующее имя шрифта и никак не ругается.
Код: Выделить всё
(* 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
Плохо то, что инструмент спокойно воспринимает несуществующее имя шрифта и никак не ругается.
Re: Шрифты и формат BBT
Видимо, надо выпилить шрифт Оберон, т.к. открыть его сторонним инструментом я не смог, и непонятно, как в него добавить кириллицу. Останутся только шрифты opentype
Re: Шрифты и формат BBT
Нужно привести в соответствие имена имеющихся шрифтов и алгоритм их поиска. В большинстве шрифтов названия идут как _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
Re: Шрифты и формат BBT
Оказывается, дело в выводе подчёркивания в некоторых шрифтах - оно выводится как какое-то тире (возможно, длинное). Т.е старый алгоритм был не настолько уж плох. Всё откатываем, но ускоряем избавление от шрифта Оберон.
В Configuration.XML отключаем все загрузчики шрифтов (FontLoaders), кроме OTFonts и копируем файлы Vera*.ttf в Oberon*.ttf, чтобы шрифт Оберон, к-рый везде прописан, не отвалился как-нибудь насовсем.
https://gitlab.com/budden/jaos/-/commit ... 853a0d2b3a
В 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
Re: Шрифты и формат BBT
Теперь пытаемся понять, почему для файла, загруженного в формате BBT, не удаётся поменять шрифт. И выясняем следующее:
Во-первых, таблица стилей в интернете, а такого сайта нет.
Во-вторых, стиль Normal почему-то не перешибается
В-третьих, вообще сохранение и восстановление стилей в формате 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 глючное.
Вот всё это надо починить.
Re: Шрифты и формат BBT
WMTextStyleTool - это тот инструмент, который отвечает за ввод стилей пользователем.
Блин. Это не он! В меню вставлен другой - WMTextTool.
Какой из двух хуже? Оба. Но похоже, что WMTextStyleTool более работоспособен.
Честно сказать, у меня складывается всё более устойчивое ощущение, что я нахожусь на помойке :)
Блин. Это не он! В меню вставлен другой - WMTextTool.
Какой из двух хуже? Оба. Но похоже, что WMTextStyleTool более работоспособен.
Честно сказать, у меня складывается всё более устойчивое ощущение, что я нахожусь на помойке :)
Re: Шрифты и формат BBT
Во всяком случае, глядя на оба инструмента сразу, можно представить себе, что они создали где-то стили (кстати, где?)
По нажатию на кнопочку устанавливается стиль. Также можно установить конкретные параметры (шрифт и т.п.)
В целом такая идея выглядит не совсем абсурдной. Но, во-первых, непонятно, как она должна работать, во-вторых, она не работает.
Попробую разобраться, держа в руках оба исходника. В принципе-то можно взять старую версию и надеяться, что оно когда-то работало.
По нажатию на кнопочку устанавливается стиль. Также можно установить конкретные параметры (шрифт и т.п.)
В целом такая идея выглядит не совсем абсурдной. Но, во-первых, непонятно, как она должна работать, во-вторых, она не работает.
Попробую разобраться, держа в руках оба исходника. В принципе-то можно взять старую версию и надеяться, что оно когда-то работало.
Re: Шрифты и формат BBT
Итак, время 00:00, надо ложиться спать пораньше. Где же берутся стили?
WMTextStyleTool (который более работающий)
WMTextStyleTool (который более работающий)
Re: Шрифты и формат BBT
Оказывается, они берутся из файлов UserTextStyles.XML и DefaultTextStyles.XML (и наверняка это написано в документации :) )
Инициализация происходит в процедуре Texts.InitDefaultStyles. Сразу меняем там размер 10 на 14.
Инициализация происходит в процедуре Texts.InitDefaultStyles. Сразу меняем там размер 10 на 14.
Re: Шрифты и формат BBT
В формате файла Oberon (.Text) стили кодируются номерами. Размеры шрифтов меняются при масштабировании. При последующем сохранении, размеры, которые получились, кодируются в примерно таком виде в файле .Text: "Oberon24b.Scn.Fnt".
Кроме того, в раскодировщике файла Оберон видны следы своеобразного OLE - там вырезан код, который должен загрузить библиотеку, отвечающую за отображения объектов такого типа.
При преобразовании текста в формат bbt стили букв угадываются по цвету и им даются имена, которых в формате Оберон в принципе нет (там только анонимные цифры). Именованные шрифты - это само по себе это может быть даже и неплохо.
Плохо то, что если документ открыт в формате bbt, то масштабирование не работает. Чтобы оно заработало, нужно, видимо, сделать две вещи:
1. Сделать, чтобы масштабирование меняло стили, если стили есть. Сейчас оно их не меняет.
2. Сделать, чтобы стили запоминались вместе с документом.
Есть более энтропийный способ - расширить все стили, после этого они потеряют имена и станут "Ad hoc" стилями, непосредственно заданными в тексте. Как лучше поступить - неясно, но это влияет на веб-браузер. Есть промежуточный вариант - сделать, чтобы стили масштабировались, но не сохранялись. Тогда будет удобнее работать, но придётся менять размер шрифта каждый раз. Выглядит терпимым.
Кроме того, в раскодировщике файла Оберон видны следы своеобразного OLE - там вырезан код, который должен загрузить библиотеку, отвечающую за отображения объектов такого типа.
При преобразовании текста в формат bbt стили букв угадываются по цвету и им даются имена, которых в формате Оберон в принципе нет (там только анонимные цифры). Именованные шрифты - это само по себе это может быть даже и неплохо.
Плохо то, что если документ открыт в формате bbt, то масштабирование не работает. Чтобы оно заработало, нужно, видимо, сделать две вещи:
1. Сделать, чтобы масштабирование меняло стили, если стили есть. Сейчас оно их не меняет.
2. Сделать, чтобы стили запоминались вместе с документом.
Есть более энтропийный способ - расширить все стили, после этого они потеряют имена и станут "Ad hoc" стилями, непосредственно заданными в тексте. Как лучше поступить - неясно, но это влияет на веб-браузер. Есть промежуточный вариант - сделать, чтобы стили масштабировались, но не сохранялись. Тогда будет удобнее работать, но придётся менять размер шрифта каждый раз. Выглядит терпимым.
Re: Шрифты и формат BBT
Как сделать масштабирование шрифта? Есть процедура WMTextView.GetNewSize - начнём копать от неё вглубь стека.
Дальше вглубь копать безполезно. Теперь нужно научиться менять шрифт в присутствии CharacterStyle.
Для этого нужно понять, хранится ли стиль в самом текстовом документе или он глобален. Второй случай хуже. Возвращаемся в TextUtilities.BluebottleDecoder.
Нда. Стиль глобален, но зато он глобален. Если мы его оторвём и запихнём в документ, мы сможем масштабировать этот документ. Зато пока стиль един, мы можем управлять сразу всеми документами. Как лучше-то? По идее, если стиль глобален, то клонировать его по документом - увеличивает энтропию. И что же нам, терпеть без масштабирования? Или мы ещё что можем сделать - ввести параметр масштаба для данного документа. Но и это может нас куда-нибудь далеко завести.
В общем, пока оставим, пожалуй, как есть. Мы таки можем управлять стилем документов в формате bbt, если нам прямо приспичило их увеличивать или уменьшать. Хотя ещё можно как сделать: уничтожать стили при первой попытке изменения масштаба. Но сначала проверим, что изменение масштаба при уничтоженных стилях работает.
Код: Выделить всё
ChangeAttribute
WMTextView.TextView.WheelMove
Для этого нужно понять, хранится ли стиль в самом текстовом документе или он глобален. Второй случай хуже. Возвращаемся в TextUtilities.BluebottleDecoder.
Нда. Стиль глобален, но зато он глобален. Если мы его оторвём и запихнём в документ, мы сможем масштабировать этот документ. Зато пока стиль един, мы можем управлять сразу всеми документами. Как лучше-то? По идее, если стиль глобален, то клонировать его по документом - увеличивает энтропию. И что же нам, терпеть без масштабирования? Или мы ещё что можем сделать - ввести параметр масштаба для данного документа. Но и это может нас куда-нибудь далеко завести.
В общем, пока оставим, пожалуй, как есть. Мы таки можем управлять стилем документов в формате bbt, если нам прямо приспичило их увеличивать или уменьшать. Хотя ещё можно как сделать: уничтожать стили при первой попытке изменения масштаба. Но сначала проверим, что изменение масштаба при уничтоженных стилях работает.
Re: Шрифты и формат BBT
Вообще, если смотреть на VS Code, они там не заморачиваются со стилями, а делают единый размер для всего документа. Это нормально для всего, кроме вёрстки. Хотя... у нас bbt как раз для вёрстки (веб-страниц)... Блииин.
Re: Шрифты и формат BBT
После временного отключения вызовов SetCharacterStyle и SetParagraphStyle масштабирование bbt заработало. Ну ок, включаю обратно и давайте уничтожать стили при попытке масштабирования и писать об этом в KernelLog.
Последний раз редактировалось БудДен 30.04.20 01:24, всего редактировалось 1 раз.
Re: Шрифты и формат BBT
Ещё не совсем ясно, где же обработчик Ctrl-стрелка-вверх, который то же самое делает. Но потом поищем.
Re: Шрифты и формат BBT
Обработчик нашёлся. Теперь всё "работает" так:
- при попытке масштабирования с помощью ctrl-колесо мыши или ctrl-стрелка вверх стили в документе bbt стираются и масштабирование работает
- однако при последующем сохранении стили откуда-то воскресают. Ну и хорошо, это не баг, это фича.
- при попытке масштабирования с помощью ctrl-колесо мыши или ctrl-стрелка вверх стили в документе bbt стираются и масштабирование работает
- однако при последующем сохранении стили откуда-то воскресают. Ну и хорошо, это не баг, это фича.
Re: Шрифты и формат BBT
В ходе долгой и мучительной отладки, но особенно в ходе чтения журнала модификаций, удалось понять, что шрифт Vera не содержит кириллицы, которая заменяется какой-то помойкой. Ввиду этого будут заменены все шрифт. Шрифт IBMPlexMono содержит баг - двойная кавычка выглядит как одинарная, поэтому его я тоже выкину.
Re: Шрифты и формат BBT
Адище. В итоге я нашёл, что PTMono Regular и PTSans Regular приемлемо выглядят и отображаются без глюков. Поэтому остальные шрифты постараюсь изжить. Также есть WMDefaultFont, который, ессно, без кириллицы. На него ставлю HALT. Посмотрим, что будет...
Re: Шрифты и формат BBT
PT Sans Regular ничего, PT Mono regular сошёл с дистанции из-за знака равенства, который при определённом размере становится минусом, а потом опять превращается в знак равенства. Теперь нету моноширинного шрифта, буду искать дальше... Anonymous Pro Bold не содержит багов, но на вид чудовищен.
Re: Шрифты и формат BBT
В итогде везде, где мог, поставил DejaVu , но есть ещё встроенный шрифт, который нельзя не загружать. В целом стало лучше.
Re: Шрифты и формат 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 вышеназванным причинам.
Re: Шрифты и формат BBT
Состояние работоспособное, запускается на x86 в QEMU и на некоторых железках (здесь в форуме где-то есть список железок, на которых запускалась, и результаты). Также запускается как приложение в Linux и Win32. Также запускается на Zybo Z7 (видеокарта в FPGA) и на эмуляторе оной (без эмуляции FPGA). При запуске на железке гуй не работает, ввод команд только через UART.
Под Linux баги есть, но в целом работать можно (я работал). Касаемо окошек - я не любитель бесконечных дисплеев, сделал команды Alt-Enter 4 (на левую половину экрана), Alt-Enter 6 (на правую) и Alt-Enter 5 (на весь экран). Такой вот мозаичный менеджер окошек для бедных.
Приложения Oberon и Voyager я выкинул для облегчения полёта, равно как и кооперативную версию (она всё равно не вполне работоспособна была).
Выкинуть гуй из ЯОС можно, но не нужно, т.к. там уникальная (на данный момент) среда разработки, позволяющая переходить к определениям сущностей (процедур, типов, модулей). Других таких сред для активного оберона нет, и без этого я не вижу смысла вообще пользоваться этой технологией, ну разве только для тех, кто может прочитать и запомнить наизусть миллион строк.
Под Linux баги есть, но в целом работать можно (я работал). Касаемо окошек - я не любитель бесконечных дисплеев, сделал команды Alt-Enter 4 (на левую половину экрана), Alt-Enter 6 (на правую) и Alt-Enter 5 (на весь экран). Такой вот мозаичный менеджер окошек для бедных.
Приложения Oberon и Voyager я выкинул для облегчения полёта, равно как и кооперативную версию (она всё равно не вполне работоспособна была).
Выкинуть гуй из ЯОС можно, но не нужно, т.к. там уникальная (на данный момент) среда разработки, позволяющая переходить к определениям сущностей (процедур, типов, модулей). Других таких сред для активного оберона нет, и без этого я не вижу смысла вообще пользоваться этой технологией, ну разве только для тех, кто может прочитать и запомнить наизусть миллион строк.
Re: Шрифты и формат BBT
Я в другой ветке форума предложил технологию похожую на топологию для создания приложений.
И там же предложил концепцию нового чипа на который по моему мнению нужно держать ориентир.
Основную организацию мемоник консонантного письма предлождил для ассемблера.
viewtopic.php?f=12&t=666&p=4204#p4202
И там же предложил концепцию нового чипа на который по моему мнению нужно держать ориентир.
Основную организацию мемоник консонантного письма предлождил для ассемблера.
viewtopic.php?f=12&t=666&p=4204#p4202