TrueType、OpenType、および AAT 用の高レベルで安全な、割り当てゼロのフォント パーサー。
RustまたはCライブラリとして使用できます。
no_std
/WASM 互換。異なるライブラリを比較するのは非常に難しいため、テーブルベースの比較を使用しています。 TrueType テーブルには大まかに 3 つのタイプがあります。
head
、 OS/2
など) のリストを含むテーブル。glyf
、 CFF
(一種)、 hmtx
など) を含むテーブル。cmap
、 kern
、 GPOS
など) を含むテーブル。機能/ライブラリ | ttf-パーサー | フリータイプ | 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 テーブル | ✓ | ✓ | |
言語 | Rust + C API | C | C |
テスト済みバージョン | 0.17.0 | 2.12.0 | 1.24 |
ライセンス | MIT / Apache-2.0 | FTL/GPLv2 | パブリックドメイン |
伝説:
注:
ttf-parser
それ自体ではレンダリングをサポートしませんが、その上に、rusttype、ab-glyph、fontdue などの複数のレンダリング ライブラリがあります。TrueType フォントは高速なクエリを実行できるように設計されているため、ほとんどのメソッドは非常に高速です。主な例外はグリフのアウトラインです。グリフは、グリフ データ フォーマットとコンパクト フォント フォーマット (pdf) の 2 つの異なる方法を使用して保存できます。最初の方法は非常に単純なので、処理が速くなります。 2 つ目は基本的にスタックベースの VM を備えた小さな言語であり、処理が非常に難しくなります。
このベンチマークは、フォント内のすべてのグリフの輪郭を描くのにどれくらいの時間がかかるかをテストします。
x86 (AMD 3700X)
テーブル/ライブラリ | ttf-パーサー | フリータイプ | 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 | - |
ARM (アップル M1)
テーブル/ライブラリ | ttf-パーサー | フリータイプ | 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 ライセンスで定義されているように、あなたが作品に含めるために意図的に提出した投稿は、追加の条項や条件なしで上記のように二重ライセンスされるものとします。