ttf-parser 0.5 - jauna bibliotēka darbam ar TrueType fontiem

ttf-parsētājs ir bibliotēka TrueType/OpenType fontu parsēšanai.
Jaunajā versijā ir pilns mainīgo fontu atbalsts
(mainīgie fonti) un C API, kā rezultātā es nolēmu to reklamēt mācībā.

Vēl nesen, ja bija nepieciešams strādāt ar TrueType fontiem, bija tieši divas iespējas: FreeType un stb_truetype. Pirmais ir milzīgs kombains, otrais atbalsta diezgan nelielu skaitu funkciju.

ttf-parser ir kaut kur pa vidu. Tā atbalsta visas tās pašas TrueType tabulas (TrueType formāts sastāv no daudzām atsevišķām binārajām tabulām) kā FreeType, taču neuzzīmē pašus glifus.

Tajā pašā laikā ttf-parser satur daudzas citas būtiskas atšķirības:

  1. ttf-parser ir rakstīts Rust, neizmantojot unsafe. FreeType un stb_truetype ir rakstīti C valodā.
  2. ttf-parser ir vienīgā atmiņai drošā ieviešana. Izlases atmiņas lasīšana nav iespējama. FreeType ievainojamības tiek pastāvīgi novērstas, un stb_truetype principā nav paredzēts patvaļīgu fontu lasīšanai.
  3. ttf-parser ir vienīgā pavedienu drošā ieviešana. Visas parsēšanas metodes ir nemainīgas. Vienīgais izņēmums ir mainīgo fontu koordinātu iestatīšana, taču šī funkcija ir atkārtoti ievadāma. FreeType pamatā ir viena vītne. stb_truetype - reentrant (varat izmantot atsevišķas kopijas dažādos pavedienos, bet ne vienu no daudziem).
  4. ttf-parser ir vienīgā implementācija, kas neizmanto kaudzes piešķiršanu. Tas ļauj paātrināt parsēšanu un izvairīties no problēmām ar OOM.
  5. Tāpat tiek pārbaudītas (arī statiski) gandrīz visas aritmētiskās darbības un skaitļu tipu konvertācijas.
  6. Sliktākajā gadījumā bibliotēka var izdarīt izņēmumu. Šajā gadījumā C API tiks notverti izņēmumi, un funkcija atgriezīs kļūdu, bet neavārēs.

Un, neskatoties uz visām drošības garantijām, ttf-parser ir arī ātrākā ieviešana. Piemēram, CFF2 parsēšana ir 3.5 reizes ātrāka nekā FreeType. Tikmēr glyf parsēšana ir par 10% lēnāka nekā stb_truetype, taču tas ir saistīts ar faktu, ka tas neatbalsta mainīgos fontus, kuru ieviešanai ir nepieciešama papildu saglabāšana. informāciju. Sīkāka informācija sadaļā README.

Avots: linux.org.ru

Pievieno komentāru