ttf-parser 0.5 – eine neue Bibliothek für die Arbeit mit TrueType-Schriftarten

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:

  1. ttf-parser ist in Rust geschrieben, ohne unsicher zu verwenden. FreeType und stb_truetype sind in C geschrieben.
  2. 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.
  3. 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).
  4. ttf-parser ist die einzige Implementierung, die keine Heap-Zuweisungen verwendet. Dadurch können Sie das Parsen beschleunigen und Probleme mit OOM vermeiden.
  5. Außerdem werden nahezu alle arithmetischen Operationen und Konvertierungen numerischer Typen überprüft (auch statisch).
  6. 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

Kommentar hinzufügen