ttf-Parser ist eine Bibliothek zum Parsen von TrueType/OpenType-Schriftarten.
Die neue Version bietet volle Unterstützung für variable Schriftarten
(variable Schriftarten) und C-API, weshalb ich beschlossen habe, es in der Überlieferung zu bewerben.
Bis vor Kurzem gab es für die Arbeit mit TrueType-Schriftarten genau zwei Optionen: FreeType und stb_truetype. Der erste ist ein riesiger Mähdrescher, der zweite unterstützt eine relativ kleine Anzahl von Funktionen.
ttf-parser liegt irgendwo in der Mitte. Es unterstützt dieselben TrueType-Tabellen (das TrueType-Format besteht aus vielen separaten Binärtabellen) wie FreeType, zeichnet jedoch nicht die Glyphen selbst.
Gleichzeitig weist der ttf-Parser viele weitere wesentliche Unterschiede auf:
- ttf-parser ist in Rust geschrieben, ohne unsicher zu verwenden. FreeType und stb_truetype sind in C geschrieben.
- ttf-parser ist die einzige speichersichere Implementierung. Das Auslesen des Zufallsspeichers ist nicht möglich. In FreeType werden ständig Sicherheitslücken behoben und stb_truetype ist grundsätzlich nicht dafür ausgelegt, beliebige Schriftarten zu lesen.
- ttf-parser ist die einzige Thread-sichere Implementierung. Alle Parsing-Methoden sind konstant. Die einzige Ausnahme ist das Festlegen von Koordinaten für variable Schriftarten, diese Funktion ist jedoch reentrant. FreeType ist grundsätzlich Single-Threaded. stb_truetype – reentrant (Sie können einzelne Kopien in verschiedenen Threads verwenden, aber nicht eine von vielen).
- ttf-parser ist die einzige Implementierung, die keine Heap-Zuweisungen verwendet. Dadurch können Sie das Parsen beschleunigen und Probleme mit OOM vermeiden.
- Außerdem werden nahezu alle arithmetischen Operationen und Konvertierungen numerischer Typen überprüft (auch statisch).
- Im schlimmsten Fall kann die Bibliothek eine Ausnahme auslösen. In diesem Fall werden in der C-API Ausnahmen abgefangen und die Funktion gibt einen Fehler zurück, stürzt jedoch nicht ab.
Und trotz aller Sicherheitsgarantien ist ttf-parser auch die schnellste Implementierung. Beispielsweise ist das Parsen von CFF2 3.5-mal schneller als FreeType. Das Parsen von Glyf ist mittlerweile 10 % langsamer als in stb_truetype, was aber daran liegt, dass es keine variablen Schriftarten unterstützt, deren Implementierung zusätzliche Speicherung erfordert. Information. Weitere Details in README.
Source: linux.org.ru