ttf-parser 0.5 - isang bagong library para sa pagtatrabaho sa mga TrueType font

ttf-parser ay isang library para sa pag-parse ng TrueType/OpenType font.
Ang bagong bersyon ay may ganap na suporta para sa mga variable na font
(variable na mga font) at C API, bilang resulta kung saan nagpasya akong i-advertise ito sa lore.

Hanggang kamakailan lamang, kung may pangangailangan na magtrabaho sa mga TrueType na font, mayroong eksaktong dalawang opsyon: FreeType at stb_truetype. Ang una ay isang malaking pagsasama, ang pangalawa ay sumusuporta sa isang medyo maliit na bilang ng mga pag-andar.

Ang ttf-parser ay nasa gitna. Sinusuportahan nito ang lahat ng parehong TrueType na talahanayan (ang TrueType na format ay binubuo ng maraming hiwalay na binary table) bilang FreeType, ngunit hindi mismo ang gumuhit ng mga glyph.

Kasabay nito, naglalaman ang ttf-parser ng maraming iba pang makabuluhang pagkakaiba:

  1. Ang ttf-parser ay nakasulat sa Rust nang hindi gumagamit ng hindi ligtas. Ang FreeType at stb_truetype ay nakasulat sa C.
  2. ttf-parser ay ang tanging memory-safe na pagpapatupad. Ang pagbabasa ng random na memorya ay hindi posible. Ang mga kahinaan ay patuloy na inaayos sa FreeType, at ang stb_truetype, sa prinsipyo, ay hindi idinisenyo upang basahin ang mga arbitrary na font.
  3. ttf-parser ay ang tanging thread-safe na pagpapatupad. Ang lahat ng mga paraan ng pag-parse ay pare-pareho. Ang tanging exception ay ang pagtatakda ng mga coordinate para sa mga variable na font, ngunit ang function na ito ay reentrant. Ang FreeType ay karaniwang single-threaded. stb_truetype - reentrant (maaari kang gumamit ng mga indibidwal na kopya sa iba't ibang mga thread, ngunit hindi isa sa marami).
  4. Ang ttf-parser ay ang tanging pagpapatupad na hindi gumagamit ng heap allocations. Nagbibigay-daan ito sa iyong mapabilis ang pag-parse at maiwasan ang mga problema sa OOM.
  5. Gayundin, halos lahat ng mga pagpapatakbo ng aritmetika at mga conversion ng mga uri ng numero ay sinusuri (kabilang ang statically).
  6. Sa pinakamasamang kaso, ang library ay maaaring magtapon ng exception. Sa kasong ito, sa C API, ang mga pagbubukod ay mahuhuli at ang function ay magbabalik ng isang error, ngunit hindi mag-crash.

At sa kabila ng lahat ng mga garantiya sa seguridad, ang ttf-parser din ang pinakamabilis na pagpapatupad. Halimbawa, ang pag-parse ng CFF2 ay 3.5 beses na mas mabilis kaysa sa FreeType. Ang pag-parse ng glyf, samantala, ay 10% na mas mabagal kaysa sa stb_truetype, ngunit ito ay dahil sa katotohanang hindi nito sinusuportahan ang mga variable na font, ang pagpapatupad nito ay nangangailangan ng karagdagang pag-iimbak. impormasyon. Higit pang mga detalye sa README.

Pinagmulan: linux.org.ru

Magdagdag ng komento