plural-rules
Version:
Evaluates plural rules, so that localization libraries can choose the right plural form.
3 lines (2 loc) • 4.39 kB
JavaScript
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).pluralRules={})}(this,function(n){"use strict";let t;let e=[],l={};function r(n){return n.toLowerCase().replace("_","-")}function u(n){let t;let e=l[n=r(n)];if(void 0===e&&(t=function(n){let t=n.indexOf("-");return t>0&&n.substr(0,t)}(n))&&(e=l[t]),void 0===e)throw Error(`Unrecognised locale: "${n}".`);return"string"==typeof e&&(e=e.split(",").reduce((n,t)=>{let e=t.split(":");return n[e[0]]=+e[1],n},{}),l[t||n]=e),e}n.getPluralFormForCardinal=function(n,t){let l="string"!=typeof n?n:u(n);for(let r in l){let o=l[r];if(function(n,t){if(!(n=n.split("@")[0].replace(/^\s*/,"").replace(/\s*$/,"")).length)return!0;let e=0,l=j(/^\s+/),r=j(/^\d+/),u=$("n"),o=$("i"),i=$("f"),f=$("t"),s=$("v"),c=$("w"),a=$("is"),p=$("is not"),g=$("!="),h=$("="),d=$("mod"),I=$("%"),b=$("not"),F=$("in"),m=$("within"),y=$(".."),x=$(","),P=$("or"),v=$("and");function w(n){return function(){let t,e;for(t=0;t<n.length;t++)if(null!==(e=n[t]()))return e;return null}}function O(n){let t,l;let r=e,u=[];for(t=0;t<n.length;t++){if(null===(l=n[t]()))return e=r,null;u.push(l)}return u}function C(n,t){return function(){let l=e,r=[],u=t();for(;null!==u;)r.push(u),u=t();return r.length<n?(e=l,null):r}}function $(t){let l=t.length;return function(){let r=null;return n.substr(e,l)===t&&(r=t,e+=l),r}}function j(t){return function(){let l=n.substr(e).match(t);return null===l?null:(e+=l[0].length,l[0])}}let L=w([function(){let n=u();return null===n?n:n=parseFloat(t,10)},function(){let n=o();return null===n?n:n=parseInt(t,10)},function(){let n=i();return null===n?n:n=(t+".").split(".")[1]||0},function(){let n=f();return null===n?n:n=(t+".").split(".")[1].replace(/0$/,"")||0},function(){let n=s();return null===n?n:n=(t+".").split(".")[1].length||0},function(){let n=c();return null===n?n:n=(t+".").split(".")[1].replace(/0$/,"").length||0}]),k=w([function(){let n=O([L,l,w([d,I]),l,r]);return null===n?null:(parseInt(n[0],10),n[2],parseInt(n[4],10),parseFloat(n[0])%parseInt(n[4],10))},L]);function E(){let n=O([l,b]);return null===n?null:n[1]}function R(){let n=O([w([T,r]),C(0,S)]),t=[];return null!==n?(t=t.concat(n[0]),n[1][0]&&(t=t.concat(n[1][0])),t):null}function S(){let n=O([x,R]);return null!==n?n[1]:null}function T(){let n,t,e,l;let u=O([r,y,r]);if(null!==u){for(t=[],e=parseInt(u[0],10),l=parseInt(u[2],10),n=e;n<=l;n++)t.push(n);return t}return null}let D=w([function(){let n=O([k,l,w([a]),l,r]);return null!==n?(n[0],parseInt(n[4],10),n[0]===parseInt(n[4],10)):null},function(){let n,t;let e=O([k,l,g,l,R]);if(null!==e){for(e[0],e[4],t=e[4],n=0;n<t.length;n++)if(parseInt(t[n],10)===parseInt(e[0],10))return!1;return!0}return null},function(){let n=O([k,l,w([p,g]),l,r]);return null!==n?(n[0],parseInt(n[4],10),n[0]!==parseInt(n[4],10)):null},function(){let n=O([k,C(0,E),l,w([F,h]),l,R]);if(null!==n){let t=n[5];for(let e=0;e<t.length;e++)if(parseInt(t[e],10)===parseFloat(n[0]))return"not"!==n[1][0];return"not"===n[1][0]}return null},function(){let n=O([k,C(0,E),l,m,l,R]);if(null!==n){let t=n[5];return n[0]>=parseInt(t[0],10)&&n[0]<parseInt(t[t.length-1],10)?"not"!==n[1][0]:"not"===n[1][0]}return null}]);function U(){let n;let t=O([D,C(0,_)]);if(t){if(!t[0])return!1;for(n=0;n<t[1].length;n++)if(!t[1][n])return!1;return!0}return null}function _(){let n=O([l,v,l,D]);return null!==n?n[3]:null}function q(){let n=O([l,P,l,U]);return null!==n?(n[3],n[3]):null}let z=function(){let n;let t=O([U,C(0,q)]);if(t){for(n=0;n<t[1].length;n++)if(t[1][n])return!0;return t[0]}return!1}();if(null===z)throw Error("Parse error at position "+e.toString()+" for rule: "+n);return e!==n.length&&n.substr(0,e),z}(e[o],t))return r}},n.getPluralFormsForLocale=function(n){let t=l[n];if(void 0!==t)return t.split(",").map(n=>n.substring(0,n.indexOf(":")))},n.getPluralRulesForCardinals=u,n.getSupportedLocales=function(){return t||(t=Object.keys(l)),t},n.populatePluralData=function(n){e=n.rules,l=n.cardinals},n.setPluralFormsForCardinals=function(n,t){var u;l[n=r(n)]=(u=e,Object.keys(t).reduce((n,e)=>{let l=t[e];if("string"==typeof l){l=l.trim().replace(/ {2}/g," ");let r=u.indexOf(l);r<0&&(r=u.length,u.push(l)),l=r}return e.length>17&&(e=e.substr(17)),n[e]=l,n},{}))}});
//# sourceMappingURL=code.umd.min.js.map