ttf-parser 0.5 - maktaba mpya ya kufanya kazi na fonti za TrueType

ttf-kichanganuzi ni maktaba ya kuchanganua fonti za TrueType/OpenType.
Toleo jipya lina msaada kamili kwa fonti tofauti
(fonti tofauti) na C API, kama matokeo ambayo niliamua kuitangaza kwenye lore.

Hadi hivi majuzi, ikiwa kulikuwa na haja ya kufanya kazi na fonti za TrueType, kulikuwa na chaguzi mbili haswa: FreeType na stb_truetype. Ya kwanza ni mchanganyiko mkubwa, ya pili inasaidia idadi ndogo ya kazi.

ttf-parser iko mahali fulani katikati. Inaauni majedwali yote yale yale ya TrueType (umbizo la TrueType lina jedwali nyingi tofauti za binary) kama FreeType, lakini haichora glyph zenyewe.

Wakati huo huo, ttf-parser ina tofauti zingine nyingi muhimu:

  1. ttf-parser imeandikwa kwa Rust bila kutumia salama. FreeType na stb_truetype zimeandikwa katika C.
  2. ttf-parser ndio utekelezaji pekee wa kumbukumbu-salama. Kusoma kumbukumbu nasibu haiwezekani. Athari zinarekebishwa kila mara katika FreeType, na stb_truetype kimsingi, haijaundwa kusoma fonti zisizo za kawaida.
  3. ttf-parser ndio utekelezaji pekee wa uzi-salama. Njia zote za uchanganuzi ni za kila wakati. Isipokuwa ni kuweka viwianishi vya fonti tofauti, lakini chaguo hili la kukokotoa limeingizwa tena. FreeType kimsingi ina uzi mmoja. stb_truetype - reentrant (unaweza kutumia nakala za mtu binafsi katika nyuzi tofauti, lakini sio moja ya nyingi).
  4. ttf-parser ndio utekelezaji pekee ambao hautumii mgao wa lundo. Hii hukuruhusu kuharakisha uchanganuzi na epuka shida na OOM.
  5. Pia, karibu shughuli zote za hesabu na ubadilishaji wa aina za nambari huangaliwa (ikiwa ni pamoja na takwimu).
  6. Katika hali mbaya zaidi, maktaba inaweza kutupa ubaguzi. Katika kesi hii, katika API ya C, ubaguzi utakamatwa na chaguo la kukokotoa litarejesha hitilafu, lakini haitaanguka.

Na licha ya dhamana zote za usalama, ttf-parser pia ni utekelezaji wa haraka zaidi. Kwa mfano, kuchanganua CFF2 ni haraka mara 3.5 kuliko FreeType. Parsing glyf, wakati huo huo, ni 10% polepole kuliko katika stb_truetype, lakini hii ni kutokana na ukweli kwamba hauunga mkono fonti tofauti, utekelezaji wake unahitaji kuhifadhi ziada. habari. Maelezo zaidi ndani README.

Chanzo: linux.org.ru

Kuongeza maoni