ttf-parser â ist eine Bibliothek zum Parsen von TrueType/OpenType-Schriften.
In der neuen Version wurde die vollstĂ€ndige UnterstĂŒtzung fĂŒr variable Schriften hinzugefĂŒgt.
(variable fonts) und C API, weshalb ich beschlossen habe, sie im Forum zu bewerben.
Bis vor kurzem gab es bei Bedarf an TrueType-Schriften genau zwei Optionen: FreeType und stb_truetype. Ersteres ist ein riesiger Komplex, letzteres unterstĂŒtzt eine eher begrenzte Anzahl an Funktionen.
ttf-parser befindet sich irgendwo dazwischen. Es unterstĂŒtzt all jene TrueType-Tabellen (das TrueType-Format besteht aus vielen separaten binĂ€ren Tabellen), die auch FreeType unterstĂŒtzt, kĂŒmmert sich jedoch nicht um das Rendern der Glyphen selbst.
Dabei enthÀlt ttf-parser viele andere bedeutende Unterschiede:
- ttf-parser ist in Rust geschrieben, ohne unsafe zu verwenden. FreeType und stb_truetype sind in C geschrieben.
- ttf-parser ist die einzige sichere (memory-safe) Implementierung. Das Lesen willkĂŒrlicher Speicher ist nicht möglich. Bei FreeType werden stĂ€ndig Schwachstellen behoben, und stb_truetype ist prinzipiell nicht dafĂŒr vorgesehen, willkĂŒrliche Schriften zu lesen.
- ttf-parser ist die einzige thread-sichere Implementierung. Alle Parsing-Methoden sind konstant. Die einzige Ausnahme besteht darin, Koordinaten fĂŒr variable Schriften festzulegen, aber diese Funktion ist reentrant. FreeType ist prinzipiell ein einzelner Thread. stb_truetype ist reentrant (man kann separate Kopien in verschiedenen Threads verwenden, aber nicht eine aus vielen).
- ttf-parser ist die einzige Implementierung, die keine âHeapâ-Allokationen verwendet. Das ermöglicht eine schnellere Analyse und vermeidet Probleme bei OOM.
- AuĂerdem werden fast alle arithmetischen Operationen und Typumwandlungen geprĂŒft (einschlieĂlich statisch).
- Im schlechtesten Fall kann die Bibliothek eine Ausnahme werfen. Dabei werden Ausnahmen in der C API aufgefangen und die Funktion gibt einen Fehler zurĂŒck, stĂŒrzt aber nicht ab.
Und trotz aller Sicherheitsgarantien ist ttf-parser auch die schnellste Implementierung. Zum Beispiel ist das Parsen von CFF2 3,5 Mal schneller als bei FreeType. Das Parsen von glyf ist hingegen 10 % langsamer als bei stb_truetype, jedoch liegt das daran, dass es keine UnterstĂŒtzung fĂŒr variable Schriften hat, fĂŒr deren Implementierung zusĂ€tzliche Informationen benötigt werden. Weitere Details in README.
Quelle: linux.org.ru
