Comparing version 0.6.1 to 0.6.2
{ | ||
"name": "ssf", | ||
"version": "0.6.1", | ||
"version": "0.6.2", | ||
"author": "SheetJS", | ||
@@ -5,0 +5,0 @@ "description": "pure-JS library to format data using ECMA-376 spreadsheet Format Codes", |
56
ssf.js
@@ -8,3 +8,3 @@ /* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */ | ||
function rpad(v,d,c){var t=String(v);return t.length>=d?t:(t+fill(c||0,d-t.length));} | ||
SSF.version = '0.6.1'; | ||
SSF.version = '0.6.2'; | ||
/* Options */ | ||
@@ -124,3 +124,3 @@ var opts_fmt = {}; | ||
if(date > 2958465) return null; | ||
if(out.u > .999) { | ||
if(out.u > 0.999) { | ||
out.u = 0; | ||
@@ -206,3 +206,3 @@ if(++time == 86400) { time = 0; ++date; } | ||
var write_num = function(type, fmt, val) { | ||
if(type === '(') { | ||
if(type === '(' && !fmt.match(/\).*[0#]/)) { | ||
var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,""); | ||
@@ -213,3 +213,3 @@ if(val >= 0) return write_num('n', ffmt, val); | ||
var mul = 0, o; | ||
fmt = fmt.replace(/%/g,function(x) { mul++; return ""; }); | ||
fmt = fmt.replace(/%/g,function() { mul++; return ""; }); | ||
if(mul !== 0) return write_num(type, fmt, val * Math.pow(10,2*mul)) + fill("%",mul); | ||
@@ -267,2 +267,14 @@ fmt = fmt.replace(/(\.0+)(,+)$/g,function($$,$1,$2) { mul=$2.length; return $1; }); | ||
if((r = fmt.match(/^#,#*,#0/))) return write_num(type,fmt.replace(/^#,#*,/,""),val); | ||
if((r = fmt.match(/^([0#]+)-([0#]+)$/))) { | ||
ff = write_num(type, fmt.replace(/-/,""), val); | ||
return ff.substr(0,ff.length - r[2].length) + "-" + ff.substr(ff.length-r[2].length); | ||
} | ||
if((r = fmt.match(/^([0#]+)-([0#]+)-([0#]+)$/))) { | ||
ff = write_num(type, fmt.replace(/-/g,""), val); | ||
return ff.substr(0,ff.length - r[2].length - r[3].length) + "-" + ff.substr(ff.length-r[2].length - r[3].length, r[2].length) + "-" + ff.substr(ff.length-r[3].length); | ||
} | ||
if(fmt == "(###) ###-####") { | ||
ff = write_num(type, "##########", val); | ||
return "(" + ff.substr(0,3) + ") " + ff.substr(3, 3) + "-" + ff.substr(6); | ||
} | ||
if((r = fmt.match(/^([?]+)([ ]?)\/([ ]?)([?]+)/))) { | ||
@@ -392,9 +404,9 @@ rr = Math.min(Math.max(r[1].length, r[4].length),7); | ||
case 1: | ||
if(dt.u >= .5) { dt.u = 0; ++dt.S; } | ||
if(dt.S >= 60) { dt.S = 0; ++dt.M; } | ||
if(dt.M >= 60) { dt.M = 0; ++dt.H; } | ||
if(dt.u >= 0.5) { dt.u = 0; ++dt.S; } | ||
if(dt.S >= 60) { dt.S = 0; ++dt.M; } | ||
if(dt.M >= 60) { dt.M = 0; ++dt.H; } | ||
break; | ||
case 2: | ||
if(dt.u >= .5) { dt.u = 0; ++dt.S; } | ||
if(dt.S >= 60) { dt.S = 0; ++dt.M; } | ||
if(dt.u >= 0.5) { dt.u = 0; ++dt.S; } | ||
if(dt.S >= 60) { dt.S = 0; ++dt.M; } | ||
break; | ||
@@ -411,3 +423,3 @@ } | ||
var jj = i+1; | ||
while(out[jj] && ("?D".indexOf(out[jj].t) > -1 || (" t".indexOf(out[jj].t) > -1 && "?t".indexOf((out[jj+1]||{}).t)>-1 && (out[jj+1].t == '?' || out[jj+1].v == '/')) || out[i].t == '(' && (out[jj].t == ')' || out[jj].t == 'n') || out[jj].t == 't' && (out[jj].v == '/' || '$€'.indexOf(out[jj].v) > -1 || (out[jj].v == ' ' && (out[jj+1]||{}).t == '?')))) { | ||
while(out[jj] && ("?D".indexOf(out[jj].t) > -1 || (" t".indexOf(out[jj].t) > -1 && "?t".indexOf((out[jj+1]||{}).t)>-1 && (out[jj+1].t == '?' || out[jj+1].v == '/')) || out[i].t == '(' && (")n ".indexOf(out[jj].t) > -1) || out[jj].t == 't' && (out[jj].v == '/' || '$€'.indexOf(out[jj].v) > -1 || (out[jj].v == ' ' && (out[jj+1]||{}).t == '?')))) { | ||
out[i].v += out[jj].v; | ||
@@ -438,3 +450,25 @@ delete out[jj]; ++jj; | ||
if(typeof v !== "number") return [fmt.length, fmt[3]]; | ||
return [l, v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2]]; | ||
var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2]; | ||
if(fmt[0].match(/\[[=<>]/) || fmt[1].match(/\[[=<>]/)) { | ||
var chk = function(v, rr, out) { | ||
if(!rr) return null; | ||
var found = false; | ||
var thresh = Number(rr[2]); | ||
switch(rr[1]) { | ||
case "=": if(v == thresh) found = true; break; | ||
case ">": if(v > thresh) found = true; break; | ||
case "<": if(v < thresh) found = true; break; | ||
case "<>": if(v != thresh) found = true; break; | ||
case ">=": if(v >= thresh) found = true; break; | ||
case "<=": if(v <= thresh) found = true; break; | ||
} | ||
return found ? out : null; | ||
} | ||
var m1 = fmt[0].match(/\[([=<>]*)([-]?\d+)\]/); | ||
var m2 = fmt[1].match(/\[([=<>]*)([-]?\d+)\]/); | ||
return chk(v, m1, [l, fmt[0]]) | ||
|| chk(v, m2, [l, fmt[1]]) | ||
|| [l, fmt[m1&&m2?2:1]]; | ||
} | ||
return [l, ff]; | ||
} | ||
@@ -441,0 +475,0 @@ var format = function format(fmt,v,o) { |
72
ssf.md
@@ -299,3 +299,3 @@ # SSF | ||
``` | ||
if(out.u > .999) { | ||
if(out.u > 0.999) { | ||
out.u = 0; | ||
@@ -364,3 +364,3 @@ if(++time == 86400) { time = 0; ++date; } | ||
```js>tmp/60_number.js | ||
if(type === '(') { | ||
if(type === '(' && !fmt.match(/\).*[0#]/)) { | ||
var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,""); | ||
@@ -376,3 +376,3 @@ if(val >= 0) return write_num('n', ffmt, val); | ||
var mul = 0, o; | ||
fmt = fmt.replace(/%/g,function(x) { mul++; return ""; }); | ||
fmt = fmt.replace(/%/g,function() { mul++; return ""; }); | ||
if(mul !== 0) return write_num(type, fmt, val * Math.pow(10,2*mul)) + fill("%",mul); | ||
@@ -473,2 +473,25 @@ ``` | ||
The `Zip Code + 4` format needs to treat an interstitial hyphen as a character: | ||
``` | ||
if((r = fmt.match(/^([0#]+)-([0#]+)$/))) { | ||
ff = write_num(type, fmt.replace(/-/,""), val); | ||
return ff.substr(0,ff.length - r[2].length) + "-" + ff.substr(ff.length-r[2].length); | ||
} | ||
if((r = fmt.match(/^([0#]+)-([0#]+)-([0#]+)$/))) { | ||
ff = write_num(type, fmt.replace(/-/g,""), val); | ||
return ff.substr(0,ff.length - r[2].length - r[3].length) + "-" + ff.substr(ff.length-r[2].length - r[3].length, r[2].length) + "-" + ff.substr(ff.length-r[3].length); | ||
} | ||
``` | ||
There's a better way to generalize the phone number and other formats in terms | ||
of first drawing the digits, but this selection allows for more nuance: | ||
``` | ||
if(fmt == "(###) ###-####") { | ||
ff = write_num(type, "##########", val); | ||
return "(" + ff.substr(0,3) + ") " + ff.substr(3, 3) + "-" + ff.substr(6); | ||
} | ||
``` | ||
The frac helper function is used for fraction formats (defined below). | ||
@@ -724,9 +747,9 @@ | ||
case 1: | ||
if(dt.u >= .5) { dt.u = 0; ++dt.S; } | ||
if(dt.S >= 60) { dt.S = 0; ++dt.M; } | ||
if(dt.M >= 60) { dt.M = 0; ++dt.H; } | ||
if(dt.u >= 0.5) { dt.u = 0; ++dt.S; } | ||
if(dt.S >= 60) { dt.S = 0; ++dt.M; } | ||
if(dt.M >= 60) { dt.M = 0; ++dt.H; } | ||
break; | ||
case 2: | ||
if(dt.u >= .5) { dt.u = 0; ++dt.S; } | ||
if(dt.S >= 60) { dt.S = 0; ++dt.M; } | ||
if(dt.u >= 0.5) { dt.u = 0; ++dt.S; } | ||
if(dt.S >= 60) { dt.S = 0; ++dt.M; } | ||
break; | ||
@@ -748,3 +771,3 @@ } | ||
var jj = i+1; | ||
while(out[jj] && ("?D".indexOf(out[jj].t) > -1 || (" t".indexOf(out[jj].t) > -1 && "?t".indexOf((out[jj+1]||{}).t)>-1 && (out[jj+1].t == '?' || out[jj+1].v == '/')) || out[i].t == '(' && (out[jj].t == ')' || out[jj].t == 'n') || out[jj].t == 't' && (out[jj].v == '/' || '$€'.indexOf(out[jj].v) > -1 || (out[jj].v == ' ' && (out[jj+1]||{}).t == '?')))) { | ||
while(out[jj] && ("?D".indexOf(out[jj].t) > -1 || (" t".indexOf(out[jj].t) > -1 && "?t".indexOf((out[jj+1]||{}).t)>-1 && (out[jj+1].t == '?' || out[jj+1].v == '/')) || out[i].t == '(' && (")n ".indexOf(out[jj].t) > -1) || out[jj].t == 't' && (out[jj].v == '/' || '$€'.indexOf(out[jj].v) > -1 || (out[jj].v == ' ' && (out[jj+1]||{}).t == '?')))) { | ||
out[i].v += out[jj].v; | ||
@@ -903,3 +926,30 @@ delete out[jj]; ++jj; | ||
if(typeof v !== "number") return [fmt.length, fmt[3]]; | ||
return [l, v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2]]; | ||
``` | ||
Here we have to scan for conditions: | ||
``` | ||
var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2]; | ||
if(fmt[0].match(/\[[=<>]/) || fmt[1].match(/\[[=<>]/)) { | ||
var chk = function(v, rr, out) { | ||
if(!rr) return null; | ||
var found = false; | ||
var thresh = Number(rr[2]); | ||
switch(rr[1]) { | ||
case "=": if(v == thresh) found = true; break; | ||
case ">": if(v > thresh) found = true; break; | ||
case "<": if(v < thresh) found = true; break; | ||
case "<>": if(v != thresh) found = true; break; | ||
case ">=": if(v >= thresh) found = true; break; | ||
case "<=": if(v <= thresh) found = true; break; | ||
} | ||
return found ? out : null; | ||
} | ||
var m1 = fmt[0].match(/\[([=<>]*)([-]?\d+)\]/); | ||
var m2 = fmt[1].match(/\[([=<>]*)([-]?\d+)\]/); | ||
return chk(v, m1, [l, fmt[0]]) | ||
|| chk(v, m2, [l, fmt[1]]) | ||
|| [l, fmt[m1&&m2?2:1]]; | ||
} | ||
return [l, ff]; | ||
} | ||
@@ -1081,3 +1131,3 @@ ``` | ||
"name": "ssf", | ||
"version": "0.6.1", | ||
"version": "0.6.2", | ||
"author": "SheetJS", | ||
@@ -1084,0 +1134,0 @@ "description": "pure-JS library to format data using ECMA-376 spreadsheet Format Codes", |
@@ -74,3 +74,10 @@ [ | ||
], | ||
["00000-0000", [941051630, "94105-1630"]], | ||
["000-00-0000", [123456789, "123-45-6789"]], | ||
["[<=9999999]###-####;(###) ###-####", [8675309, "867-5309"],[2813308004, "(281) 330-8004"]], | ||
["[Red][<-25]General;[Blue][>25]General;[Green]General;[Yellow]General", [50, "50"],[26, "26"],[25,"25"],[1,"1"],[0,"0"],[-1,"-1"],[-25,"-25"],[-26,"26","#"],[-50,"50","#"], ["foo","foo"],["bar","bar"]], | ||
["[Red][<=-25]General;[Blue][>=25]General;[Green]General;[Yellow]General", [50, "50"],[26, "26"],[25,"25"],[1,"1"],[0,"0"],[-1,"-1"],[-25,"-25"],[-26,"26","#"],[-50,"50","#"], ["foo","foo"],["bar","bar"]], | ||
["[Red][=50]General;[Blue]000", [50, "50"], [51, "051"], [49, "049"]], | ||
["[Red][<>50]General;[Blue]000", [50, "050"], [51, "51"], [49, "49"]], | ||
["\"foo\";\"bar\";\"baz\";\"qux\";\"foobar\"", [1], [0], [-1], ["sheetjs"]] | ||
] |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
114770
2044