Pengurai font tingkat tinggi, aman, tanpa alokasi untuk TrueType, OpenType, dan AAT.
Dapat digunakan sebagai perpustakaan Rust atau C.
no_std
/ WASM kompatibel.Sangat sulit untuk membandingkan perpustakaan yang berbeda, jadi kami menggunakan perbandingan berbasis tabel. Ada sekitar tiga jenis tabel TrueType:
head
, OS/2
, dll.).glyf
, CFF
(agak), hmtx
, dll.).cmap
, kern
, GPOS
, dll.).Fitur/Perpustakaan | pengurai ttf | Tipe Bebas | stb_truetype |
---|---|---|---|
Memori aman | ✓ | ||
Benang aman | ✓ | ~ (kebanyakan masuk kembali) | |
Alokasi nol | ✓ | ||
Font variabel | ✓ | ✓ | |
Rendering | - 1 | ✓ | ~ (sangat primitif) |
meja ankr | ✓ | ||
tabel avar | ✓ | ✓ | |
meja bdat | ~ (tidak 4) | ✓ | |
tabel bloc | ✓ | ✓ | |
tabel CBDT | ~ (tidak 8, 9) | ✓ | |
tabel CBLC | ✓ | ✓ | |
tabel COLR | ✓ | ✓ | |
tabel CPAL | ✓ | ✓ | |
tabel CFF | ✓ | ✓ | ~ (tidak ada dukungan seac ) |
tabel CFF2 | ✓ | ✓ | |
tabel cmap | ~ (tidak 8) | ✓ | ~ (no 2,8,10,14; khusus Unicode) |
tabel EBDT | ~ (tidak 8, 9) | ✓ | |
tabel EBLC | ✓ | ✓ | |
tabel feat | ✓ | ||
tabel fvar | ✓ | ✓ | |
meja gasp | ✓ | ||
tabel GDEF | ~ | ||
meja glyf | ~ 2 | ✓ | ~ 2 |
tabel GPOS | ✓ | ~ (hanya 2) | |
tabel GSUB | ✓ | ||
tabel gvar | ✓ | ✓ | |
meja head | ✓ | ✓ | ✓ |
hhea meja | ✓ | ✓ | ✓ |
meja hmtx | ✓ | ✓ | ✓ |
tabel HVAR | ✓ | ✓ | |
meja kern | ✓ | ~ (hanya 0) | ~ (hanya 0) |
meja kerx | ✓ | ||
tabel MATH | ✓ | ||
tabel maxp | ✓ | ✓ | ✓ |
tabel morx | ✓ | ||
tabel MVAR | ✓ | ✓ | |
tabel name | ✓ | ✓ | |
tabel OS/2 | ✓ | ✓ | |
meja post | ✓ | ✓ | |
meja sbix | ~ (hanya PNG) | ~ (hanya PNG) | |
tabel STAT | ✓ | ||
tabel SVG | ✓ | ✓ | ✓ |
meja trak | ✓ | ||
meja vhea | ✓ | ✓ | |
tabel vmtx | ✓ | ✓ | |
meja VORG | ✓ | ✓ | |
tabel VVAR | ✓ | ✓ | |
Bahasa | Karat + C API | C | C |
Versi yang diuji | 0.17.0 | 2.12.0 | 1.24 |
Lisensi | MIT / Apache-2.0 | FTL/GPLv2 | domain publik |
Legenda:
Catatan:
ttf-parser
tidak mendukung rendering dengan sendirinya, ada beberapa perpustakaan rendering di atasnya: rustictype, ab-glyph, dan fontdue.Font TrueType dirancang untuk kueri cepat, sehingga sebagian besar metodenya sangat cepat. Pengecualian utama adalah kerangka mesin terbang. Mesin terbang dapat disimpan menggunakan dua metode berbeda: menggunakan Glyph Data Format dan Compact Font Format (pdf). Yang pertama cukup sederhana sehingga prosesnya lebih cepat. Yang kedua pada dasarnya adalah bahasa kecil dengan VM berbasis tumpukan, yang membuatnya lebih sulit untuk diproses.
Tolok ukur ini menguji berapa lama waktu yang dibutuhkan untuk menguraikan semua mesin terbang dalam sebuah font.
x86 (AMD 3700X)
Meja/Perpustakaan | pengurai ttf | Tipe Bebas | stb_truetype |
---|---|---|---|
glyf | 0.901 ms | 1.171 ms | 0.675 ms |
gvar | 2.972 ms | 4.132 ms | - |
CFF | 1.197 ms | 5.647 ms | 2.813 ms |
CFF2 | 1.968 ms | 6.392 ms | - |
LENGAN (Apple M1)
Meja/Perpustakaan | pengurai ttf | Tipe Bebas | stb_truetype |
---|---|---|---|
glyf | 0.550 ms | 0.854 ms | 0.703 ms |
gvar | 2.270 ms | 4.594 ms | - |
CFF | 1.054 ms | 5.223 ms | 3.262 ms |
CFF2 | 1.765 ms | 5.995 ms | - |
Catatan: FreeType ternyata lambat, jadi saya khawatir telah mengacaukan sesuatu.
Dan berikut beberapa tolok ukur metodenya :
test outline_glyph_276_from_cff2 ... bench: 867 ns/iter (+/- 15)
test from_data_otf_cff ... bench: 968 ns/iter (+/- 13)
test from_data_otf_cff2 ... bench: 887 ns/iter (+/- 25)
test outline_glyph_276_from_cff ... bench: 678 ns/iter (+/- 41)
test outline_glyph_276_from_glyf ... bench: 649 ns/iter (+/- 11)
test outline_glyph_8_from_cff2 ... bench: 534 ns/iter (+/- 14)
test from_data_ttf ... bench: 467 ns/iter (+/- 11)
test glyph_name_post_276 ... bench: 223 ns/iter (+/- 5)
test outline_glyph_8_from_cff ... bench: 315 ns/iter (+/- 13)
test outline_glyph_8_from_glyf ... bench: 291 ns/iter (+/- 5)
test family_name ... bench: 183 ns/iter (+/- 102)
test glyph_name_cff_276 ... bench: 62 ns/iter (+/- 1)
test glyph_index_u41 ... bench: 16 ns/iter (+/- 0)
test glyph_name_cff_8 ... bench: 5 ns/iter (+/- 0)
test glyph_name_post_8 ... bench: 2 ns/iter (+/- 0)
test subscript_metrics ... bench: 2 ns/iter (+/- 0)
test glyph_hor_advance ... bench: 2 ns/iter (+/- 0)
test glyph_hor_side_bearing ... bench: 2 ns/iter (+/- 0)
test glyph_name_8 ... bench: 1 ns/iter (+/- 0)
test ascender ... bench: 1 ns/iter (+/- 0)
test underline_metrics ... bench: 1 ns/iter (+/- 0)
test strikeout_metrics ... bench: 1 ns/iter (+/- 0)
test x_height ... bench: 1 ns/iter (+/- 0)
test units_per_em ... bench: 0.5 ns/iter (+/- 0)
test width ... bench: 0.2 ns/iter (+/- 0)
Berlisensi di bawah salah satu dari
sesuai pilihan Anda.
Kecuali jika Anda secara eksplisit menyatakan sebaliknya, setiap kontribusi yang dengan sengaja Anda kirimkan untuk dimasukkan ke dalam karya Anda, sebagaimana didefinisikan dalam lisensi Apache-2.0, akan memiliki lisensi ganda seperti di atas, tanpa syarat atau ketentuan tambahan apa pun.