summaryrefslogtreecommitdiff
path: root/lib/dojo/number.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dojo/number.js')
-rw-r--r--lib/dojo/number.js311
1 files changed, 311 insertions, 0 deletions
diff --git a/lib/dojo/number.js b/lib/dojo/number.js
new file mode 100644
index 000000000..95a2c5022
--- /dev/null
+++ b/lib/dojo/number.js
@@ -0,0 +1,311 @@
+/*
+ Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.number"]){
+dojo._hasResource["dojo.number"]=true;
+dojo.provide("dojo.number");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr","number",null,"ROOT,ar,ca,cs,da,de,el,en,en-au,en-gb,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh");
+dojo.require("dojo.string");
+dojo.require("dojo.regexp");
+dojo.number.format=function(_1,_2){
+_2=dojo.mixin({},_2||{});
+var _3=dojo.i18n.normalizeLocale(_2.locale),_4=dojo.i18n.getLocalization("dojo.cldr","number",_3);
+_2.customs=_4;
+var _5=_2.pattern||_4[(_2.type||"decimal")+"Format"];
+if(isNaN(_1)||Math.abs(_1)==Infinity){
+return null;
+}
+return dojo.number._applyPattern(_1,_5,_2);
+};
+dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;
+dojo.number._applyPattern=function(_6,_7,_8){
+_8=_8||{};
+var _9=_8.customs.group,_a=_8.customs.decimal,_b=_7.split(";"),_c=_b[0];
+_7=_b[(_6<0)?1:0]||("-"+_c);
+if(_7.indexOf("%")!=-1){
+_6*=100;
+}else{
+if(_7.indexOf("‰")!=-1){
+_6*=1000;
+}else{
+if(_7.indexOf("¤")!=-1){
+_9=_8.customs.currencyGroup||_9;
+_a=_8.customs.currencyDecimal||_a;
+_7=_7.replace(/\u00a4{1,3}/,function(_d){
+var _e=["symbol","currency","displayName"][_d.length-1];
+return _8[_e]||_8.currency||"";
+});
+}else{
+if(_7.indexOf("E")!=-1){
+throw new Error("exponential notation not supported");
+}
+}
+}
+}
+var _f=dojo.number._numberPatternRE;
+var _10=_c.match(_f);
+if(!_10){
+throw new Error("unable to find a number expression in pattern: "+_7);
+}
+if(_8.fractional===false){
+_8.places=0;
+}
+return _7.replace(_f,dojo.number._formatAbsolute(_6,_10[0],{decimal:_a,group:_9,places:_8.places,round:_8.round}));
+};
+dojo.number.round=function(_11,_12,_13){
+var _14=10/(_13||10);
+return (_14*+_11).toFixed(_12)/_14;
+};
+if((0.9).toFixed()==0){
+(function(){
+var _15=dojo.number.round;
+dojo.number.round=function(v,p,m){
+var d=Math.pow(10,-p||0),a=Math.abs(v);
+if(!v||a>=d||a*Math.pow(10,p+1)<5){
+d=0;
+}
+return _15(v,p,m)+(v>0?d:-d);
+};
+})();
+}
+dojo.number._formatAbsolute=function(_16,_17,_18){
+_18=_18||{};
+if(_18.places===true){
+_18.places=0;
+}
+if(_18.places===Infinity){
+_18.places=6;
+}
+var _19=_17.split("."),_1a=typeof _18.places=="string"&&_18.places.indexOf(","),_1b=_18.places;
+if(_1a){
+_1b=_18.places.substring(_1a+1);
+}else{
+if(!(_1b>=0)){
+_1b=(_19[1]||[]).length;
+}
+}
+if(!(_18.round<0)){
+_16=dojo.number.round(_16,_1b,_18.round);
+}
+var _1c=String(Math.abs(_16)).split("."),_1d=_1c[1]||"";
+if(_19[1]||_18.places){
+if(_1a){
+_18.places=_18.places.substring(0,_1a);
+}
+var pad=_18.places!==undefined?_18.places:(_19[1]&&_19[1].lastIndexOf("0")+1);
+if(pad>_1d.length){
+_1c[1]=dojo.string.pad(_1d,pad,"0",true);
+}
+if(_1b<_1d.length){
+_1c[1]=_1d.substr(0,_1b);
+}
+}else{
+if(_1c[1]){
+_1c.pop();
+}
+}
+var _1e=_19[0].replace(",","");
+pad=_1e.indexOf("0");
+if(pad!=-1){
+pad=_1e.length-pad;
+if(pad>_1c[0].length){
+_1c[0]=dojo.string.pad(_1c[0],pad);
+}
+if(_1e.indexOf("#")==-1){
+_1c[0]=_1c[0].substr(_1c[0].length-pad);
+}
+}
+var _1f=_19[0].lastIndexOf(","),_20,_21;
+if(_1f!=-1){
+_20=_19[0].length-_1f-1;
+var _22=_19[0].substr(0,_1f);
+_1f=_22.lastIndexOf(",");
+if(_1f!=-1){
+_21=_22.length-_1f-1;
+}
+}
+var _23=[];
+for(var _24=_1c[0];_24;){
+var off=_24.length-_20;
+_23.push((off>0)?_24.substr(off):_24);
+_24=(off>0)?_24.slice(0,off):"";
+if(_21){
+_20=_21;
+delete _21;
+}
+}
+_1c[0]=_23.reverse().join(_18.group||",");
+return _1c.join(_18.decimal||".");
+};
+dojo.number.regexp=function(_25){
+return dojo.number._parseInfo(_25).regexp;
+};
+dojo.number._parseInfo=function(_26){
+_26=_26||{};
+var _27=dojo.i18n.normalizeLocale(_26.locale),_28=dojo.i18n.getLocalization("dojo.cldr","number",_27),_29=_26.pattern||_28[(_26.type||"decimal")+"Format"],_2a=_28.group,_2b=_28.decimal,_2c=1;
+if(_29.indexOf("%")!=-1){
+_2c/=100;
+}else{
+if(_29.indexOf("‰")!=-1){
+_2c/=1000;
+}else{
+var _2d=_29.indexOf("¤")!=-1;
+if(_2d){
+_2a=_28.currencyGroup||_2a;
+_2b=_28.currencyDecimal||_2b;
+}
+}
+}
+var _2e=_29.split(";");
+if(_2e.length==1){
+_2e.push("-"+_2e[0]);
+}
+var re=dojo.regexp.buildGroupRE(_2e,function(_2f){
+_2f="(?:"+dojo.regexp.escapeString(_2f,".")+")";
+return _2f.replace(dojo.number._numberPatternRE,function(_30){
+var _31={signed:false,separator:_26.strict?_2a:[_2a,""],fractional:_26.fractional,decimal:_2b,exponent:false},_32=_30.split("."),_33=_26.places;
+if(_32.length==1&&_2c!=1){
+_32[1]="###";
+}
+if(_32.length==1||_33===0){
+_31.fractional=false;
+}else{
+if(_33===undefined){
+_33=_26.pattern?_32[1].lastIndexOf("0")+1:Infinity;
+}
+if(_33&&_26.fractional==undefined){
+_31.fractional=true;
+}
+if(!_26.places&&(_33<_32[1].length)){
+_33+=","+_32[1].length;
+}
+_31.places=_33;
+}
+var _34=_32[0].split(",");
+if(_34.length>1){
+_31.groupSize=_34.pop().length;
+if(_34.length>1){
+_31.groupSize2=_34.pop().length;
+}
+}
+return "("+dojo.number._realNumberRegexp(_31)+")";
+});
+},true);
+if(_2d){
+re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_35,_36,_37,_38){
+var _39=["symbol","currency","displayName"][_37.length-1],_3a=dojo.regexp.escapeString(_26[_39]||_26.currency||"");
+_36=_36?"[\\s\\xa0]":"";
+_38=_38?"[\\s\\xa0]":"";
+if(!_26.strict){
+if(_36){
+_36+="*";
+}
+if(_38){
+_38+="*";
+}
+return "(?:"+_36+_3a+_38+")?";
+}
+return _36+_3a+_38;
+});
+}
+return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_2a,decimal:_2b,factor:_2c};
+};
+dojo.number.parse=function(_3b,_3c){
+var _3d=dojo.number._parseInfo(_3c),_3e=(new RegExp("^"+_3d.regexp+"$")).exec(_3b);
+if(!_3e){
+return NaN;
+}
+var _3f=_3e[1];
+if(!_3e[1]){
+if(!_3e[2]){
+return NaN;
+}
+_3f=_3e[2];
+_3d.factor*=-1;
+}
+_3f=_3f.replace(new RegExp("["+_3d.group+"\\s\\xa0"+"]","g"),"").replace(_3d.decimal,".");
+return _3f*_3d.factor;
+};
+dojo.number._realNumberRegexp=function(_40){
+_40=_40||{};
+if(!("places" in _40)){
+_40.places=Infinity;
+}
+if(typeof _40.decimal!="string"){
+_40.decimal=".";
+}
+if(!("fractional" in _40)||/^0/.test(_40.places)){
+_40.fractional=[true,false];
+}
+if(!("exponent" in _40)){
+_40.exponent=[true,false];
+}
+if(!("eSigned" in _40)){
+_40.eSigned=[true,false];
+}
+var _41=dojo.number._integerRegexp(_40),_42=dojo.regexp.buildGroupRE(_40.fractional,function(q){
+var re="";
+if(q&&(_40.places!==0)){
+re="\\"+_40.decimal;
+if(_40.places==Infinity){
+re="(?:"+re+"\\d+)?";
+}else{
+re+="\\d{"+_40.places+"}";
+}
+}
+return re;
+},true);
+var _43=dojo.regexp.buildGroupRE(_40.exponent,function(q){
+if(q){
+return "([eE]"+dojo.number._integerRegexp({signed:_40.eSigned})+")";
+}
+return "";
+});
+var _44=_41+_42;
+if(_42){
+_44="(?:(?:"+_44+")|(?:"+_42+"))";
+}
+return _44+_43;
+};
+dojo.number._integerRegexp=function(_45){
+_45=_45||{};
+if(!("signed" in _45)){
+_45.signed=[true,false];
+}
+if(!("separator" in _45)){
+_45.separator="";
+}else{
+if(!("groupSize" in _45)){
+_45.groupSize=3;
+}
+}
+var _46=dojo.regexp.buildGroupRE(_45.signed,function(q){
+return q?"[-+]":"";
+},true);
+var _47=dojo.regexp.buildGroupRE(_45.separator,function(sep){
+if(!sep){
+return "(?:\\d+)";
+}
+sep=dojo.regexp.escapeString(sep);
+if(sep==" "){
+sep="\\s";
+}else{
+if(sep==" "){
+sep="\\s\\xa0";
+}
+}
+var grp=_45.groupSize,_48=_45.groupSize2;
+if(_48){
+var _49="(?:0|[1-9]\\d{0,"+(_48-1)+"}(?:["+sep+"]\\d{"+_48+"})*["+sep+"]\\d{"+grp+"})";
+return ((grp-_48)>0)?"(?:"+_49+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_49;
+}
+return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";
+},true);
+return _46+_47;
+};
+}