ttf-parser Àr ett bibliotek för att analysera TrueType/OpenType typsnitt.
I den nya versionen har fullstÀndig support för variabla typsnitt lagts till.
(variabla typsnitt) och C API, dÀrför beslutade jag mig för att marknadsföra det pÄ loren.
Tidigare, om det fanns ett behov av att arbeta med TrueType typsnitt, fanns det precis tvÄ alternativ: FreeType och stb_truetype. Den första Àr en enorm mjukvarusvamp, medan den andra har ett ganska begrÀnsat antal funktioner.
ttf-parser ligger nÄgonstans mittemellan. Det stöder alla samma TrueType-tabeller (TrueType-formatet bestÄr av mÄnga separata binÀra tabeller) som FreeType, men hanterar inte sjÀlva ritningen av glyphs.
Samtidigt innehÄller ttf-parser mÄnga andra betydande skillnader:
- ttf-parser Àr skrivet i Rust utan att anvÀnda unsafe. FreeType och stb_truetype Àr skrivna i C.
- ttf-parser Àr den enda sÀkra (memory-safe) implementationen. Att lÀsa vilkorsminne Àr omöjligt. I FreeType rÀttas sÄrbarheter stÀndigt, och stb_truetype Àr i grunden inte avsett för att lÀsa godtyckliga typsnitt.
- ttf-parser Àr den enda trÄd-sÀkra implementationen. Alla analysmetoder Àr konstanta. Det enda undantaget Àr att stÀlla in koordinater för variabla typsnitt, men denna funktion Àr reentrant. FreeType Àr i grunden entrÄdad. stb_truetype Àr reentrant (kan anvÀnda separata kopior i olika trÄdar, men inte en av mÄnga).
- ttf-parser Àr den enda implementationen som inte anvÀnder allokering i "heapen". Detta möjliggör snabbare analys och undviker problem vid OOM.
- Dessutom kontrolleras nÀstan alla aritmetiska operationer och typkonverteringar (inklusive statiskt).
- I vÀrsta fall kan biblioteket kasta ett undantag. I C API kommer undantag att fÄngas och funktionen kommer att returnera ett fel, men inte krascha.
Och trots alla sÀkerhetsgarantier Àr ttf-parser ocksÄ den snabbaste implementationen. Till exempel Àr analysen av CFF2 3,5 gÄnger snabbare Àn i FreeType. Analysen av glyf Àr 10% lÄngsammare Àn i stb_truetype, men det beror pÄ att den inte stöder variabla typsnitt, vilket krÀver lagring av ytterligare information. Mer information finns i README.
KĂ€lla: linux.org.ru
