ttf-parser — see on TrueType/OpenType fondide analüüsimise raamatukogu.
Uues versioonis on täismahus toetamine muutuvaid fonte.
(muutuvad fondid) ja C API, mille tõttu otsustasin seda reklaamida lorus.
Kuni hiljutiseni, kui oli vaja töötada TrueType fondidega, oli ainult kaks varianti: FreeType ja stb_truetype. Esimene on suur kombinaator, teine toetab üsna piiratud hulka funktsioone.
ttf-parser asub kuskil keskel. See toetab kõiki samu TrueType tabeleid (TrueType formaat koosneb paljusid eraldi binaartabelitest), mis FreeType, kuid ei tegele glüfide joonistamisega.
Sellegipoolest sisaldab ttf-parser palju muid olulisi erinevusi:
- ttf-parser on kirjutatud Rustis, ilma unsafe kasutamata. FreeType ja stb_truetype on kirjutatud C-s.
- ttf-parser on ainus ohutu (memory-safe) rakendus. Juhusliku mälu lugemine on võimatu. FreeType'il parandatakse pidevalt haavatavusi ja stb_truetype ei ole sisuliselt ette nähtud juhuslike fondide lugemiseks.
- ttf-parser on ainus thread-safe teostus. Kõik parsimise meetodid on konstantset. Ainus erand on koordinaatide määramine muutuva suurusega fontide jaoks, kuid see funktsioon on reentrant. FreeType on põhimõtteliselt ühesuunaline. stb_truetype on reentrant (võib kasutada eraldi koopiaid erinevates lõimedes, kuid mitte ühte paljusid).
- ttf-parser on ainus teostus, mis ei kasuta mälu „virnast”. See võimaldab tõhustada parsimist ja vältida probleeme OOM-i korral.
- Samuti kontrollitakse peaaegu kõiki aritmeetilisi tehteid ja numbriliste tüüpide teisendusi (sealhulgas staatiliselt).
- Kõige halvemal juhul võib teek visata erandi. Sel juhul C API-s erandid püütakse ja funktsioon tagastab vea, kuid ei kuku.
Ja hoolimata kõigist turvalisuse garantiiidest on ttf-parser ka kõige kiirem teostus. Näiteks CFF2 parsimine on 3,5 korda kiirem kui FreeType'i puhul. Glyfide parsimine on samal ajal 10% aeglasem kui stb_truetype'i puhul, kuid see on tingitud sellest, et see ei toeta muutuvaid fonte, mille rakendamiseks on vajalik täiendava info hoidmine. Rohkem üksikasju. README.
Allikas: linux.org.ru
