ttf-талдоочу TrueType/OpenType шрифттерин талдоо үчүн китепкана болуп саналат.
Жаңы версия өзгөрүлмө шрифттерге толук колдоо көрсөтөт
(өзгөрүлмө шрифттер) жана C API, анын натыйжасында мен аны таанып-билүүнү чечтим.
Акыркы убакка чейин TrueType шрифттери менен иштөө зарылчылыгы бар болсо, анда так эки вариант бар болчу: FreeType жана stb_truetype. Биринчиси - чоң комбайн, экинчиси аз сандагы функцияларды колдойт.
ttf-парсер ортодо бир жерде. Ал FreeType сыяктуу эле TrueType таблицаларын (TrueType форматы көптөгөн өзүнчө экилик таблицалардан турат) колдойт, бирок глифтердин өзүн тартпайт.
Ошол эле учурда, ttf-парсер башка көптөгөн олуттуу айырмачылыктарды камтыйт:
- ttf-парсер кооптуу колдонбостон Rust тилинде жазылган. FreeType жана stb_truetype С тилинде жазылган.
- ttf-парсер эстутум үчүн коопсуз ишке ашыруу болуп саналат. Кокус эстутумду окуу мүмкүн эмес. FreeType'де аялуу жерлер тынымсыз оңдолуп турат жана stb_truetype, негизинен, ыктыярдуу шрифттерди окуу үчүн иштелип чыккан эмес.
- ttf-парсер бирден-бир жипти коопсуз ишке ашыруу болуп саналат. Бардык талдоо ыкмалары туруктуу. Бир гана өзгөчөлүк өзгөрүлмө шрифттерге координаттарды коюу болуп саналат, бирок бул функция кайра кирет. FreeType негизинен бир жиптүү. stb_truetype - кайра кирүүчү (сиз ар кандай жиптерде жеке көчүрмөлөрдү колдоно аласыз, бирок көптөрдүн бири эмес).
- ttf-парсер үймөк бөлүштүрүүнү колдонбогон жалгыз ишке ашыруу. Бул талдоону тездетүүгө жана OOM менен көйгөйлөрдөн качууга мүмкүндүк берет.
- Ошондой эле, дээрлик бардык арифметикалык амалдар жана сандык түрлөрдүн конверсиялары текшерилет (анын ичинде статикалык).
- Эң начар учурда, китепкана өзгөчөлүктү ташташы мүмкүн. Бул учурда, C APIде өзгөчөлүктөр кармалып, функция катаны кайтарат, бирок бузулбайт.
Жана бардык коопсуздук кепилдиктерине карабастан, ttf-парсер да эң тез ишке ашыруу болуп саналат. Мисалы, CFF2 талдоо FreeType караганда 3.5 эсе тезирээк. Ошол эле учурда glyf талдоо stb_truetypeге караганда 10% жайыраак, бирок бул өзгөрүлмө шрифттерди колдобогондугу менен байланыштуу, аларды ишке ашыруу кошумча сактоону талап кылат. маалымат. Кененирээк маалыматта README.
Source: linux.org.ru