ttf-parser 0.5 - una nuova libreria per lavorare con i caratteri TrueType

ttf-parser è una libreria per l'analisi dei caratteri TrueType/OpenType.
La nuova versione ha il supporto completo per i caratteri variabili
(font variabili) e C API, a seguito delle quali ho deciso di pubblicizzarlo nella lore.

Fino a poco tempo fa, se era necessario lavorare con i caratteri TrueType, c'erano esattamente due opzioni: FreeType e stb_truetype. La prima è una mietitrebbia enorme, la seconda supporta un numero piuttosto ridotto di funzioni.

ttf-parser è da qualche parte nel mezzo. Supporta tutte le stesse tabelle TrueType (il formato TrueType consiste di molte tabelle binarie separate) di FreeType, ma non disegna i glifi stessi.

Allo stesso tempo, ttf-parser contiene molte altre differenze significative:

  1. ttf-parser è scritto in Rust senza utilizzare unsafe. FreeType e stb_truetype sono scritti in C.
  2. ttf-parser è l'unica implementazione sicura per la memoria. Non è possibile leggere la memoria casuale. Le vulnerabilità vengono costantemente corrette in FreeType e stb_truetype, in linea di principio, non è progettato per leggere caratteri arbitrari.
  3. ttf-parser è l'unica implementazione thread-safe. Tutti i metodi di analisi sono costanti. L'unica eccezione è l'impostazione delle coordinate per i caratteri variabili, ma questa funzione è rientrante. FreeType è fondamentalmente a thread singolo. stb_truetype - rientrante (puoi utilizzare singole copie in thread diversi, ma non uno dei tanti).
  4. ttf-parser è l'unica implementazione che non utilizza allocazioni heap. Ciò consente di accelerare l'analisi ed evitare problemi con OOM.
  5. Inoltre, vengono controllate quasi tutte le operazioni aritmetiche e le conversioni di tipi numerici (anche staticamente).
  6. Nel peggiore dei casi, la biblioteca potrebbe lanciare un'eccezione. In questo caso, nell'API C, verranno intercettate le eccezioni e la funzione restituirà un errore, ma non si bloccherà.

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 di FreeType. L'analisi di glyf, nel frattempo, è più lenta del 10% rispetto a stb_truetype, ma ciò è dovuto al fatto che non supporta i caratteri variabili, la cui implementazione richiede la memorizzazione di ulteriori caratteri. informazione. Maggiori dettagli in README.

Fonte: linux.org.ru

Aggiungi un commento