ttf-parser 0.5 - nova biblioteka za rad sa TrueType fontovima

ttf-parser je biblioteka za raščlanjivanje TrueType/OpenType fontova.
Nova verzija ima punu podršku za varijabilne fontove
(varijabilni fontovi) i C API, zbog čega sam odlučio da ga reklamiram u lore-u.

Donedavno, ako je postojala potreba za radom sa TrueType fontovima, postojale su tačno dvije opcije: FreeType i stb_truetype. Prvi je ogroman kombinat, drugi podržava prilično mali broj funkcija.

ttf-parser je negdje u sredini. Podržava sve iste TrueType tabele (TrueType format se sastoji od mnogo zasebnih binarnih tabela) kao FreeType, ali ne crta same glifove.

U isto vrijeme, ttf-parser sadrži mnoge druge značajne razlike:

  1. ttf-parser je napisan u Rustu bez upotrebe nesigurnog. FreeType i stb_truetype su napisani u C.
  2. ttf-parser je jedina implementacija bezbedna za memoriju. Čitanje nasumične memorije nije moguće. Ranjivosti se stalno popravljaju u FreeTypeu, a stb_truetype u principu nije dizajniran za čitanje proizvoljnih fontova.
  3. ttf-parser je jedina implementacija koja je sigurna za niti. Sve metode raščlanjivanja su konstantne. Jedini izuzetak je postavljanje koordinata za promjenjive fontove, ali ova funkcija je ponovno uključena. FreeType je u osnovi jednonitni. stb_truetype - reentrant (možete koristiti pojedinačne kopije u različitim nitima, ali ne jednu od mnogih).
  4. ttf-parser je jedina implementacija koja ne koristi heap alokacije. Ovo vam omogućava da ubrzate raščlanjivanje i izbjegnete probleme s OOM-om.
  5. Također, provjeravaju se gotovo sve aritmetičke operacije i konverzije numeričkih tipova (uključujući i statičke).
  6. U najgorem slučaju, biblioteka može izbaciti izuzetak. U ovom slučaju, u C API-ju, izuzeci će biti uhvaćeni i funkcija će vratiti grešku, ali se neće srušiti.

I pored svih sigurnosnih garancija, ttf-parser je i najbrža implementacija. Na primjer, raščlanjivanje CFF2 je 3.5 puta brže od FreeTypea. U međuvremenu, raščlanjivanje glyf-a je 10% sporije nego u stb_truetype, ali to je zbog činjenice da ne podržava promjenjive fontove, čija implementacija zahtijeva pohranjivanje dodatnih. informacije. Više detalja u README.

izvor: linux.org.ru

Dodajte komentar