ttf-parser — je knihovna pro analýzu fontů TrueType/OpenType.
Nová verze přináší plnou podporu proměnných fontů.
(proměnné fonty) a C API, proto jsem se rozhodl ji propagovat na fóru.
Do nedávna existovaly pouze dvě možnosti pro práci s fonty TrueType: FreeType a stb_truetype. První je obrovský nástroj, druhý podporuje poměrně málo funkcí.
ttf-parser se nachází někde uprostřed. Podporuje všechny stejné tabulky TrueType (formát TrueType se skládá z mnoha jednotlivých binárních tabulek) jako FreeType, ale nezabývá se samotným vykreslováním glyphů.
Přitom ttf-parser obsahuje množství dalších významných rozdílů:
- ttf-parser je napsán v Rust bez použití unsafe. FreeType a stb_truetype jsou napsány v C.
- ttf-parser je jediná bezpečná (memory-safe) implementace. Čtení libovolné paměti není možné. Ve FreeType se neustále opravují zranitelnosti, zatímco stb_truetype není určen pro čtení libovolných fontů.
- ttf-parser je jediná thread-safe implementace. Všechny metody analýzy jsou konstantní. Jedinou výjimkou je stanovení souřadnic pro proměnné fonty, ale tato funkce je reentrant. FreeType je v zásadě jednovláknový. stb_truetype — reentrant (lze použít samostatné kopie v různých vláknech, ale ne jednu z mnoha).
- ttf-parser je jedinou implementací, která nepoužívá alokaci v „haldě“. To umožňuje urychlit analýzu a vyhnout se problémům při OOM.
- Téměř všechny aritmetické operace a přetypování číselných typů jsou kontrolovány (včetně statické kontroly).
- V nejhorším případě knihovna může vyvolat výjimku. V C API budou výjimky zachyceny a funkce vrátí chybu, ale nespadne.
A navzdory všem zárukám bezpečnosti je ttf-parser také nejrychlejší implementací. Například analýza CFF2 je 3,5krát rychlejší než ve FreeType. Analýza glyfů je mezitím o 10 % pomalejší než ve stb_truetype, ale to je způsobeno tím, že nepodporuje proměnné fonty, pro jejichž implementaci je třeba uchovávat dodatečné informace. Více podrobností v README.
Zdroj: linux.org.ru
