ttf-parser 0.5 - TrueType ఫాంట్‌లతో పని చేయడానికి కొత్త లైబ్రరీ

ttf-పార్సర్ TrueType/OpenType ఫాంట్‌లను అన్వయించే లైబ్రరీ.
కొత్త వెర్షన్ వేరియబుల్ ఫాంట్‌లకు పూర్తి మద్దతును కలిగి ఉంది
(వేరియబుల్ ఫాంట్‌లు) మరియు C API, దీని ఫలితంగా నేను దానిని లోర్‌లో ప్రచారం చేయాలని నిర్ణయించుకున్నాను.

ఇటీవలి వరకు, TrueType ఫాంట్‌లతో పని చేయాల్సిన అవసరం ఉన్నట్లయితే, ఖచ్చితంగా రెండు ఎంపికలు ఉన్నాయి: FreeType మరియు stb_truetype. మొదటిది భారీ కలయిక, రెండవది చాలా తక్కువ సంఖ్యలో ఫంక్షన్లకు మద్దతు ఇస్తుంది.

ttf-parser మధ్యలో ఎక్కడో ఉంది. ఇది FreeType వలె ఒకే విధమైన TrueType పట్టికలకు (ట్రూటైప్ ఫార్మాట్ అనేక ప్రత్యేక బైనరీ పట్టికలను కలిగి ఉంటుంది) మద్దతునిస్తుంది, కానీ గ్లిఫ్‌లను స్వయంగా డ్రా చేయదు.

అదే సమయంలో, ttf-parser అనేక ఇతర ముఖ్యమైన తేడాలను కలిగి ఉంది:

  1. ttf-parser సురక్షితంగా ఉపయోగించకుండా రస్ట్‌లో వ్రాయబడింది. FreeType మరియు stb_truetype C లో వ్రాయబడ్డాయి.
  2. ttf-parser మాత్రమే మెమరీ-సురక్షిత అమలు. రాండమ్ మెమరీని చదవడం సాధ్యం కాదు. FreeTypeలో దుర్బలత్వాలు నిరంతరం పరిష్కరించబడతాయి మరియు stb_truetype సూత్రప్రాయంగా, ఏకపక్ష ఫాంట్‌లను చదవడానికి రూపొందించబడలేదు.
  3. ttf-parser మాత్రమే థ్రెడ్-సురక్షిత అమలు. అన్ని పార్సింగ్ పద్ధతులు స్థిరంగా ఉంటాయి. వేరియబుల్ ఫాంట్‌ల కోసం కోఆర్డినేట్‌లను సెట్ చేయడం మాత్రమే మినహాయింపు, కానీ ఈ ఫంక్షన్ మళ్లీ ప్రవేశిస్తుంది. ఫ్రీటైప్ ప్రాథమికంగా సింగిల్-థ్రెడ్. stb_truetype - పునఃప్రారంభం (మీరు వేర్వేరు థ్రెడ్‌లలో వ్యక్తిగత కాపీలను ఉపయోగించవచ్చు, కానీ అనేక వాటిలో ఒకటి కాదు).
  4. ttf-parser అనేది కుప్ప కేటాయింపులను ఉపయోగించని ఏకైక అమలు. ఇది పార్సింగ్‌ని వేగవంతం చేయడానికి మరియు OOMతో సమస్యలను నివారించడానికి మిమ్మల్ని అనుమతిస్తుంది.
  5. అలాగే, దాదాపు అన్ని అంకగణిత కార్యకలాపాలు మరియు సంఖ్యా రకాల మార్పిడులు (స్టాటిక్‌గా సహా) తనిఖీ చేయబడతాయి.
  6. చెత్త సందర్భంలో, లైబ్రరీ మినహాయింపును ఇవ్వవచ్చు. ఈ సందర్భంలో, C APIలో, మినహాయింపులు క్యాచ్ చేయబడతాయి మరియు ఫంక్షన్ లోపాన్ని అందిస్తుంది, కానీ క్రాష్ కాదు.

మరియు అన్ని భద్రతా హామీలు ఉన్నప్పటికీ, ttf-parser కూడా వేగవంతమైన అమలు. ఉదాహరణకు, CFF2ని అన్వయించడం FreeType కంటే 3.5 రెట్లు వేగంగా ఉంటుంది. అన్వయించడం glyf, అదే సమయంలో, stb_truetype కంటే 10% నెమ్మదిగా ఉంటుంది, అయితే ఇది వేరియబుల్ ఫాంట్‌లకు మద్దతు ఇవ్వకపోవడమే దీనికి కారణం, దీని అమలుకు అదనపు నిల్వ అవసరం. సమాచారం. మరిన్ని వివరాలు లో README.

మూలం: linux.org.ru

ఒక వ్యాఖ్యను జోడించండి