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

ttf-parser je biblioteka za analizu TrueType/OpenType fontova.
Nova verzija ima punu podršku za promjenjive fontove
(promjenjivi fontovi) i C API, zbog čega sam ga odlučio reklamirati u loreu.

Sve do nedavno, ako je bilo potrebe za radom s TrueType fontovima, postojale su točno dvije opcije: FreeType i stb_truetype. Prvi je ogroman kombajn, drugi podržava prilično mali broj funkcija.

ttf-parser je negdje u sredini. Podržava sve iste TrueType tablice (TrueType format se sastoji od mnogo zasebnih binarnih tablica) kao i 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 unsafe. FreeType i stb_truetype su napisani u C-u.
  2. ttf-parser je jedina implementacija sigurna za memoriju. Čitanje nasumične memorije nije moguće. Ranjivosti se stalno popravljaju u FreeTypeu, a stb_truetype u načelu nije dizajniran za čitanje proizvoljnih fontova.
  3. ttf-parser je jedina implementacija sigurna za niti. Sve metode parsiranja su konstantne. Jedina iznimka je postavljanje koordinata za promjenjive fontove, ali ova je funkcija reentrantna. 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. To vam omogućuje da ubrzate analizu i izbjegnete probleme s OOM-om.
  5. Također, provjeravaju se gotovo sve aritmetičke operacije i pretvorbe numeričkih tipova (uključujući statički).
  6. U najgorem slučaju, knjižnica može baciti iznimku. U ovom slučaju, u C API-ju, iznimke će biti uhvaćene i funkcija će vratiti pogrešku, ali se neće srušiti.

I unatoč svim sigurnosnim jamstvima, ttf-parser je također najbrža implementacija. Na primjer, parsiranje CFF2 je 3.5 puta brže od FreeType. S druge strane, raščlanjivanje glifa je 10% sporije nego u stb_truetype, ali to je zbog činjenice da ne podržava varijabilne fontove, čija implementacija zahtijeva dodatno pohranjivanje. informacija. Više detalja u README.

Izvor: linux.org.ru

Dodajte komentar