ttf-parser 0.5 – egy új könyvtár a TrueType betűtípusokkal való munkához

ttf-elemző egy könyvtár a TrueType/OpenType betűtípusok elemzéséhez.
Az új verzió teljes mértékben támogatja a változó betűtípusokat
(változó betűtípusok) és C API, aminek eredményeként úgy döntöttem, hogy meghirdetem a lore-ban.

Egészen a közelmúltig, ha TrueType betűtípusokkal kellett dolgozni, pontosan két lehetőség volt: FreeType és stb_truetype. Az első egy hatalmas kombájn, a második meglehetősen kis számú funkciót támogat.

A ttf-parser valahol középen van. Támogatja ugyanazokat a TrueType táblákat (a TrueType formátum sok különálló bináris táblából áll), mint a FreeType, de magukat a karakterjeleket nem rajzolja meg.

Ugyanakkor a ttf-parser számos más jelentős különbséget is tartalmaz:

  1. A ttf-parser Rust nyelven íródott az unsafe használata nélkül. A FreeType és az stb_truetype C-ben van írva.
  2. A ttf-parser az egyetlen memóriabiztos megvalósítás. A véletlenszerű memória olvasása nem lehetséges. A FreeType sebezhetőségeit folyamatosan javítják, és az stb_truetype elvileg nem tetszőleges betűtípusok olvasására van kialakítva.
  3. A ttf-parser az egyetlen szálbiztos megvalósítás. Minden elemzési módszer állandó. Az egyetlen kivétel a változó betűtípusok koordinátáinak beállítása, de ez a funkció újra belépő. A FreeType alapvetően egyszálú. stb_truetype - reentrant (használhat egyedi másolatokat különböző szálakban, de nem egyet a sok közül).
  4. A ttf-parser az egyetlen olyan megvalósítás, amely nem használ kupackiosztást. Ez lehetővé teszi az elemzés felgyorsítását és az OOM-mal kapcsolatos problémák elkerülését.
  5. Ezenkívül a numerikus típusok szinte minden aritmetikai műveletét és konverzióját ellenőrizzük (beleértve a statikusat is).
  6. A legrosszabb esetben a könyvtár kivételt tehet. Ebben az esetben a C API-ban a kivételeket elkapja, és a függvény hibát ad vissza, de nem fog összeomlani.

És minden biztonsági garancia ellenére a ttf-parser a leggyorsabb megvalósítás is. Például a CFF2 elemzése 3.5-szer gyorsabb, mint a FreeType. Eközben a glyf elemzése 10%-kal lassabb, mint az stb_truetype-ban, de ez annak köszönhető, hogy nem támogatja a változó fontokat, amelyek megvalósítása további tárolást igényel. információ. További részletek a README.

Forrás: linux.org.ru

Hozzászólás