ttf-parser 0.5 - een nieuwe bibliotheek voor het werken met TrueType-lettertypen

ttf-parser is een bibliotheek voor het parseren van TrueType/OpenType-lettertypen.
De nieuwe versie biedt volledige ondersteuning voor variabele lettertypen
(variabele lettertypen) en C API, waardoor ik besloot er in de overlevering reclame voor te maken.

Als er tot voor kort met TrueType-lettertypen moest worden gewerkt, waren er precies twee opties: FreeType en stb_truetype. De eerste is een enorme combinatie, de tweede ondersteunt een vrij klein aantal functies.

ttf-parser bevindt zich ergens in het midden. Het ondersteunt dezelfde TrueType-tabellen (het TrueType-formaat bestaat uit veel afzonderlijke binaire tabellen) als FreeType, maar tekent de glyphs zelf niet.

Tegelijkertijd bevat ttf-parser nog vele andere significante verschillen:

  1. ttf-parser is geschreven in Rust zonder gebruik te maken van unsafe. FreeType en stb_truetype zijn geschreven in C.
  2. ttf-parser is de enige geheugenveilige implementatie. Het lezen van willekeurig geheugen is niet mogelijk. Kwetsbaarheden worden voortdurend opgelost in FreeType, en stb_truetype is in principe niet ontworpen om willekeurige lettertypen te lezen.
  3. ttf-parser is de enige threadveilige implementatie. Alle parseermethoden zijn constant. De enige uitzondering is het instellen van coördinaten voor variabele lettertypen, maar deze functie is opnieuw ingevoerd. FreeType is in principe single-threaded. stb_truetype - reentrant (je kunt individuele exemplaren in verschillende threads gebruiken, maar niet één van de vele).
  4. ttf-parser is de enige implementatie die geen heap-toewijzingen gebruikt. Hierdoor kunt u het parseren versnellen en problemen met OOM voorkomen.
  5. Ook worden bijna alle rekenkundige bewerkingen en conversies van numerieke typen gecontroleerd (inclusief statisch).
  6. In het ergste geval kan de bibliotheek een uitzondering genereren. In dit geval worden in de C API uitzonderingen opgevangen en retourneert de functie een fout, maar crasht deze niet.

En ondanks alle veiligheidsgaranties is ttf-parser ook de snelste implementatie. Het parseren van CFF2 is bijvoorbeeld 3.5 keer sneller dan FreeType. Het parseren van glyf is ondertussen 10% langzamer dan in stb_truetype, maar dit komt door het feit dat het geen variabele lettertypen ondersteunt, waarvan de implementatie extra opslag vereist. informatie. Meer details binnen README.

Bron: linux.org.ru

Voeg een reactie