ttf-parser 0.5 — eine neue Bibliothek zur Arbeit mit TrueType-Schriften

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:

  1. ttf-parser ist in Rust geschrieben, ohne unsafe zu verwenden. FreeType und stb_truetype sind in C geschrieben.
  2. 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.
  3. 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).
  4. ttf-parser ist die einzige Implementierung, die keine „Heap“-Allokationen verwendet. Das ermöglicht eine schnellere Analyse und vermeidet Probleme bei OOM.
  5. Außerdem werden fast alle arithmetischen Operationen und Typumwandlungen geprĂŒft (einschließlich statisch).
  6. 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

60GB SSD 8Gb DDR4