ttf-parser — è una libreria per l'analisi dei font TrueType/OpenType.
Nella nuova versione è stata introdotta il supporto completo per font variabili
(font variabili) e C API, perciò ho deciso di pubblicizzarla su l'ora.
Fino a poco tempo fa, se era necessaria l'elaborazione di font TrueType, c'erano esattamente due opzioni: FreeType e stb_truetype. Il primo è un enorme motore, il secondo supporta un numero piuttosto limitato di funzioni.
ttf-parser è a metà strada. Supporta tutte le stesse tabelle TrueType (il formato TrueType è composto da molte tabelle binarie separate) come FreeType, ma non gestisce il rendering dei glyph.
Tuttavia, ttf-parser presenta molte altre differenze significative:
- ttf-parser è scritto in Rust senza utilizzare unsafe. FreeType e stb_truetype sono scritti in C.
- ttf-parser è l'unica implementazione sicura (memory-safe). La lettura di memoria arbitraria è impossibile. In FreeType le vulnerabilità vengono continuamente corrette, mentre stb_truetype non è progettato per la lettura di font arbitrari.
- ttf-parser è l'unica implementazione thread-safe. Tutti i metodi di parsing sono costanti. L'unica eccezione è la definizione delle coordinate per i font variabili, ma questa funzione è reentrant. FreeType è generalmente monothread. stb_truetype è reentrant (si possono usare copie separate in thread diversi, ma non una delle molte).
- ttf-parser è l'unica implementazione che non utilizza allocazione nella "heap". Questo consente di accelerare l'analisi e di evitare problemi in caso di OOM.
- Inoltre, quasi tutte le operazioni aritmetiche e la conversione dei tipi numerici vengono verificate (anche staticamente).
- Nel peggior caso, la libreria può sollevare un'eccezione. Tuttavia, nell'API C le eccezioni verranno intercettate e la funzione restituisce un errore, senza chiudersi.
E nonostante tutte le garanzie di sicurezza, ttf-parser è anche l'implementazione più veloce. Ad esempio, l'analisi di CFF2 è 3.5 volte più veloce rispetto a FreeType. L'analisi di glyf è nel frattempo il 10% più lenta rispetto a stb_truetype, ma questo è dovuto al fatto che non supporta font variabili, per i quali è necessario memorizzare informazioni aggiuntive. Maggiori dettagli in README.
Fonte: linux.org.ru
