ttf-parser 0.5 - uusi kirjasto TrueType-fonttien kanssa työskentelemiseen

ttf-jäsennin on kirjasto TrueType/OpenType-fonttien jäsentämiseen.
Uudessa versiossa on täysi tuki muuttuville fonteille
(muuttuvat fontit) ja C API, minkä seurauksena päätin mainostaa sitä historiassa.

Viime aikoihin asti, jos oli tarvetta työskennellä TrueType-fonttien kanssa, vaihtoehtoja oli täsmälleen kaksi: FreeType ja stb_truetype. Ensimmäinen on valtava yhdistelmä, toinen tukee melko pientä määrää toimintoja.

ttf-parser on jossain keskellä. Se tukee kaikkia samoja TrueType-taulukoita (TrueType-muoto koostuu useista erillisistä binääritaulukoista) kuin FreeType, mutta ei piirrä itse kuvioita.

Samaan aikaan ttf-parser sisältää monia muita merkittäviä eroja:

  1. ttf-parser on kirjoitettu ruosteella käyttämättä unsafea. FreeType ja stb_truetype kirjoitetaan C:llä.
  2. ttf-parser on ainoa muistia turvallinen toteutus. Satunnaismuistin lukeminen ei ole mahdollista. FreeTypen haavoittuvuuksia korjataan jatkuvasti, eikä stb_truetype ole periaatteessa suunniteltu lukemaan mielivaltaisia ​​kirjasimia.
  3. ttf-parser on ainoa säikeen turvallinen toteutus. Kaikki jäsennysmenetelmät ovat vakioita. Ainoa poikkeus on koordinaattien asettaminen muuttuville fonteille, mutta tämä toiminto on palaava. FreeType on periaatteessa yksisäikeinen. stb_truetype - reentrant (voit käyttää yksittäisiä kopioita eri säikeissä, mutta ei yhtä monista).
  4. ttf-parser on ainoa toteutus, joka ei käytä keon varauksia. Tämän avulla voit nopeuttaa jäsentämistä ja välttää OOM-ongelmia.
  5. Lisäksi lähes kaikki aritmeettiset operaatiot ja numeeristen tyyppien muunnokset tarkistetaan (myös staattisesti).
  6. Pahimmassa tapauksessa kirjasto voi tehdä poikkeuksen. Tässä tapauksessa C API:ssa poikkeukset jäävät kiinni ja funktio palauttaa virheen, mutta ei kaatu.

Ja kaikista turvallisuustakuista huolimatta ttf-parser on myös nopein toteutus. Esimerkiksi CFF2:n jäsennys on 3.5 kertaa nopeampi kuin FreeType. Glyf:n jäsentäminen on puolestaan ​​10% hitaampaa kuin stb_truetypessä, mutta tämä johtuu siitä, että se ei tue muuttuvia kirjasimia, joiden toteuttaminen vaatii lisätietojen tallentamista. tiedot. Tarkemmat tiedot sisään LUEMINUT.

Lähde: linux.org.ru

Lisää kommentti