ttf-పార్సర్ TrueType/OpenType ఫాంట్లను అన్వయించే లైబ్రరీ.
కొత్త వెర్షన్ వేరియబుల్ ఫాంట్లకు పూర్తి మద్దతును కలిగి ఉంది
(వేరియబుల్ ఫాంట్లు) మరియు C API, దీని ఫలితంగా నేను దానిని లోర్లో ప్రచారం చేయాలని నిర్ణయించుకున్నాను.
ఇటీవలి వరకు, TrueType ఫాంట్లతో పని చేయాల్సిన అవసరం ఉన్నట్లయితే, ఖచ్చితంగా రెండు ఎంపికలు ఉన్నాయి: FreeType మరియు stb_truetype. మొదటిది భారీ కలయిక, రెండవది చాలా తక్కువ సంఖ్యలో ఫంక్షన్లకు మద్దతు ఇస్తుంది.
ttf-parser మధ్యలో ఎక్కడో ఉంది. ఇది FreeType వలె ఒకే విధమైన TrueType పట్టికలకు (ట్రూటైప్ ఫార్మాట్ అనేక ప్రత్యేక బైనరీ పట్టికలను కలిగి ఉంటుంది) మద్దతునిస్తుంది, కానీ గ్లిఫ్లను స్వయంగా డ్రా చేయదు.
అదే సమయంలో, ttf-parser అనేక ఇతర ముఖ్యమైన తేడాలను కలిగి ఉంది:
- ttf-parser సురక్షితంగా ఉపయోగించకుండా రస్ట్లో వ్రాయబడింది. FreeType మరియు stb_truetype C లో వ్రాయబడ్డాయి.
- ttf-parser మాత్రమే మెమరీ-సురక్షిత అమలు. రాండమ్ మెమరీని చదవడం సాధ్యం కాదు. FreeTypeలో దుర్బలత్వాలు నిరంతరం పరిష్కరించబడతాయి మరియు stb_truetype సూత్రప్రాయంగా, ఏకపక్ష ఫాంట్లను చదవడానికి రూపొందించబడలేదు.
- ttf-parser మాత్రమే థ్రెడ్-సురక్షిత అమలు. అన్ని పార్సింగ్ పద్ధతులు స్థిరంగా ఉంటాయి. వేరియబుల్ ఫాంట్ల కోసం కోఆర్డినేట్లను సెట్ చేయడం మాత్రమే మినహాయింపు, కానీ ఈ ఫంక్షన్ మళ్లీ ప్రవేశిస్తుంది. ఫ్రీటైప్ ప్రాథమికంగా సింగిల్-థ్రెడ్. stb_truetype - పునఃప్రారంభం (మీరు వేర్వేరు థ్రెడ్లలో వ్యక్తిగత కాపీలను ఉపయోగించవచ్చు, కానీ అనేక వాటిలో ఒకటి కాదు).
- ttf-parser అనేది కుప్ప కేటాయింపులను ఉపయోగించని ఏకైక అమలు. ఇది పార్సింగ్ని వేగవంతం చేయడానికి మరియు OOMతో సమస్యలను నివారించడానికి మిమ్మల్ని అనుమతిస్తుంది.
- అలాగే, దాదాపు అన్ని అంకగణిత కార్యకలాపాలు మరియు సంఖ్యా రకాల మార్పిడులు (స్టాటిక్గా సహా) తనిఖీ చేయబడతాయి.
- చెత్త సందర్భంలో, లైబ్రరీ మినహాయింపును ఇవ్వవచ్చు. ఈ సందర్భంలో, C APIలో, మినహాయింపులు క్యాచ్ చేయబడతాయి మరియు ఫంక్షన్ లోపాన్ని అందిస్తుంది, కానీ క్రాష్ కాదు.
మరియు అన్ని భద్రతా హామీలు ఉన్నప్పటికీ, ttf-parser కూడా వేగవంతమైన అమలు. ఉదాహరణకు, CFF2ని అన్వయించడం FreeType కంటే 3.5 రెట్లు వేగంగా ఉంటుంది. అన్వయించడం glyf, అదే సమయంలో, stb_truetype కంటే 10% నెమ్మదిగా ఉంటుంది, అయితే ఇది వేరియబుల్ ఫాంట్లకు మద్దతు ఇవ్వకపోవడమే దీనికి కారణం, దీని అమలుకు అదనపు నిల్వ అవసరం. సమాచారం. మరిన్ని వివరాలు లో README.
మూలం: linux.org.ru