ttf-parser 0.5 - nová knižnica pre prácu s TrueType fontami

ttf-analyzátor je knižnica na analýzu fontov TrueType/OpenType.
Nová verzia má plnú podporu pre variabilné fonty
(variabilné fonty) a C API, v dôsledku čoho som sa rozhodol inzerovať ho v tradícii.

Donedávna, ak bola potreba pracovať s TrueType fontami, boli presne dve možnosti: FreeType a stb_truetype. Prvým je obrovský kombajn, druhý podporuje pomerne malý počet funkcií.

ttf-parser je niekde uprostred. Podporuje všetky rovnaké tabuľky TrueType (formát TrueType pozostáva z mnohých samostatných binárnych tabuliek) ako FreeType, ale nekreslí samotné glyfy.

Zároveň ttf-parser obsahuje mnoho ďalších významných rozdielov:

  1. ttf-parser je napísaný v Ruste bez použitia unsafe. FreeType a stb_truetype sú napísané v C.
  2. ttf-parser je jediná pamäť bezpečná implementácia. Čítanie náhodnej pamäte nie je možné. Vo FreeType sa neustále opravujú slabé miesta a stb_truetype v zásade nie je určený na čítanie ľubovoľných fontov.
  3. ttf-parser je jediná implementácia bezpečná pre vlákna. Všetky metódy analýzy sú konštantné. Jedinou výnimkou je nastavenie súradníc pre variabilné fonty, ale táto funkcia je opakovaná. FreeType je v podstate jednovláknový. stb_truetype - reentrant (môžete použiť jednotlivé kópie v rôznych vláknach, ale nie v jednom z mnohých).
  4. ttf-parser je jediná implementácia, ktorá nepoužíva alokáciu haldy. To vám umožní urýchliť analýzu a vyhnúť sa problémom s OOM.
  5. Kontrolujú sa tiež takmer všetky aritmetické operácie a prevody číselných typov (vrátane statických).
  6. V najhoršom prípade môže knižnica vyhodiť výnimku. V tomto prípade sa v C API zachytia výnimky a funkcia vráti chybu, ale nepadne.

A napriek všetkým bezpečnostným zárukám je ttf-parser tiež najrýchlejšou implementáciou. Napríklad analýza CFF2 je 3.5-krát rýchlejšia ako FreeType. Parsovanie glyf je medzitým o 10% pomalšie ako v stb_truetype, ale to je spôsobené tým, že nepodporuje variabilné fonty, ktorých implementácia vyžaduje ukladanie ďalších. informácie. Viac podrobností v README.

Zdroj: linux.org.ru

Pridať komentár