UNPKG

ilib

Version:

iLib is a cross-engine library of internationalization (i18n) classes written in pure JS

1 lines 7.36 kB
var ilib=require("./ilib.js");var Utils=require("./Utils.js");var MathUtils=require("./MathUtils.js");var Locale=require("./Locale.js");var IString=function(t){if(typeof t==="object"){if(t instanceof IString){this.str=t.str}else{this.str=t.toString()}}else if(typeof t==="string"){this.str=new String(t)}else{this.str=""}this.length=this.str.length;this.cpLength=-1;this.localeSpec=ilib.getLocale()};IString._isSurrogate=function(t){var n=t.charCodeAt(0);return n>=56320&&n<=57343||n>=55296&&n<=56319};IString.fromCodePoint=function(t){if(t<65536){return String.fromCharCode(t)}else{var n=Math.floor(t/65536)-1;var e=t&65535;return String.fromCharCode(55296|(n&15)<<6|(e&64512)>>10)+String.fromCharCode(56320|e&1023)}};IString.toCodePoint=function(t,n){if(!t||t.length===0){return-1}var e=-1,r=t.charCodeAt(n);if(r>=55296&&r<=56319){if(t.length>n+1){var i=t.charCodeAt(n+1);if(i>=56320&&i<=57343){e=((r&960)>>6)+1<<16|((r&63)<<10|i&1023)}}}else{e=r}return e};IString.loadPlurals=function(t,n,e,r){var i;if(n){i=typeof n==="string"?new Locale(n):n}else{i=new Locale(ilib.getLocale())}var s=i.getLanguage();if(!ilib.data["plurals_"+s]){Utils.loadData({name:"plurals.json",object:IString,locale:i,sync:t,loadParams:e,callback:ilib.bind(this,function(t){if(!t){IString.cache[s]={}}ilib.data["plurals_"+s]=t||{};if(r&&typeof r==="function"){r(ilib.data["plurals_"+s])}})})}else{if(r&&typeof r==="function"){r(ilib.data["plurals_"+s])}}};IString._fncs={firstProp:function(t){for(var n in t){if(n&&t[n]){return n}}return undefined},getValue:function(t,n){if(typeof t==="object"){var e=IString._fncs.firstProp(t);return IString._fncs[e](t[e],n)}else if(typeof t==="string"){return n}else{return t}},matchRangeContinuous:function(t,n){for(var e in n){if(typeof e!=="undefined"&&typeof n[e]!=="undefined"){var r=n[e];if(typeof r==="number"){if(t===n[e]){return true}}else if(Object.prototype.toString.call(r)==="[object Array]"){if(t>=r[0]&&t<=r[1]){return true}}}}return false},matchRange:function(t,n){if(Math.floor(t)!==t){return false}return IString._fncs.matchRangeContinuous(t,n)},is:function(t,n){var e=IString._fncs.getValue(t[0],n);var r=IString._fncs.getValue(t[1],n);return e==r},isnot:function(t,n){return IString._fncs.getValue(t[0],n)!=IString._fncs.getValue(t[1],n)},inrange:function(t,n){return IString._fncs.matchRange(IString._fncs.getValue(t[0],n),t[1])},notin:function(t,n){return!IString._fncs.matchRange(IString._fncs.getValue(t[0],n),t[1])},within:function(t,n){return IString._fncs.matchRangeContinuous(IString._fncs.getValue(t[0],n),t[1])},mod:function(t,n){return MathUtils.mod(IString._fncs.getValue(t[0],n),IString._fncs.getValue(t[1],n))},n:function(t,n){return n},or:function(t,n){return IString._fncs.getValue(t[0],n)||IString._fncs.getValue(t[1],n)},and:function(t,n){return IString._fncs.getValue(t[0],n)&&IString._fncs.getValue(t[1],n)}};IString.prototype={_length:function(){return this.str.length},format:function(t){var n=this.str;if(t){var e;for(var r in t){if(typeof t[r]!=="undefined"){e=new RegExp("{"+r+"}","g");n=n.replace(e,t[r])}}}return n.toString()},formatChoice:function(t,n){var e=this.str.split("|");var r=typeof t;var i=[];var s=[];var a;var o;var f;var u;var c=undefined;var l="";if(this.str.length===0){return""}for(a=0;a<e.length;a++){o=e[a].split("#");if(o.length>2){i[a]=o[0];o=o.shift();s[a]=o.join("#")}else if(o.length===2){i[a]=o[0];s[a]=o[1]}else{throw"syntax error in choice format pattern: "+e[a]}}for(a=0;a<i.length;a++){if(i[a].length===0){l=new IString(s[a])}else{switch(r){case"number":u=parseInt(t,10);if(i[a].substring(0,2)==="<="){f=parseFloat(i[a].substring(2));if(u<=f){c=new IString(s[a]);a=i.length}}else if(i[a].substring(0,2)===">="){f=parseFloat(i[a].substring(2));if(u>=f){c=new IString(s[a]);a=i.length}}else if(i[a].charAt(0)==="<"){f=parseFloat(i[a].substring(1));if(u<f){c=new IString(s[a]);a=i.length}}else if(i[a].charAt(0)===">"){f=parseFloat(i[a].substring(1));if(u>f){c=new IString(s[a]);a=i.length}}else{this.locale=this.locale||new Locale(this.localeSpec);switch(i[a]){case"zero":case"one":case"two":case"few":case"many":var h=ilib.data["plurals_"+this.locale.getLanguage()];if(h){var g=h[i[a]];if(IString._fncs.getValue(g,u)){c=new IString(s[a]);a=i.length}}break;default:var S=i[a].indexOf("-");if(S!==-1){var d=i[a].substring(0,S);var p=i[a].substring(S+1);if(u>=parseInt(d,10)&&u<=parseInt(p,10)){c=new IString(s[a]);a=i.length}}else if(u===parseInt(i[a],10)){c=new IString(s[a]);a=i.length}break}}break;case"boolean":if(i[a]==="true"&&t===true){c=new IString(s[a]);a=i.length}else if(i[a]==="false"&&t===false){c=new IString(s[a]);a=i.length}break;case"string":var I=new RegExp(i[a],"i");if(I.test(t)){c=new IString(s[a]);a=i.length}break;case"object":throw"syntax error: fmtChoice parameter for the argument index cannot be an object"}}}if(!c){c=l||new IString("")}c=c.format(n);return c.toString()},toString:function(){return this.str.toString()},valueOf:function(){return this.str.valueOf()},charAt:function(t){return new IString(this.str.charAt(t))},charCodeAt:function(t){return this.str.charCodeAt(t)},concat:function(t){return new IString(this.str.concat(t))},indexOf:function(t,n){return this.str.indexOf(t,n)},lastIndexOf:function(t,n){return this.str.lastIndexOf(t,n)},match:function(t){return this.str.match(t)},replace:function(t,n){return new IString(this.str.replace(t,n))},search:function(t){return this.str.search(t)},slice:function(t,n){return new IString(this.str.slice(t,n))},split:function(t,n){return this.str.split(t,n)},substr:function(t,n){var e=ilib._getPlatform();if(e==="qt"||e==="rhino"||e==="trireme"){if(typeof n==="undefined"){n=this.str.length-t}}return new IString(this.str.substr(t,n))},substring:function(t,n){return this.str.substring(t,n)},toLowerCase:function(){return this.str.toLowerCase()},toUpperCase:function(){return this.str.toUpperCase()},_toCodePoint:function(t){return IString.toCodePoint(this.str,t)},forEach:function(t){if(typeof t==="function"){var n=this.charIterator();while(n.hasNext()){t(n.next())}}},forEachCodePoint:function(t){if(typeof t==="function"){var n=this.iterator();while(n.hasNext()){t(n.next())}}},iterator:function(){function t(t){this.index=0;this.hasNext=function(){return this.index<t.str.length};this.next=function(){if(this.index<t.str.length){var n=t._toCodePoint(this.index);this.index+=n>65535?2:1}else{n=-1}return n}}return new t(this)},charIterator:function(){function t(t){this.index=0;this.hasNext=function(){return this.index<t.str.length};this.next=function(){var n;if(this.index<t.str.length){n=t.str.charAt(this.index);if(IString._isSurrogate(n)&&this.index+1<t.str.length&&IString._isSurrogate(t.str.charAt(this.index+1))){this.index++;n+=t.str.charAt(this.index)}this.index++}return n}}return new t(this)},codePointAt:function(t){if(t<0){return-1}var n,e=this.iterator(),r;for(n=t;n>=0&&e.hasNext();n--){r=e.next()}return n<0?r:-1},setLocale:function(t,n,e,r){if(typeof t==="object"){this.locale=t}else{this.localeSpec=t;this.locale=new Locale(t)}IString.loadPlurals(typeof n!=="undefined"?n:true,this.locale,e,r)},getLocale:function(){return(this.locale?this.locale.getSpec():this.localeSpec)||ilib.getLocale()},codePointLength:function(){if(this.cpLength===-1){var t=this.iterator();this.cpLength=0;while(t.hasNext()){this.cpLength++;t.next()}}return this.cpLength}};module.exports=IString;