ttf-parser 0.5 - nowa biblioteka do pracy z czcionkami TrueType

parser ttf to biblioteka do analizowania czcionek TrueType/OpenType.
Nowa wersja posiada pełną obsługę czcionek zmiennych
(zmienne czcionki) i C API, w wyniku czego zdecydowałem się zareklamować to w lore.

Do niedawna, jeśli istniała potrzeba pracy z czcionkami TrueType, istniały dokładnie dwie opcje: FreeType i stb_truetype. Pierwszy to ogromny kombajn, drugi obsługuje dość małą liczbę funkcji.

ttf-parser jest gdzieś pośrodku. Obsługuje te same tabele TrueType (format TrueType składa się z wielu oddzielnych tabel binarnych), co FreeType, ale nie rysuje samych glifów.

Jednocześnie parser ttf zawiera wiele innych znaczących różnic:

  1. ttf-parser jest napisany w Rust bez użycia unsafe. FreeType i stb_truetype są napisane w C.
  2. ttf-parser jest jedyną implementacją bezpieczną dla pamięci. Odczyt pamięci losowej nie jest możliwy. W programie FreeType stale usuwane są luki, a stb_truetype w zasadzie nie jest przeznaczony do odczytywania dowolnych czcionek.
  3. ttf-parser jest jedyną implementacją bezpieczną dla wątków. Wszystkie metody analizy są stałe. Jedynym wyjątkiem jest ustawienie współrzędnych dla czcionek zmiennych, ale ta funkcja jest współrzędna. FreeType jest w zasadzie jednowątkowy. stb_truetype - reentrant (możesz używać pojedynczych kopii w różnych wątkach, ale nie w jednym z wielu).
  4. ttf-parser jest jedyną implementacją, która nie wykorzystuje alokacji sterty. Pozwala to przyspieszyć parsowanie i uniknąć problemów z OOM.
  5. Sprawdzane są również prawie wszystkie operacje arytmetyczne i konwersje typów liczbowych (w tym statycznie).
  6. W najgorszym przypadku biblioteka może zgłosić wyjątek. W takim przypadku w API C wyłapywane będą wyjątki i funkcja zwróci błąd, ale nie ulegnie awarii.

I pomimo wszystkich gwarancji bezpieczeństwa, ttf-parser jest także najszybszą implementacją. Na przykład parsowanie CFF2 jest 3.5 razy szybsze niż FreeType. Tymczasem parsowanie glif jest 10% wolniejsze niż w stb_truetype, ale wynika to z faktu, że nie obsługuje on czcionek zmiennych, których implementacja wymaga przechowywania dodatkowych. Informacja. Więcej szczegółów w README.

Źródło: linux.org.ru

Dodaj komentarz