ttf-parser 0.5 - nova biblioteko por labori kun TrueType tiparoj

ttf-analizilo estas biblioteko por analizi TrueType/OpenType tiparojn.
La nova versio havas plenan subtenon por variaj tiparoj
(variaj tiparoj) kaj C API, sekve de kio mi decidis reklami ĝin en la lore.

Ĝis antaŭ nelonge, se necesis labori kun TrueType tiparoj, ekzistis ĝuste du opcioj: FreeType kaj stb_truetype. La unua estas grandega kombinaĵo, la dua subtenas sufiĉe malgrandan nombron da funkcioj.

ttf-parser estas ie en la mezo. Ĝi subtenas ĉiujn samajn TrueType-tablojn (la TrueType-formato konsistas el multaj apartaj binaraj tabeloj) kiel FreeType, sed ne desegnas la glifojn mem.

En la sama tempo, ttf-analizilo enhavas multajn aliajn signifajn diferencojn:

  1. ttf-parser estas skribita en Rust sen uzi nesekura. FreeType kaj stb_truetype estas skribitaj en C.
  2. ttf-analizilo estas la nura memor-sekura efektivigo. Legi hazardan memoron ne eblas. Vundeblecoj estas konstante korektitaj en FreeType, kaj stb_truetype principe ne estas desegnita por legi arbitrajn tiparojn.
  3. ttf-parser estas la nura faden-sekura efektivigo. Ĉiuj analizaj metodoj estas konstantaj. La nura escepto estas agordo de koordinatoj por variaj tiparoj, sed ĉi tiu funkcio estas reeniranta. FreeType estas esence unufadena. stb_truetype - reeniranto (vi povas uzi individuajn kopiojn en malsamaj fadenoj, sed ne unu el multaj).
  4. ttf-analizilo estas la nura efektivigo kiu ne uzas amasajn atribuojn. Ĉi tio permesas vin akceli analizadon kaj eviti problemojn kun OOM.
  5. Ankaŭ, preskaŭ ĉiuj aritmetikaj operacioj kaj konvertiĝoj de nombraj tipoj estas kontrolitaj (inkluzive statike).
  6. En la plej malbona kazo, la biblioteko povas ĵeti escepton. En ĉi tiu kazo, en la C API, esceptoj estos kaptitaj kaj la funkcio resendos eraron, sed ne kraŝos.

Kaj malgraŭ ĉiuj sekurecaj garantioj, ttf-parser ankaŭ estas la plej rapida efektivigo. Ekzemple, analizado de CFF2 estas 3.5 fojojn pli rapida ol FreeType. Analiza glifo, dume, estas 10% pli malrapida ol en stb_truetype, sed tio estas pro la fakto, ke ĝi ne subtenas variajn tiparojn, kies efektivigo postulas stoki pliajn. informoj. Pli da detaloj en Legu.

fonto: linux.org.ru

Aldoni komenton