ttf-parser 0.5 - nova knjižnica za delo s pisavami TrueType

ttf-razčlenjevalnik je knjižnica za razčlenjevanje pisav TrueType/OpenType.
Nova različica ima popolno podporo za spremenljive pisave
(spremenljive pisave) in C API, zaradi česar sem se odločil, da ga oglašujem v izročilu.

Do nedavnega, če je bilo treba delati s pisavami TrueType, sta bili natanko dve možnosti: FreeType in stb_truetype. Prvi je ogromen kombinat, drugi podpira dokaj majhno število funkcij.

ttf-parser je nekje na sredini. Podpira vse iste tabele TrueType (format TrueType je sestavljen iz številnih ločenih binarnih tabel) kot FreeType, vendar ne nariše samih glifov.

Hkrati pa ttf-parser vsebuje številne druge pomembne razlike:

  1. ttf-parser je napisan v Rustu brez uporabe unsafe. FreeType in stb_truetype sta napisani v C.
  2. ttf-parser je edina pomnilniško varna implementacija. Branje naključnega pomnilnika ni mogoče. V FreeType se nenehno odpravljajo ranljivosti, stb_truetype pa načeloma ni zasnovan za branje poljubnih pisav.
  3. ttf-parser je edina nitno varna izvedba. Vse metode razčlenjevanja so konstantne. Edina izjema je nastavitev koordinat za spremenljive pisave, vendar je ta funkcija vnovična. FreeType je v osnovi enoniten. stb_truetype - ponovni vstop (lahko uporabite posamezne kopije v različnih nitih, vendar ne ene od mnogih).
  4. ttf-parser je edina izvedba, ki ne uporablja dodeljevanja kopice. To vam omogoča, da pospešite razčlenjevanje in se izognete težavam z OOM.
  5. Preverjene so tudi skoraj vse aritmetične operacije in pretvorbe številskih vrst (vključno s statičnimi).
  6. V najslabšem primeru lahko knjižnica vrže izjemo. V tem primeru bodo v API-ju C prejete izjeme in funkcija bo vrnila napako, vendar se ne bo zrušila.

In kljub vsem varnostnim zagotovilom je ttf-parser tudi najhitrejša izvedba. Na primer, razčlenjevanje CFF2 je 3.5-krat hitrejše od FreeType. Razčlenjevanje glyf je medtem 10% počasnejše kot v stb_truetype, vendar je to posledica dejstva, da ne podpira spremenljivih pisav, katerih implementacija zahteva shranjevanje dodatnih. informacije. Več podrobnosti v README.

Vir: linux.org.ru

Dodaj komentar