ttf-parser 0.5 – uus teek TrueType fontidega töötamiseks

ttf-parser on teek TrueType/OpenType fontide sõelumiseks.
Uus versioon toetab täielikult muutuvaid fonte
(muutlikud fondid) ja C API, mille tulemusena otsustasin seda pärimuses reklaamida.

Kuni viimase ajani, kui oli vajadus töötada TrueType fontidega, oli täpselt kaks võimalust: FreeType ja stb_truetype. Esimene on tohutu kombain, teine ​​toetab üsna vähe funktsioone.

ttf-parser on kuskil keskel. See toetab kõiki samu TrueType'i tabeleid (TrueType'i vorming koosneb paljudest eraldi kahendtabelitest) nagu FreeType, kuid ei joonista glüüfe ise.

Samal ajal sisaldab ttf-parser palju muid olulisi erinevusi:

  1. ttf-parser on kirjutatud Rusti keeles ilma unsafe'i kasutamata. FreeType ja stb_truetype on kirjutatud C keeles.
  2. ttf-parser on ainus mäluohutu teostus. Juhusliku mälu lugemine pole võimalik. FreeType'is parandatakse pidevalt turvaauke ja stb_truetype pole põhimõtteliselt loodud suvaliste fontide lugemiseks.
  3. ttf-parser on ainus lõimekindel teostus. Kõik sõelumismeetodid on konstantsed. Ainus erand on muutuvate fontide koordinaatide määramine, kuid see funktsioon on uuesti sisenev. FreeType on põhimõtteliselt ühe keermega. stb_truetype - reentrant (võite kasutada üksikuid koopiaid erinevates lõimedes, kuid mitte ühte paljudest).
  4. ttf-parser on ainus rakendus, mis ei kasuta kuhjaeraldisi. See võimaldab teil sõelumist kiirendada ja vältida probleeme OOM-iga.
  5. Samuti kontrollitakse peaaegu kõiki aritmeetilisi tehteid ja numbritüüpide teisendusi (ka staatiliselt).
  6. Halvimal juhul võib raamatukogu teha erandi. Sel juhul püütakse C API-s erandid kinni ja funktsioon tagastab veateate, kuid ei jookse kokku.

Ja hoolimata kõigist turvagarantiidest on ttf-parser ka kõige kiirem rakendus. Näiteks CFF2 sõelumine on 3.5 korda kiirem kui FreeType. Vahepeal on glyfi parsimine 10% aeglasem kui stb_truetype, kuid see on tingitud asjaolust, et see ei toeta muutuvaid fonte, mille rakendamine nõuab täiendavate salvestamist. teavet. Täpsemalt sisse README.

Allikas: linux.org.ru

Lisa kommentaar