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:
- ttf-parser jest napisany w Rust bez użycia unsafe. FreeType i stb_truetype są napisane w C.
- 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.
- 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).
- ttf-parser jest jedyną implementacją, która nie wykorzystuje alokacji sterty. Pozwala to przyspieszyć parsowanie i uniknąć problemów z OOM.
- Sprawdzane są również prawie wszystkie operacje arytmetyczne i konwersje typów liczbowych (w tym statycznie).
- 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