ttf-parser — ez a könyvtár a TrueType/OpenType betűtípusok elemzésére szolgál.
Az új verzióban teljes körű támogatást kapott a változó betűtípusokhoz.
(változó betűtípusok) és C API, emiatt úgy döntöttem, hogy hirdetem a loren.
Egészen nemrégig, ha TrueType betűtípusokkal kívántunk dolgozni, két lehetőség állt rendelkezésre: a FreeType és a stb_truetype. Az első egy hatalmas kombájn, a második viszont meglehetősen korlátozott funkcionalitást kínál.
A ttf-parser valahol a kettő között helyezkedik el. Támogatja az összes olyan TrueType táblázatot (a TrueType formátum rengeteg különálló bináris táblázatból áll), mint a FreeType, de nem foglalkozik a glyphok kirajzolásával.
Emellett a ttf-parser számos más lényeges eltérést is tartalmaz:
- A ttf-parser Rust nyelven készült, unsafe használata nélkül. A FreeType és a stb_truetype C nyelven íródott.
- A ttf-parser az egyetlen biztonságos (memory-safe) megvalósítás. Véletlenszerű memória olvasása lehetetlen. A FreeType folyamatosan javít a sebezhetőségeken, míg a stb_truetype alapvetően nem a véletlenszerű betűtípusok olvasására van szánva.
- 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 megadása, de ez a funkció reentrantes. A FreeType alapvetően egy szálú. A stb_truetype — reentrant (külön másolatok használhatók külön szálakon, de nem egy több szálon).
- A ttf-parser az egyetlen megvalósítás, amely nem használ „heap” allokációt. Ez felgyorsítja az elemzést és elkerüli az OOM problémákat.
- Szintén szinte minden matematikai műveletet és numerikus típusok átkonvertálását ellenőrzik (beleértve a statikus ellenőrzést is).
- A legrosszabb esetben a könyvtár generálhat kivételt. Ezenkívül a C API-ban a kivételeket elkapják, és a függvény hibát ad vissza, de nem omlik össze.
É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. A glyf elemzése ugyanakkor 10%-kal lassabb az stb_truetype-hoz képest, de ezt az okozza, hogy nem támogatja a változó betűtípusokat, amelyek megvalósításához kiegészítő információt kell tárolni. További részletek itt: README.
Forrás: linux.org.ru
