OberonCore
https://forum.oberoncore.ru/

Библиотека FreeType
https://forum.oberoncore.ru/viewtopic.php?f=47&t=2504
Страница 2 из 2

Автор:  Ярослав Романченко [ Вторник, 19 Март, 2013 15:07 ]
Заголовок сообщения:  Re: Библиотека FreeType

Просто в A2 (AOS) есть (присутствует с самых ранних версий) библиотека для рендеринга шрифтов и называется OpenType :roll:

Автор:  Ярослав Романченко [ Вторник, 19 Март, 2013 15:14 ]
Заголовок сообщения:  Re: Библиотека FreeType

OpenType.Mod
Цитата:
MODULE OpenType; (** AUTHOR "eos, PL"; PURPOSE "Bluebottle port of OpenType"; *)

Так что, был-ли я корректен? :lol:

Автор:  Иван Кузьмицкий [ Вторник, 19 Март, 2013 15:14 ]
Заголовок сообщения:  Re: Библиотека FreeType

Ярослав, а этой библиотеке можно скормить TTF шрифты или только те, что имеют AOS-овский формат?

Автор:  Ярослав Романченко [ Вторник, 19 Март, 2013 15:19 ]
Заголовок сообщения:  Re: Библиотека FreeType

Иван Кузьмицкий писал(а):
Ярослав, а этой библиотеке можно скормить TTF шрифты или только те, что имеют AOS-овский формат?

TTF понимает. Но какие-то баги есть. Куда ж без них :D

Вложения:
Комментарий к файлу: Баг с отображением italic
Italic bug.png
Italic bug.png [ 658 байт | Просмотров: 8835 ]

Автор:  Пётр Кушнир [ Вторник, 19 Март, 2013 15:59 ]
Заголовок сообщения:  Re: Библиотека FreeType

Уточните, библиотека понимает http://ru.wikipedia.org/wiki/OpenType хорошо и http://ru.wikipedia.org/wiki/TrueType с багами, или только TrueType с багами?

Автор:  Роман М. [ Вторник, 19 Март, 2013 16:29 ]
Заголовок сообщения:  Re: Библиотека FreeType

Ярослав Романченко писал(а):
OpenType.Mod
Цитата:
MODULE OpenType; (** AUTHOR "eos, PL"; PURPOSE "Bluebottle port of OpenType"; *)

Так что, был-ли я корректен? :lol:
В контексте AOS - корректна, конечно.

Перед тем как использовать библиотеки AOS, надо хорошенько проверить её на предмет зависимостей от низлежайшей ОС.
FreeType хороша своей независимостью от ОС ибо растеризует текст в буфер памяти.

Автор:  Ярослав Романченко [ Вторник, 19 Март, 2013 17:21 ]
Заголовок сообщения:  Re: Библиотека FreeType

Пётр Кушнир писал(а):
Уточните, библиотека понимает http://ru.wikipedia.org/wiki/OpenType хорошо и http://ru.wikipedia.org/wiki/TrueType с багами, или только TrueType с багами?
Понимает шрифты с версией 1.0, указанной в заголовке, с расширениями .TTF и .OTF. Шрифты в Adobe Compact Font Format (CFF) не поддерживаются.
Роман М. писал(а):
FreeType хороша своей независимостью от ОС ибо растеризует текст в буфер памяти.
Думаете, для AOS изобретали-бы что-то концептуально сложнее чем буфер в памяти? :) Кажется зависимостей там очень мало, при беглом взгляде только Strings и Files

Автор:  Пётр Кушнир [ Вторник, 19 Март, 2013 19:08 ]
Заголовок сообщения:  Re: Библиотека FreeType

В принципе, концептуально выгодно не иметь зависимости от бинарного чужого компонента, в то же время, компонент из АОС явно не сильно прокачан технически, зато "своё", поэтому его можно будет портировать быстрее. И в то же время, на основе этого порта можно построить шрифтовый движок с известными и обозримыми интерфейсами, которые (в ситуации когда компонент АОС перестанет удовлетворять запросам проекта ББ) позволят реализовать работу с freetype уже внутри реализации, без изменения клиентского кода.
Что касается проекта нового хоста ББ, то использование в хост-части интерфейсов на КП привнесёт ещё один уточняющий слой абстракции.

Автор:  Роман М. [ Вторник, 19 Март, 2013 22:19 ]
Заголовок сообщения:  Re: Библиотека FreeType

Пётр Кушнир писал(а):
В принципе, концептуально выгодно не иметь зависимости от бинарного чужого компонента, в то же время, компонент из АОС явно не сильно прокачан технически, зато "своё", поэтому его можно будет портировать быстрее. И в то же время, на основе этого порта можно построить шрифтовый движок с известными и обозримыми интерфейсами, которые (в ситуации когда компонент АОС перестанет удовлетворять запросам проекта ББ) позволят реализовать работу с freetype уже внутри реализации, без изменения клиентского кода.
Что касается проекта нового хоста ББ, то использование в хост-части интерфейсов на КП привнесёт ещё один уточняющий слой абстракции.
На мой взгляд нужно взвешивать выгоду по-другому. А именно: исходя из знаний в предметной области. Если знаний для развития и поддержания некоторого компонента недостаточно, то лучше искать специализированный компонент, подходящий под эти нужды.
Что концептуально выгоднее: один раз вложить ресурсы в интеграцию сторонней библиотеки, подддерживаемой сообществом, при этом не тратя ресурсы на поддержание, или же дорабатывать компонент, в особенностях которого совершенно не разбираешься? Вопрос в разумном вложении ресурсов.

http://en.wikipedia.org/wiki/FreeType писал(а):
In 2007, Sun Microsystems switched from using a proprietary font rasterizer to using FreeType in the OpenJDK Java development kit.

Автор:  Пётр Кушнир [ Вторник, 19 Март, 2013 22:26 ]
Заголовок сообщения:  Re: Библиотека FreeType

Эффективно, но при этом теряется контроль над жизненно важным кодом.

Автор:  Иван Кузьмицкий [ Среда, 20 Март, 2013 08:34 ]
Заголовок сообщения:  Re: Библиотека FreeType

FreeType пилится вот уже добрых два десятка лет. Скорее всего, никаких проблем со шрифтами мы там не встретим, а это важно, чтобы не получить сырость на таком серьёзном участке, как тексты.

Автор:  Роман М. [ Четверг, 21 Март, 2013 11:48 ]
Заголовок сообщения:  Re: Библиотека FreeType

Начал аккуратненько, в документ, собирать информацию по особенностям вывода текста во FreeType и соответствующих API вызовах, требуемых для реализации HostFonts. Как соберу, начну транслировать заголовки FT на КП.

Автор:  Роман М. [ Воскресенье, 24 Март, 2013 15:57 ]
Заголовок сообщения:  Re: Библиотека FreeType

Нашёл затерянную обвязку к FreeType, начатую ещё в 2010 году. Эта версия содержит лишь часть заголовков.

FreeType.cp

И небольшой примерчик ранних попыток переноса на FT:
Код:
MODULE TestFTmini;
   
   IMPORT (*Fonts,*) Ports, Lib := LibsFreeType, Log := StdLog;
   
   PROCEDURE WriteLn (s: ARRAY OF CHAR);
   BEGIN
      Log.String("->"  + s); Log.Ln
   END WriteLn;
   
   PROCEDURE LogError (code: INTEGER);
   BEGIN
      Log.String("Error #"); Log.Int(code); Log.Ln
   END LogError;
   
   PROCEDURE Test*;
      CONST grid = 4096;
      VAR
         (*f: Fonts.Font;*)
         library: Lib.FT_Library_ptr; (* handle to library *)
         face: Lib.FT_Face_ptr; (* handle to face object *)
         error, (*height, width,*)
         fontSize,
         a, b, scale,
         asc, dsc: INTEGER;
         isScalable: BOOLEAN;
         (* filepathname: *)
   BEGIN
      WriteLn("Test");
      
      fontSize := 10 * Ports.point;
      a := fontSize MOD grid; b := fontSize DIV grid;
      scale := a DIV grid + b;
      Log.String("Scale: "); Log.Int(scale); Log.Ln;
      
      error := Lib.FT_Init_FreeType( library );
      IF error # 0 THEN LogError(error); HALT(1) END;
      (* WriteLn("FT_Init_FreeType"); *)
      
      error := Lib.FT_New_Face( library, "tahoma.ttf", 0, face ); (* %windir%\fonts\ *)
      IF error # 0 THEN LogError(error); HALT(1) END;
      (* WriteLn("FT_New_Face"); *)
      
      isScalable := Lib.FT_FACE_FLAG_SCALABLE * BITS(face.face_flags) = Lib.FT_FACE_FLAG_SCALABLE;
      asc := (face.height + face.descender) DIV 64;
      dsc := (face.ascender - face.height) DIV 64;
      
      Log.String("Family name: "); Log.String(face.family_name$); Log.Ln;
      IF isScalable  THEN
         Log.String("SCALABLE"); Log.Ln
      ELSE
         Log.String("NON-SCALABLE"); Log.Ln
      END;
      Log.String("Number of glyphs: "); Log.Int(face.num_glyphs); Log.Ln;
      Log.String("Height: "); Log.Int(face.height); Log.Ln;
      Log.String("Ascender: "); Log.Int(asc); Log.Ln;
      Log.String("Descender: "); Log.Int(dsc); Log.Ln;

      error := Lib.FT_Done_Face( face );
      IF error # 0 THEN LogError(error); HALT(1) END;
      (* WriteLn("FT_Done_Face"); *)
      
      error := Lib.FT_Done_FreeType( library );
      IF error # 0 THEN LogError(error); HALT(1) END;
      (* WriteLn("FT_Done_FreeType"); *)
      
   END Test;
   
END TestFTmini.

:!: TestFTmini.Test

Разрабатывал для Винды и с тех пор не проверял.

Автор:  Пётр Кушнир [ Четверг, 25 Апрель, 2013 23:19 ]
Заголовок сообщения:  Re: Библиотека FreeType

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

Автор:  Роман М. [ Пятница, 26 Апрель, 2013 00:20 ]
Заголовок сообщения:  Re: Библиотека FreeType

Прогресса нема. Настроя нет, поэтому всё и стоит на месте. Скорее всего, это и является главной причиной.
Застрял на снятии метрик с глифов шрифта. Функция FT_Load_Glyph наверно неправильно декларирована.

Прикладываю наработки.
Вложение:
FT-Fonts-lab.zip [7.99 КБ]
Скачиваний: 347


Для запуска требуется иметь файл tahoma.ttf в рабочей папке ББ.

Автор:  Пётр Кушнир [ Пятница, 26 Апрель, 2013 14:14 ]
Заголовок сообщения:  Re: Библиотека FreeType

До боли знакомо.

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