ttf-parser is een bibliotheek voor het Parseren van TrueType/OpenType lettertypen.
De nieuwe versie heeft volledige ondersteuning voor variabele lettertypen.
(variabele lettertypen) en C API, Daarom besloot ik het te promoten op lore.
Tot voor kort waren er maar twee opties voor het werken met TrueType lettertypen: FreeType en stb_truetype. De eerste is een enorme toolkit, de tweede ondersteunt een behoorlijk beperkt aantal functies.
ttf-parser bevindt zich ergens in het midden. Het ondersteunt al dezelfde TrueType-tabellen (het TrueType-formaat bestaat uit verschillende aparte binaire tabellen) zoals FreeType, maar het doet geen tekstopmaak.
Tegelijkertijd bevat ttf-parser veel andere significante verschillen:
- ttf-parser is geschreven in Rust zonder gebruik te maken van onveilige code. FreeType en stb_truetype zijn geschreven in C.
- ttf-parser is de enige veilige (memory-safe) implementatie. Het lezen van willekeurige geheugen is onmogelijk. In FreeType worden voortdurend kwetsbaarheden opgelost, terwijl stb_truetype in principe niet is ontworpen voor het lezen van willekeurige lettertypen.
- ttf-parser is de enige thread-safe implementatie. Alle parsermethoden zijn constant. De enige uitzondering is het instellen van coördinaten voor variabele lettertypen, maar deze functie is reentrant. FreeType is in principe single-threaded. stb_truetype is reentrant (je kunt afzonderlijke exemplaren in verschillende threads gebruiken, maar niet één uit veel).
- ttf-parser is de enige implementatie die geen geheugenallocatie in de 'heap' gebruikt. Dit versnelt de parsing en voorkomt problemen bij OOM.
- Bijna alle wiskundige bewerkingen en typeconversies worden gecontroleerd (ook statisch).
- In het slechtste geval kan de bibliotheek een uitzondering gooien. In de C API zullen uitzonderingen worden onderschept en de functie retourneert een fout, maar crasht niet.
En ondanks alle veiligheidsgaranties is ttf-parser ook de snelste implementatie. Bijvoorbeeld, parsing van CFF2 is 3,5 keer sneller dan in FreeType. De parsing van glyf is ondertussen 10% langzamer dan in stb_truetype, maar dat komt doordat het geen variabele lettertypen ondersteunt, waarvoor extra informatie moet worden opgeslagen. Meer details vind je in README.
Bron: linux.org.ru
