ttf-parser 0.5 - et nytt bibliotek for arbeid med TrueType-fonter

ttf-parser er et bibliotek for å analysere TrueType/OpenType-fonter.
Den nye versjonen har full støtte for variable fonter
(variable skrifter) og C API, som et resultat av at jeg bestemte meg for å annonsere det i lore.

Inntil nylig, hvis det var behov for å jobbe med TrueType-fonter, var det nøyaktig to alternativer: FreeType og stb_truetype. Den første er en stor skurtresker, den andre støtter et ganske lite antall funksjoner.

ttf-parser er et sted i midten. Den støtter alle de samme TrueType-tabellene (TrueType-formatet består av mange separate binære tabeller) som FreeType, men tegner ikke glyphene selv.

Samtidig inneholder ttf-parser mange andre betydelige forskjeller:

  1. ttf-parser er skrevet i Rust uten å bruke usikre. FreeType og stb_truetype er skrevet i C.
  2. ttf-parser er den eneste minnesikre implementeringen. Det er ikke mulig å lese tilfeldig minne. Sårbarheter fikses hele tiden i FreeType, og stb_truetype er i prinsippet ikke laget for å lese vilkårlige fonter.
  3. ttf-parser er den eneste trådsikre implementeringen. Alle analyseringsmetoder er konstante. Det eneste unntaket er å sette koordinater for variable fonter, men denne funksjonen er reentrant. FreeType er i utgangspunktet entrådet. stb_truetype - reentrant (du kan bruke individuelle kopier i forskjellige tråder, men ikke en av mange).
  4. ttf-parser er den eneste implementeringen som ikke bruker heap-allokeringer. Dette lar deg fremskynde parsing og unngå problemer med OOM.
  5. Også nesten alle aritmetiske operasjoner og konverteringer av numeriske typer kontrolleres (inkludert statisk).
  6. I verste fall kan biblioteket gi et unntak. I dette tilfellet, i C API, vil unntak bli fanget opp, og funksjonen vil returnere en feil, men vil ikke krasje.

Og til tross for alle sikkerhetsgarantiene, er ttf-parser også den raskeste implementeringen. For eksempel er parsing av CFF2 3.5 ganger raskere enn FreeType. Parsing av glyf er i mellomtiden 10 % tregere enn i stb_truetype, men dette er på grunn av det faktum at det ikke støtter variable fonter, hvis implementering krever lagring av ekstra. informasjon. Flere detaljer i README.

Kilde: linux.org.ru

Legg til en kommentar