# freetype

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

## Особенности

- поддержка множества форматов шрифтов (TrueType, OpenType, Type 1, CID, CFF, WOFF, SFNT и др.);
- высококачественный рендеринг с субпиксельным сглаживанием и хинтингом;
- кроссплатформенность (Windows, macOS, Linux, Android, iOS, встраиваемые системы);
- модульная архитектура с возможностью настройки компонентов;
- отсутствие зависимостей от сторонних библиотек;
- лицензия FreeType (BSD-подобная), подходящая для коммерческого использования.

## Основные компоненты

FreeType предоставляет комплексный API для загрузки шрифтов, доступа к глифам, рендеринга текста и управления ресурсами (подробнее с документацией можно ознакомиться [здесь](https://freetype.org/freetype2/docs/)).

### Загрузка и управление шрифтами

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

Основные функции управления шрифтами:

- `FT_Init_FreeType()` — инициализация библиотеки;
- `FT_New_Face()` — загрузка шрифта из файла или памяти;
- `FT_New_Memory_Face()` — создание объекта шрифта из данных в памяти;
- `FT_Done_Face()` — освобождение ресурсов шрифта;
- `FT_Done_FreeType()` — деинициализация библиотеки;
- `FT_Attach_File()` и `FT_Attach_Stream()` — присоединение дополнительных данных (например, метрик).

### Работа с глифами и метриками

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

Функции для работы с глифами:

- `FT_Load_Glyph()` — загрузка глифа по индексу или коду символа;
- `FT_Load_Char()` — загрузка глифа по символу Unicode;
- `FT_Get_Glyph()` — получение объекта глифа для дальнейшей обработки;
- `FT_Get_Kerning()` — получение кернинга (межсимвольных расстояний);
- `FT_Get_Advance()` — получение advance ширины глифа;
- `FT_Get_Char_Index()` — преобразование кода символа в индекс глифа.

### Рендеринг и растеризация

Библиотека предоставляет мощные средства для растеризации векторных глифов в растровые изображения с поддержкой различных режимов сглаживания и хинтинга.

Функции рендеринга:

- `FT_Render_Glyph()` — растеризация глифа в монохромный или сглаженный bitmap;
- `FT_Glyph_To_Bitmap()` — преобразование глифа в растровое изображение;
- `FT_Outline_*` функции — работа с векторными контурами глифов;
- Настройка хинтинга через `FT_Load_Glyph` с флагами `FT_LOAD_*`;
- Субпиксельный рендеринг через `FT_Library_SetLcdFilter`.

### Управление параметрами рендеринга

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

Настраиваемые параметры:

- Размер и разрешение через `FT_Set_Char_Size()` и `FT_Set_Pixel_Sizes()`;
- Выбор модуля рендеринга (например, `FT_RENDER_MODE_NORMAL`, `FT_RENDER_MODE_LCD`);
- Настройка хинтинга (autohint, native hinting, no hinting);
- Целевое DPI для правильного масштабирования;
- Параметры субпиксельного сглаживания.

### Работа с расширенными возможностями шрифтов

FreeType поддерживает современные функции OpenType и других продвинутых форматов шрифтов, включая вариативные шрифты, цветные глифы и сложные макеты.

Расширенные возможности:

- Вариативные шрифты через `FT_Get_MM_Var()` и `FT_Set_Var_Design_Coordinates()`;
- Цветные шрифты (emoji, иконки) через `FT_Palette_*` API;
- Поддержка OpenType features (лигатуры, альтернативные глифы);
- Сложные системы письма (арабский, деванагари) через `FT_Get_SubGlyph_Info`;
- Работа со шрифтовыми коллекциями (TTC, OTC).

### Инструменты разработки и утилиты

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

Вспомогательные инструменты:

- `ftview` — утилита для просмотра глифов шрифтов;
- `ftdump` — анализ структуры файлов шрифтов;
- `ftbench` — бенчмарк производительности рендеринга;
- `ftvalid` — валидация файлов шрифтов;
- `ttdebug` — отладка TrueType/OpenType шрифтов.
