ttf-parser 0.5 - ett nytt bibliotek för att arbeta med TrueType-teckensnitt

ttf-parser är ett bibliotek för att analysera TrueType/OpenType-teckensnitt.
Den nya versionen har fullt stöd för variabla typsnitt
(variabla teckensnitt) och C API, som ett resultat av vilket jag bestämde mig för att annonsera det i lore.

Tills nyligen, om det fanns ett behov av att arbeta med TrueType-teckensnitt, fanns det exakt två alternativ: FreeType och stb_truetype. Den första är en enorm skördetröska, den andra stöder ett ganska litet antal funktioner.

ttf-parser är någonstans i mitten. Den stöder alla samma TrueType-tabeller (TrueType-formatet består av många separata binära tabeller) som FreeType, men ritar inte själva glyferna.

Samtidigt innehåller ttf-parser många andra signifikanta skillnader:

  1. ttf-parser är skriven i Rust utan att använda osäker. FreeType och stb_truetype skrivs i C.
  2. ttf-parser är den enda minnessäkra implementeringen. Det går inte att läsa slumpmässigt minne. Sårbarheter fixas hela tiden i FreeType, och stb_truetype är i princip inte designad för att läsa godtyckliga typsnitt.
  3. ttf-parser är den enda trådsäkra implementeringen. Alla analyseringsmetoder är konstanta. Det enda undantaget är att sätta koordinater för variabla teckensnitt, men den här funktionen är återkommande. FreeType är i princip entrådig. stb_truetype - reentrant (du kan använda enskilda kopior i olika trådar, men inte en av många).
  4. ttf-parser är den enda implementeringen som inte använder heap-allokeringar. Detta gör att du kan påskynda analysen och undvika problem med OOM.
  5. Dessutom kontrolleras nästan alla aritmetiska operationer och omvandlingar av numeriska typer (inklusive statiskt).
  6. I värsta fall kan biblioteket göra ett undantag. I det här fallet, i C API, kommer undantag att fångas och funktionen returnerar ett fel, men kraschar inte.

Och trots alla säkerhetsgarantier är ttf-parser också den snabbaste implementeringen. Till exempel är analys av CFF2 3.5 gånger snabbare än FreeType. Parsning av glyf är under tiden 10 % långsammare än i stb_truetype, men detta beror på det faktum att det inte stöder variabla teckensnitt, vars implementering kräver lagring av ytterligare. information. Mer detaljer i README.

Källa: linux.org.ru

Lägg en kommentar