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:
- ttf-parser estas skribita en Rust sen uzi nesekura. FreeType kaj stb_truetype estas skribitaj en C.
- 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.
- 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).
- ttf-analizilo estas la nura efektivigo kiu ne uzas amasajn atribuojn. Ĉi tio permesas vin akceli analizadon kaj eviti problemojn kun OOM.
- Ankaŭ, preskaŭ ĉiuj aritmetikaj operacioj kaj konvertiĝoj de nombraj tipoj estas kontrolitaj (inkluzive statike).
- 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