OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 11:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Портирование HostFonts
СообщениеДобавлено: Пятница, 26 Март, 2010 22:05 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Первое, с чего начинается портирование подсистемы Hosts - это модуль HostFonts.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Пятница, 26 Март, 2010 23:12 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Суббота, 27 Март, 2010 00:45 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Суббота, 27 Март, 2010 05:50 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
1. У всех опенсоурсных продуктов есть одна особенность - негарантированное время жизни. Так что шрифтовую/графическую библиотеку надо брать наиболее солидную, пусть даже в ущерб скорости и функционалу.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Суббота, 27 Март, 2010 08:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
FreeType вроде бы в основе у тех же X на Линуксах. Достаточно базовая вещь, на которую опираются.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Четверг, 01 Апрель, 2010 20:00 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Четверг, 01 Апрель, 2010 21:34 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Разумно.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Четверг, 01 Апрель, 2010 21:45 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Пятница, 02 Апрель, 2010 21:21 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Роман М. писал(а):
Первое, с чего начинается портирование подсистемы 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. Или я что-то не так понял?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Пятница, 02 Апрель, 2010 21:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
UCS2, конечно.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Пятница, 02 Апрель, 2010 21:32 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Илья Ермаков писал(а):
UCS2, конечно.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Пятница, 02 Апрель, 2010 21:40 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я имею в виду программное системное API.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Пятница, 02 Апрель, 2010 21:50 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Илья Ермаков писал(а):
UCS2, конечно.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Пятница, 02 Апрель, 2010 21:56 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Пруфлинк чего?

Про ББ?

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Пятница, 02 Апрель, 2010 22:33 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Специально сейчас посмотрел.
Документ (ББ 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. Я, похоже, запутался окончательно :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Пятница, 02 Апрель, 2010 22:59 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В TextModels вообще свой формат.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Суббота, 03 Апрель, 2010 01:50 

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

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


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Димыч писал(а):
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)));


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Суббота, 03 Апрель, 2010 07:00 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Оптимизация по памяти когда-то очень важна была.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Портирование HostFonts
СообщениеДобавлено: Суббота, 03 Апрель, 2010 11:14 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Теперь можно было бы проще, без буферизации, прямо в память.
У них так и было когда-то. Но работать с большими документами было невозможно. Вот и набуферили.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB