ตัวแยกวิเคราะห์แบบอักษรระดับสูง ปลอดภัย ไม่มีการจัดสรรสำหรับ TrueType, OpenType และ AAT
สามารถใช้เป็นไลบรารี่ Rust หรือ C
no_std
/ WASMการเปรียบเทียบไลบรารีต่างๆ เป็นเรื่องยากมาก ดังนั้นเราจึงใช้การเปรียบเทียบแบบตาราง ตาราง TrueType มีประมาณสามประเภท:
head
, OS/2
ฯลฯ)glyf
, CFF
(kinda), hmtx
ฯลฯ )cmap
, kern
, GPOS
ฯลฯ )คุณสมบัติ/ไลบรารี | ttf-parser | ฟรีไทป์ | stb_truetype |
---|---|---|---|
หน่วยความจำที่ปลอดภัย | |||
ด้ายปลอดภัย | ~ (ส่วนใหญ่กลับเข้ามาใหม่) | ||
การจัดสรรเป็นศูนย์ | |||
แบบอักษรที่เปลี่ยนแปลงได้ | |||
กำลังแสดงผล | - 1 | ~ (ดั้งเดิมมาก) | |
โต๊ะ ankr | |||
ตาราง avar | |||
ตาราง bdat | ~ (หมายเลข 4) | ||
ตาราง bloc | |||
ตาราง CBDT | ~ (หมายเลข 8, 9) | ||
ตาราง CBLC | |||
โต๊ะ COLR | |||
โต๊ะ CPAL | |||
ตาราง CFF | ~ (ไม่รองรับ seac ) | ||
ตาราง CFF2 | |||
ตาราง cmap | ~ (หมายเลข 8) | ~ (หมายเลข 2,8,10,14; Unicode เท่านั้น) | |
ตาราง EBDT | ~ (หมายเลข 8, 9) | ||
ตาราง EBLC | |||
ตาราง feat | |||
ตาราง fvar | |||
โต๊ะ gasp | |||
ตาราง GDEF | - | ||
โต๊ะ glyf | ~ 2 | ~ 2 | |
ตาราง GPOS | ~ (เพียง 2) | ||
ตาราง GSUB | |||
โต๊ะ gvar | |||
โต๊ะ head | |||
hhea โต๊ะ | |||
ตาราง hmtx | |||
โต๊ะ HVAR | |||
โต๊ะ kern | ~ (เพียง 0) | ~ (เพียง 0) | |
โต๊ะ kerx | |||
ตาราง MATH | |||
ตาราง maxp ซ์ | |||
โต๊ะ morx | |||
โต๊ะ MVAR | |||
ตาราง name | |||
ตาราง OS/2 | |||
post ตาราง | |||
โต๊ะ sbix | ~ (PNG เท่านั้น) | ~ (PNG เท่านั้น) | |
ตาราง STAT | |||
ตาราง SVG | |||
โต๊ะ trak | |||
โต๊ะ vhea | |||
ตาราง vmtx | |||
โต๊ะ VORG | |||
โต๊ะ VVAR | |||
ภาษา | สนิม + C API | ค | ค |
รุ่นที่ทดสอบแล้ว | 0.17.0 | 2.12.0 | 1.24 |
ใบอนุญาต | เอ็มไอที/อาปาเช่-2.0 | FTL/GPLv2 | โดเมนสาธารณะ |
ตำนาน:
หมายเหตุ:
ttf-parser
จะไม่รองรับการเรนเดอร์ด้วยตัวเอง แต่ก็มีไลบรารีการเรนเดอร์หลายตัวอยู่ด้านบน:rusttype, ab-glyph และ fontdueแบบอักษร TrueType ออกแบบมาเพื่อการค้นหาที่รวดเร็ว ดังนั้นวิธีการส่วนใหญ่จึงรวดเร็วมาก ข้อยกเว้นหลักคือการสรุปสัญลักษณ์ Glyphs สามารถจัดเก็บได้โดยใช้สองวิธีที่แตกต่างกัน: การใช้ Glyph Data Format และ Compact Font Format (pdf) อันแรกนั้นค่อนข้างง่ายซึ่งทำให้ประมวลผลได้เร็วขึ้น ส่วนที่สองเป็นภาษาเล็กๆ ที่มี VM แบบสแต็ก ซึ่งทำให้ประมวลผลได้ยากขึ้น
เกณฑ์มาตรฐานจะทดสอบว่าต้องใช้เวลานานเท่าใดในการร่างสัญลักษณ์ทั้งหมดในแบบอักษร
x86 (เอเอ็มดี 3700X)
โต๊ะ/ห้องสมุด | ttf-parser | ฟรีไทป์ | 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 | - |
แขน (แอปเปิ้ล M1)
โต๊ะ/ห้องสมุด | ttf-parser | ฟรีไทป์ | 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 | - |
หมายเหตุ: FreeType ทำงานช้าอย่างน่าประหลาดใจ ดังนั้นฉันจึงกังวลว่าจะทำบางอย่างผิดพลาด
และนี่คือเกณฑ์มาตรฐานบางวิธี:
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)
ได้รับอนุญาตภายใต้อย่างใดอย่างหนึ่งของ
ตามตัวเลือกของคุณ
เว้นแต่คุณจะระบุไว้เป็นอย่างอื่นอย่างชัดเจน การสนับสนุนใดๆ ที่ส่งโดยเจตนาเพื่อรวมไว้ในผลงานของคุณ ตามที่กำหนดไว้ในใบอนุญาต Apache-2.0 จะต้องได้รับใบอนุญาตแบบคู่ตามข้างต้น โดยไม่มีข้อกำหนดหรือเงื่อนไขเพิ่มเติมใดๆ