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

ttf-parser Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° 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 Π΅ СдинствСната бСзопасна (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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster