ttf-parser 0.5 — нова библиотека за работа с TrueType шрифтове

ttf-parser — това е библиотека за разбиране на шрифтове TrueType/OpenType.
В новата версия имаме пълна поддръжка на променливи шрифтове.
(променливи шрифтове) и C API, поради което реших да я рекламирам в лоре.

До неотдавна, ако имаше нужда от работа с шрифтове TrueType, имаше точно два варианта: FreeType и stb_truetype. Първият е огромен комбайн, а вторият поддържа доста ограничен набор от функции.

ttf-parser е някъде по средата. Той поддържа всички същите таблици TrueType (форматът TrueType се състои от много отделни бинарни таблици), каквито и FreeType, но не се занимава с рисуването на самите глифове.

При това, ttf-parser съдържа множество други значителни различия:

  1. ttf-parser е написан на Rust без използване на unsafe. FreeType и stb_truetype са написани на C.
  2. ttf-parser е единствената безопасна (memory-safe) реализация. Четенето на произволна памет е невъзможно. В FreeType постоянно поправят уязвимости, а stb_truetype по принцип не е предназначен за четене на произволни шрифтове.
  3. ttf-parser е единствената thread-safe реализация. Всички методи за парсинг са константни. Единственото изключение е задаването на координатите за променливи шрифтове, но тази функция е reentrant. FreeType по принцип е еднопоточно. stb_truetype — reentrant (може да се използват отделни копия в различни потоци, но не една от множеството).
  4. ttf-parser е единствената реализация, която не използва алокация в "купата". Това позволява да се ускори парсинга и да се избегнат проблеми при OOM.
  5. Също, почти всички аритметични операции и преобразуване на числови типове се проверяват (включително статично).
  6. В най-лошия случай библиотеката може да изхвърли изключение. При това в C API изключенията ще бъдат прихванати и функцията ще върне грешка, но няма да срине.

И въпреки всички гаранции за безопасност, ttf-parser е също и най-бързата реализация. Например парсинга на CFF2 е с 3.5 пъти по-бърз от този в FreeType. Парсинга на glyf е временно с 10% по-бавен от този в stb_truetype, но това е защото той не поддържа променливи шрифтове, за реализирането на които е необходимо съхраняване на доп. информация. Повече подробности в README.

Източник: linux.org.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster