OberonCore
https://forum.oberoncore.ru/

Портирование HostFonts
https://forum.oberoncore.ru/viewtopic.php?f=34&t=2488
Страница 1 из 2

Автор:  Роман М. [ Пятница, 26 Март, 2010 22:05 ]
Заголовок сообщения:  Портирование HostFonts

Первое, с чего начинается портирование подсистемы Hosts - это модуль HostFonts.

Поэтому требуется определить на какой библиотеке его исполнять.
Некоторые моменты:
  1. несоответствие "родной" Линуксу UTF-8 и двухбайтовой UTF-16 у КП;
  2. требуется определять метрики строк и текста;
  3. наличие набора шрифтов разного рода (TrueType, PCF, ...);
  4. сглаживание шрифтов особенно актуально с наличием ЖК-мониторов.

Есть FreeType, Pango, xlib, Qt, GDK, ...

Ваши соображения? А, может, уже готовые наработки имеются?

Автор:  Александр Ильин [ Пятница, 26 Март, 2010 23:12 ]
Заголовок сообщения:  Re: Портирование HostFonts

Роман М. писал(а):
* сглаживание шрифтов особенно актуально с наличием ЖК-мониторов.
Ваши соображения?
Сколько лет уже у меня ЖК-мониторы - всегда и везде выключаю эту гадость. Замыливает изображение почём зря, теряется контраст, ухудшается читабельность.

Автор:  kemiisto [ Суббота, 27 Март, 2010 00:45 ]
Заголовок сообщения:  Re: Портирование HostFonts

Александр Ильин писал(а):
Сколько лет уже у меня ЖК-мониторы - всегда и везде выключаю эту гадость. Замыливает изображение почём зря, теряется контраст, ухудшается читабельность.

Единственное, что можно "диагностировать" по Вашему отношению с сглаживанию - у Вас Windows. И видимо XP.

Автор:  Иван Горячев [ Суббота, 27 Март, 2010 05:50 ]
Заголовок сообщения:  Re: Портирование HostFonts

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

2. Поскольку всё равно придётся определять метрики (на и кернинг тут вспоминают), то перекодирование 8<->16 проблемы не представляет - просто ещё одна операция над символом.

3. Различные шрифты и сглаживание - это разве вопросы библиотеки? Это же система должна делать...

P.S. А первый модуль - HostFiles, за ним HostRegistry, а уже потом... ;)

Автор:  Илья Ермаков [ Суббота, 27 Март, 2010 08:12 ]
Заголовок сообщения:  Re: Портирование HostFonts

FreeType вроде бы в основе у тех же X на Линуксах. Достаточно базовая вещь, на которую опираются.

По поводу гр.б. - есть ещё GD.

Автор:  Роман М. [ Четверг, 01 Апрель, 2010 20:00 ]
Заголовок сообщения:  Re: Портирование HostFonts

Мне представляется, что перед переносом в Линукс требуется перевести подсистему HostFonts на основу FreeType, предварительно обкатав её и убедившись в полноценной работе в ОС Windows. Только тогда можно безболезненно пробовать в Линуксе.

Автор:  Илья Ермаков [ Четверг, 01 Апрель, 2010 21:34 ]
Заголовок сообщения:  Re: Портирование HostFonts

Разумно.

Да иначе и не отладить.

Автор:  Info21 [ Четверг, 01 Апрель, 2010 21:45 ]
Заголовок сообщения:  Re: Портирование HostFonts

Иван Горячев писал(а):
1. У всех опенсоурсных продуктов есть одна особенность - негарантированное время жизни. Так что шрифтовую/графическую библиотеку надо брать наиболее солидную, пусть даже в ущерб скорости и функционалу.
Теми же соображениями руководствуются в ЦЕРНе. Имеет смысл посмотреть, что там. Допуск для этого не нужен.

Теперь еще и российский линукс... будет.

Автор:  Димыч [ Пятница, 02 Апрель, 2010 21:21 ]
Заголовок сообщения:  Re: Портирование HostFonts

Роман М. писал(а):
Первое, с чего начинается портирование подсистемы Hosts - это модуль HostFonts.

Поэтому требуется определить на какой библиотеке его исполнять.
Некоторые моменты:
  1. несоответствие "родной" Линуксу UTF-8 и двухбайтовой UTF-16 у КП;
  2. требуется определять метрики строк и текста;
  3. наличие набора шрифтов разного рода (TrueType, PCF, ...);
  4. сглаживание шрифтов особенно актуально с наличием ЖК-мониторов.

Есть FreeType, Pango, xlib, Qt, GDK, ...

Ваши соображения? А, может, уже готовые наработки имеются?


К переносу ГУИ на Линукс, на мой взгляд, надо подходить более комплексно.
Модуль HostFonts, о котором идет речь, в первую очередь предназначен для того, чтобы обеспечить создание шрифтов для формирования ГУИ. Больше того, "Fonts are used by models, which contain formatted text, by views, which draw text, and by command which operate on text" (из документации к Fonts).
Так вот, штука заключается в том, что в HostFonts шрифты создаются не сами по себе (как почти следует из документации к Fonts), а все-же в зависимости от текущей реализации каркаса. В текущей реализации HostFonts опирается на WinAPI (разумеется), как и весь остальной каркас. И шрифты создаются таким образом, что внутри себя содержат дескриптор, получаемый через CreateFont. И этот дескриптор неявно затем используется во всех операциях со шрифтами.
Делаем промежуточный вывод - шрифт используется такой, какой предоставляется средой, используемой каркасом. Еще раз повторю, что в текущей реализации весь каркас опирается на WinAPI.
Теперь представим, что мы уже имеем готовый каркас для Linux, пока не важно, на чем он основан.
Разумно предположить, что шрифты, используемые каркасом, содержат в себе некий дескриптор, используемый неявно во всех операциях с этими самыми шрифтами.
Возникает вопрос: умеет ли каркас пользоваться указанным дескриптором? Или по-другому: Если мы упремся и сделаем привязку к FreeType, будет ли оставшийся каркас (помимо HostFonts) уметь пользоваться этой привязкой?
На мой взгляд к задаче портирования следует подходить не со стороны шрифта (хотя, по правде сказать, от наличия привязки к FT я бы не отказался), а со стороны выбора среды исполнения.
В этом направлении сделано уже немало, есть работающие (ну, скажем так, прошедшие стадию proof of concept) привязки к wxWidgets и сие направление мне кажется очень перспективным. Но я, в силу весомых причин (в декабре родился третий ребенок в семье), не могу сейчас плотно участвовать в разработке неопределенное время. Поэтому могу предложить взять мои наработки и продолжить работать с ними.

PS. В КП, насколько я понял, используется UTF-8. Или я что-то не так понял?

Автор:  Илья Ермаков [ Пятница, 02 Апрель, 2010 21:30 ]
Заголовок сообщения:  Re: Портирование HostFonts

UCS2, конечно.

В языках и ОС программирования Юникод с переменной длиной байт на символ обычно не применяется (кроме Плана-9), ибо непрактично.

Автор:  Борис Рюмшин [ Пятница, 02 Апрель, 2010 21:32 ]
Заголовок сообщения:  Re: Портирование HostFonts

Илья Ермаков писал(а):
UCS2, конечно.

В языках и ОС программирования Юникод с переменной длиной байт на символ обычно не применяется (кроме Плана-9), ибо непрактично.

Не применялся до Плана 9, в котором его изобрели. Теперь это почти стандарт на некоторых системах. В Линухе - практически стандарт локали (на данный момент).

Автор:  Илья Ермаков [ Пятница, 02 Апрель, 2010 21:40 ]
Заголовок сообщения:  Re: Портирование HostFonts

Я имею в виду программное системное API.

Получать и обрабатывать программно текст в УТФ неудобно. Хранить и передавать - другое дело.

Автор:  Димыч [ Пятница, 02 Апрель, 2010 21:50 ]
Заголовок сообщения:  Re: Портирование HostFonts

Илья Ермаков писал(а):
UCS2, конечно.

В языках и ОС программирования Юникод с переменной длиной байт на символ обычно не применяется (кроме Плана-9), ибо непрактично.

А пруфлинк можно (про UCS2)?

Автор:  Илья Ермаков [ Пятница, 02 Апрель, 2010 21:56 ]
Заголовок сообщения:  Re: Портирование HostFonts

Пруфлинк чего?

Про ББ?

А где это может быть зафиксировано... Тут ведь есть разделение между ФОРМАТОМ строк и кодовой таблицей.
Формат строк - двухбайтный. Это предполагает применение кодовых таблиц с постоянной длиной 2 байт на символ.

В частности, UCS2. Но как именно будет кодироваться текст - зависит от программных модулей. Windows предполагает UCS2. С другой стороны, в ББ 1.5 получалась некая "неправильная" кодировка, все мы это знаем (кириллица при клавиатурном вводе оказывалась в младшем байте в соответствии с кодовой таблицей cp1251).

Автор:  Димыч [ Пятница, 02 Апрель, 2010 22:33 ]
Заголовок сообщения:  Re: Портирование HostFonts

Специально сейчас посмотрел.
Документ (ББ 1.6) содержит 2 строки:
ASDF
ФЫВА
На первую строку отводится 4 байта и они совпадают по значениям с ASCII кодировкой, для второй строки выделяется 8 байт с кодами 24 84 2B 84 12 84 10 84.
Чего-то мне кажется, что это не двухбайтная кодировка, во всяком случае, не для всех символов выделяется 2 байта.

Те же строки, сохраненные в Unicode в Блокноте дают ровно 2 байта для КАЖДОГО символа.
Причем, можно указать порядок следования при сохранении (Unicode или Unicode Big Endian)
Коды строк такие:
00 41 00 53 00 44 00 46
04 24 04 2B 04 12 04 10
(Если поменять порядок, то 04 и 00 будут за значащим байтом, но цифры будут те же).

Итак, разница Unicode и ББ в использовании символа 84 вместо 04.
Где собака зарыта?
PS и да, похоже, что все-таки не UTF-8 в ББ.

PPS. Я, похоже, запутался окончательно :)

Автор:  Илья Ермаков [ Пятница, 02 Апрель, 2010 22:59 ]
Заголовок сообщения:  Re: Портирование HostFonts

В TextModels вообще свой формат.

Автор:  Роман М. [ Суббота, 03 Апрель, 2010 01:50 ]
Заголовок сообщения:  Re: Портирование HostFonts

Димыч писал(а):
И шрифты создаются таким образом, что внутри себя содержат дескриптор, получаемый через CreateFont. И этот дескриптор неявно затем используется во всех операциях со шрифтами.
Делаем промежуточный вывод - шрифт используется такой, какой предоставляется средой, используемой каркасом. Еще раз повторю, что в текущей реализации весь каркас опирается на WinAPI.
Теперь представим, что мы уже имеем готовый каркас для Linux, пока не важно, на чем он основан.
Разумно предположить, что шрифты, используемые каркасом, содержат в себе некий дескриптор, используемый неявно во всех операциях с этими самыми шрифтами.
Возникает вопрос: умеет ли каркас пользоваться указанным дескриптором? Или по-другому: Если мы упремся и сделаем привязку к FreeType, будет ли оставшийся каркас (помимо HostFonts) уметь пользоваться этой привязкой?
На мой взгляд к задаче портирования следует подходить не со стороны шрифта (хотя, по правде сказать, от наличия привязки к FT я бы не отказался), а со стороны выбора среды исполнения.
Каркас не знает о дескрипторах, потому что они используются только в реализации Hosts. Можно посмотреть в HostPorts на PROCEDURE (rd: Rider) DrawString*, чтобы понять как нехило накручено с выводом текста в WinAPI. По-моему поверхностному обзору могу сделать вывод, что дескриптор нужен именно из-за особенностей вывода текста в Windows, а в Линуксе ведь по-другому. Так что, скорее всего, понадобится Pango.
Жаль, у меня нет опыта в написании GUI программ в Линуксе. Не знаю особенностей API.

Димыч писал(а):
В этом направлении сделано уже немало, есть работающие (ну, скажем так, прошедшие стадию proof of concept) привязки к wxWidgets и сие направление мне кажется очень перспективным. Но я, в силу весомых причин (в декабре родился третий ребенок в семье), не могу сейчас плотно участвовать в разработке неопределенное время. Поэтому могу предложить взять мои наработки и продолжить работать с ними.
Откуда можно взять эти последние наработки?

Автор:  Иван Горячев [ Суббота, 03 Апрель, 2010 02:36 ]
Заголовок сообщения:  Re: Портирование HostFonts

Димыч писал(а):
PS и да, похоже, что все-таки не UTF-8 в ББ.

PPS. Я, похоже, запутался окончательно :)


1. Насчёт символов в языке КП:
Цитата:
6.1 Basic Types
...
3. CHAR the characters of the Unicode character set (0X .. 0FFFFX)

Этому соответствует только UCS-2, как я понимаю

2. Формат документа ББ. Он интересно строки хранит. "Официальный" ББ все символы Latin-1 сохраняет в виде SHORTCHAR, а всё что выше - в CHAR. Видимо по историческим причинам. В community всё сохраняется CHARами, и эти документы прекрасно потом читаются любыми версиями ББ, в том числе и 1.5.

Вообще TextModels - жуткая штука. При сохранении механизм Stores вообще не используется. Куча каких-то буферов, временных файлов, перекидывание внутренними сообщениями. И где-то в глубине этого хозяйства зарыто сохранение символов:
Код:
fw.WriteByte(SHORT(SHORT(ORD(ch))));
fw.WriteByte(SHORT(SHORT(ORD(ch) DIV 256 - 128)));

Автор:  Илья Ермаков [ Суббота, 03 Апрель, 2010 07:00 ]
Заголовок сообщения:  Re: Портирование HostFonts

Оптимизация по памяти когда-то очень важна была.

Теперь можно было бы проще, без буферизации, прямо в память.

Автор:  Info21 [ Суббота, 03 Апрель, 2010 11:14 ]
Заголовок сообщения:  Re: Портирование HostFonts

Илья Ермаков писал(а):
Теперь можно было бы проще, без буферизации, прямо в память.
У них так и было когда-то. Но работать с большими документами было невозможно. Вот и набуферили.

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

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/