ttf-parser 0.5Β β€” новая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с TrueType ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ

ttf-parser — это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π·Π±ΠΎΡ€Π° TrueType/OpenType ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ².
Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии появилась полноцСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²
(variable fonts) ΠΈ C API, вслСдствиС Ρ‡Π΅Π³ΠΎ я Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΎΡ€Π΅ΠΊΠ»Π°ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Π½Π° Π»ΠΎΡ€Π΅.

Π”ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ссли Π±Ρ‹Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с TrueType ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ, Π±Ρ‹Π»ΠΎ Ρ€ΠΎΠ²Π½ΠΎ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: FreeType ΠΈ stb_truetype. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ являСтся ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠ±Π°ΠΉΠ½ΠΎΠΌ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ довольно нСбольшоС количСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ttf-parser находится Π³Π΄Π΅-Ρ‚ΠΎ посрСдинС. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС Ρ‚Π΅ ΠΆΠ΅ TrueType Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ TrueType состоит ΠΈΠ· мноТСства ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†) Ρ‡Ρ‚ΠΎ ΠΈ FreeType, Π½ΠΎ Π½Π΅ занимаСтся отрисовкой самих Π³Π»ΠΈΡ„ΠΎΠ².

ΠŸΡ€ΠΈ этом, ttf-parser содСрТит мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ:

  1. ttf-parser написан Π½Π° Rust Π±Π΅Π· использования unsafe. FreeType ΠΈ stb_truetype написаны Π½Π° C.
  2. ttf-parser являСтся СдинствСнной бСзопасной (memory-safe) Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ памяти Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’ΠΎ FreeType постоянно ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ уязвимости, Π° stb_truetype Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для чтСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ².
  3. ttf-parser являСтся СдинствСнной thread-safe Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ парсинга константны. ЕдинствСнным ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ², Π½ΠΎ эта функция reentrant. FreeType Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ. stb_truetype — reentrant (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, Π½ΠΎ Π½Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· мноТСства).
  4. ttf-parser являСтся СдинствСнной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ Π² «ΠΊΡƒΡ‡Π΅». Π­Ρ‚ΠΎ позволяСт ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Π±ΠΎΡ€ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ OOM.
  5. Π’Π°ΠΊΠΆΠ΅, ΠΏΠΎΡ‡Ρ‚ΠΈ всС арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ числовых Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ (Π² Ρ‚ΠΎΠΌ числС статичСски).
  6. Π’ самом Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом Π² C API ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Ρ‹ ΠΈ функция Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½ΠΎ Π½Π΅ ΡƒΠΏΠ°Π΄Ρ‘Ρ‚.

И нСсмотря Π½Π° всС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ бСзопасности, ttf-parser Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΈ самой быстрой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. НапримСр Ρ€Π°Π·Π±ΠΎΡ€ CFF2 Π² 3.5 Ρ€Π°Π·Π° быстрСС Ρ‡Π΅ΠΌ Π² FreeType. Π Π°Π·Π±ΠΎΡ€ glyf Ρ‚Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π½Π° 10% ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Ρ‡Π΅ΠΌ Π² stb_truetype, Π½ΠΎ это ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠΏ. ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π‘ΠΎΠ»ΡŒΡˆΠ΅ подробностСй Π² README.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: linux.org.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ