ttf-parser 0.5 - Π½ΠΎΠ²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с TrueType ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Π΅

ttf-парсСр Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° TrueType/OpenType ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Π΅.
Новата вСрсия ΠΈΠΌΠ° пълна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Π΅
(ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Π΅) ΠΈ 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 Π΅ СдинствСната рСализация, бСзопасна Π·Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. Π§Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π΅ Π΅ възмоТно. УязвимоститС постоянно сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚ във FreeType, Π° stb_truetype ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π΅ Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ Π΄Π° Ρ‡Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Π΅.
  3. ttf-parser Π΅ СдинствСната рСализация, бСзопасна Π·Π° нишки. Всички ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· са постоянни. ЕдинствСното ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΅ Π·Π°Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΈ Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Π΅, Π½ΠΎ Ρ‚Π°Π·ΠΈ функция Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Π»ΠΈΠ·Π°Ρ‰Π°. 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€