css-font-parser
Version:
A parser for the CSS font value
3 lines (2 loc) • 2.34 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e||self).cssFontParser={})}(this,function(e){function t(e){return!/^(-?\d|--)/.test(e)}function n(e){for(var n,l=[],f="",i="",s=7,r=0;n=e.charAt(r);r++)if(/[a-zA-Z\d\xa0-\uffff_-]/.test(n)&&7===s)f+=n;else if("\\"===n&&7===s)s=6;else if(" "===n&&7===s){if(""!==f){if(!t(f))return null;l.push(f),f=""}}else if(6===s)/[0-9a-f]/i.test(n)?(i+=n,s=8):(f+=n,s=7);else{if(8!==s)return null;/[0-9a-f]/i.test(n)&&i.length<6?i+=n:(f+=String.fromCodePoint(parseInt(i,16)),f+=n,i="",s=7)}if(""!==f){if(!t(f))return null;l.push(f)}return l.join(" ")}function l(e,t){for(var l,f=t,i="",s={"font-family":[]},r=0;l=e.charAt(r);r+=1)if(4!==f||'"'!==l&&"'"!==l)if(3===f&&","===l)f=4,i="";else if(4===f&&","===l){var a=n(i);a&&s["font-family"].push(a),i=""}else if(5===f&&" "===l)/^(?:\+|-)?(?:[0-9]*\.)?[0-9]+(?:deg|grad|rad|turn)$/.test(i)?(s["font-style"]+=" "+i,i=""):r-=1,f=1;else if(1!==f||" "!==l&&"/"!==l)2===f&&" "===l?(/^(?:\+|-)?([0-9]*\.)?[0-9]+(?:em|ex|ch|rem|vh|vw|vmin|vmax|px|mm|cm|in|pt|pc|%)?$/.test(i)&&(s["line-height"]=i),f=4,i=""):i+=l;else{if(/^(?:(?:xx|x)-large|(?:xx|s)-small|small|large|medium)$/.test(i)||/^(?:larg|small)er$/.test(i)||/^(?:\+|-)?(?:[0-9]*\.)?[0-9]+(?:em|ex|ch|rem|vh|vw|vmin|vmax|px|mm|cm|in|pt|pc|%)$/.test(i))f="/"===l?2:4,s["font-size"]=i;else if(/^italic$/.test(i))s["font-style"]=i;else if(/^oblique$/.test(i))s["font-style"]=i,f=5;else if(/^small-caps$/.test(i))s["font-variant"]=i;else if(/^(?:bold(?:er)?|lighter|normal)$/.test(i))s["font-weight"]=i;else if(/^[+-]?(?:[0-9]*\.)?[0-9]+(?:e[+-]?(?:0|[1-9][0-9]*))?$/.test(i)){var o=parseFloat(i);o>=1&&o<=1e3&&(s["font-weight"]=i)}else/^(?:(?:ultra|extra|semi)-)?(?:condensed|expanded)$/.test(i)&&(s["font-stretch"]=i);i=""}else{var u=r+1;do{if(!(u=e.indexOf(l,u)+1))return null}while("\\"===e.charAt(u-2));s["font-family"].push(e.slice(r+1,u-1).replace(/\\('|")/g,"$1")),r=u-1,f=3,i=""}if(3===f&&!/^\s*$/.test(i))return null;if(4===f){var m=n(i);m&&s["font-family"].push(m)}return s}e.parseFont=function(e){var t=l(e,1);return null!==t&&t["font-size"]&&t["font-family"].length?t:null},e.parseFontFamily=function(e){var t=l(e,4);return null!==t?t["font-family"]:null}});
//# sourceMappingURL=css-font-parser.umd.js.map