forked from sheetjs/sheetjs
ExtendScript
- explicit logical association (&& and ||) - test for negative pounds (fixes #17 h/t @cesarhermosilla) - eslint recommended
This commit is contained in:
parent
d273a28d54
commit
842415c41d
@ -5,6 +5,7 @@
|
|||||||
"ecmaVersion": 3,
|
"ecmaVersion": 3,
|
||||||
},
|
},
|
||||||
"plugins": [ "html", "json" ],
|
"plugins": [ "html", "json" ],
|
||||||
|
"extends": "eslint:recommended",
|
||||||
"rules": {
|
"rules": {
|
||||||
"no-use-before-define": [ 1, {
|
"no-use-before-define": [ 1, {
|
||||||
"functions":false, "classes":true, "variables":false
|
"functions":false, "classes":true, "variables":false
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||||
|
/* eslint-env node */
|
||||||
|
/* eslint no-console:0 */
|
||||||
var SSF = require('../');
|
var SSF = require('../');
|
||||||
var argv = process.argv.slice(2);
|
var argv = process.argv.slice(2);
|
||||||
if(argv.length < 2 || argv[0] == "-h" || argv[0] == "--help") {
|
if(argv.length < 2 || argv[0] == "-h" || argv[0] == "--help") {
|
||||||
console.error("usage: ssf <format> <value>");
|
console.error("usage: ssf <format> <value>");
|
||||||
console.error("output: format_as_string|format_as_number");
|
console.error("output: format_as_string|format_as_number|");
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
console.log(SSF.format(argv[0],argv[1]) + "|" + SSF.format(argv[0],+(argv[1])));
|
console.log(SSF.format(argv[0],argv[1]) + "|" + SSF.format(argv[0],+(argv[1])) + "|");
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
function general_fmt_int(v/*:number*/, opts/*:?any*/)/*:string*/ { return ""+v; }
|
function general_fmt_int(v/*:number*/)/*:string*/ { return ""+v; }
|
||||||
SSF._general_int = general_fmt_int;
|
SSF._general_int = general_fmt_int;
|
||||||
var general_fmt_num = (function make_general_fmt_num() {
|
var general_fmt_num = (function make_general_fmt_num() {
|
||||||
var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/;
|
var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/;
|
||||||
@ -18,11 +18,9 @@ function gfn4(o) {
|
|||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
function gfn5(o) {
|
function gfn5(o) {
|
||||||
//for(var i = 0; i != o.length; ++i) if(o.charCodeAt(i) === 46) return o.replace(gnr2,"").replace(gnr1,".$1");
|
|
||||||
//return o;
|
|
||||||
return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o;
|
return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o;
|
||||||
}
|
}
|
||||||
return function general_fmt_num(v/*:number*/, opts/*:?any*/)/*:string*/ {
|
return function general_fmt_num(v/*:number*/)/*:string*/ {
|
||||||
var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
|
var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
|
||||||
if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
|
if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
|
||||||
else if(Math.abs(V) <= 9) o = gfn2(v);
|
else if(Math.abs(V) <= 9) o = gfn2(v);
|
||||||
@ -31,11 +29,11 @@ return function general_fmt_num(v/*:number*/, opts/*:?any*/)/*:string*/ {
|
|||||||
return gfn5(gfn4(o));
|
return gfn5(gfn4(o));
|
||||||
};})();
|
};})();
|
||||||
SSF._general_num = general_fmt_num;
|
SSF._general_num = general_fmt_num;
|
||||||
function general_fmt(v/*:any*/, opts/*:?any*/) {
|
function general_fmt(v/*:any*/) {
|
||||||
switch(typeof v) {
|
switch(typeof v) {
|
||||||
case 'string': return v;
|
case 'string': return v;
|
||||||
case 'boolean': return v ? "TRUE" : "FALSE";
|
case 'boolean': return v ? "TRUE" : "FALSE";
|
||||||
case 'number': return (v|0) === v ? general_fmt_int(v, opts) : general_fmt_num(v, opts);
|
case 'number': return (v|0) === v ? general_fmt_int(v/*, opts*/) : general_fmt_num(v/*, opts*/);
|
||||||
case 'undefined': return "";
|
case 'undefined': return "";
|
||||||
case 'object': if(v == null) return "";
|
case 'object': if(v == null) return "";
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
function fix_hijri(date, o) { return 0; }
|
function fix_hijri(/*date, o*/) { return 0; }
|
||||||
|
@ -80,8 +80,7 @@ function write_num_int(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string
|
|||||||
case "##,###":
|
case "##,###":
|
||||||
case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
|
case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
|
||||||
default:
|
default:
|
||||||
if(fmt.slice(-3) == ".00") return write_num_int(type, fmt.slice(0,-3), val) + ".00";
|
if(fmt.match(/\.[0#?]*$/)) return write_num_int(type, fmt.slice(0,fmt.lastIndexOf(".")), val) + hashq(fmt.slice(fmt.lastIndexOf(".")));
|
||||||
if(fmt.slice(-2) == ".0") return write_num_int(type, fmt.slice(0,-2), val) + ".0";
|
|
||||||
}
|
}
|
||||||
throw new Error("unsupported format |" + fmt + "|");
|
throw new Error("unsupported format |" + fmt + "|");
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
function split_fmt(fmt/*:string*/)/*:Array<string>*/ {
|
function split_fmt(fmt/*:string*/)/*:Array<string>*/ {
|
||||||
var out/*:Array<string>*/ = [];
|
var out/*:Array<string>*/ = [];
|
||||||
var in_str = false, cc;
|
var in_str = false/*, cc*/;
|
||||||
for(var i = 0, j = 0; i < fmt.length; ++i) switch((cc=fmt.charCodeAt(i))) {
|
for(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {
|
||||||
case 34: /* '"' */
|
case 34: /* '"' */
|
||||||
in_str = !in_str; break;
|
in_str = !in_str; break;
|
||||||
case 95: case 42: case 92: /* '_' '*' '\\' */
|
case 95: case 42: case 92: /* '_' '*' '\\' */
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
var abstime = /\[[HhMmSs]*\]/;
|
var abstime = /\[[HhMmSs]*\]/;
|
||||||
function fmt_is_date(fmt/*:string*/)/*:boolean*/ {
|
function fmt_is_date(fmt/*:string*/)/*:boolean*/ {
|
||||||
var i = 0, cc = 0, c = "", o = "";
|
var i = 0, /*cc = 0,*/ c = "", o = "";
|
||||||
while(i < fmt.length) {
|
while(i < fmt.length) {
|
||||||
switch((c = fmt.charAt(i))) {
|
switch((c = fmt.charAt(i))) {
|
||||||
case 'G': if(isgeneral(fmt, i)) i+= 6; i++; break;
|
case 'G': if(isgeneral(fmt, i)) i+= 6; i++; break;
|
||||||
case '"': for(;(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i; ++i; break;
|
case '"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i; ++i; break;
|
||||||
case '\\': i+=2; break;
|
case '\\': i+=2; break;
|
||||||
case '_': i+=2; break;
|
case '_': i+=2; break;
|
||||||
case '@': ++i; break;
|
case '@': ++i; break;
|
||||||
@ -26,13 +26,13 @@ function fmt_is_date(fmt/*:string*/)/*:boolean*/ {
|
|||||||
case '.':
|
case '.':
|
||||||
/* falls through */
|
/* falls through */
|
||||||
case '0': case '#':
|
case '0': case '#':
|
||||||
while(i < fmt.length && ("0#?.,E+-%".indexOf(c=fmt.charAt(++i)) > -1 || c=='\\' && fmt.charAt(i+1) == "-" && "0#".indexOf(fmt.charAt(i+2))>-1)){}
|
while(i < fmt.length && ("0#?.,E+-%".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\' && fmt.charAt(i+1) == "-" && "0#".indexOf(fmt.charAt(i+2))>-1))){/* empty */}
|
||||||
break;
|
break;
|
||||||
case '?': while(fmt.charAt(++i) === c){} break;
|
case '?': while(fmt.charAt(++i) === c){/* empty */} break;
|
||||||
case '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;
|
case '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;
|
||||||
case '(': case ')': ++i; break;
|
case '(': case ')': ++i; break;
|
||||||
case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
|
case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
|
||||||
while(i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1){} break;
|
while(i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;
|
||||||
case ' ': ++i; break;
|
case ' ': ++i; break;
|
||||||
default: ++i; break;
|
default: ++i; break;
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
|
|||||||
}
|
}
|
||||||
/* falls through */
|
/* falls through */
|
||||||
case '0': case '#':
|
case '0': case '#':
|
||||||
o = c; while(++i < fmt.length && "0#?.,E+-%".indexOf(c=fmt.charAt(i)) > -1 || c=='\\' && fmt.charAt(i+1) == "-" && i < fmt.length - 2 && "0#".indexOf(fmt.charAt(i+2))>-1) o += c;
|
o = c; while((++i < fmt.length && "0#?.,E+-%".indexOf(c=fmt.charAt(i)) > -1) || (c=='\\' && fmt.charAt(i+1) == "-" && i < fmt.length - 2 && "0#".indexOf(fmt.charAt(i+2))>-1)) o += c;
|
||||||
out[out.length] = {t:'n', v:o}; break;
|
out[out.length] = {t:'n', v:o}; break;
|
||||||
case '?':
|
case '?':
|
||||||
o = c; while(fmt.charAt(++i) === c) o+=c;
|
o = c; while(fmt.charAt(++i) === c) o+=c;
|
||||||
@ -122,9 +122,9 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
|
|||||||
jj = i+1;
|
jj = i+1;
|
||||||
while(out[jj] != null && (
|
while(out[jj] != null && (
|
||||||
(c=out[jj].t) === "?" || c === "D" ||
|
(c=out[jj].t) === "?" || c === "D" ||
|
||||||
(c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/') ||
|
((c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/')) ||
|
||||||
out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') ||
|
(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||
|
||||||
c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?')
|
(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))
|
||||||
)) {
|
)) {
|
||||||
out[i].v += out[jj].v;
|
out[i].v += out[jj].v;
|
||||||
out[jj] = {v:"", t:";"}; ++jj;
|
out[jj] = {v:"", t:";"}; ++jj;
|
||||||
@ -178,7 +178,7 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
|
|||||||
if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
|
if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
|
||||||
jj = ostr.indexOf(".")+1;
|
jj = ostr.indexOf(".")+1;
|
||||||
for(i=decpt; i<out.length; ++i) {
|
for(i=decpt; i<out.length; ++i) {
|
||||||
if(out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt ) continue;
|
if(out[i] == null || ('n?('.indexOf(out[i].t) === -1 && i !== decpt)) continue;
|
||||||
j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
|
j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
|
||||||
vv = out[i].v.substr(0,j);
|
vv = out[i].v.substr(0,j);
|
||||||
for(; j<out[i].v.length; ++j) {
|
for(; j<out[i].v.length; ++j) {
|
||||||
|
1
misc/photoshop.jsx
Normal file
1
misc/photoshop.jsx
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "ssf.flow.js";
var fmt = 10;
var data = 123.456789;
alert(SSF.format(fmt, data));
|
39
ssf.flow.js
39
ssf.flow.js
@ -101,7 +101,7 @@ function frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array<number>*/
|
|||||||
var q = Math.floor(sgn * P/Q);
|
var q = Math.floor(sgn * P/Q);
|
||||||
return [q, sgn*P - q*Q, Q];
|
return [q, sgn*P - q*Q, Q];
|
||||||
}
|
}
|
||||||
function general_fmt_int(v/*:number*/, opts/*:?any*/)/*:string*/ { return ""+v; }
|
function general_fmt_int(v/*:number*/)/*:string*/ { return ""+v; }
|
||||||
SSF._general_int = general_fmt_int;
|
SSF._general_int = general_fmt_int;
|
||||||
var general_fmt_num = (function make_general_fmt_num() {
|
var general_fmt_num = (function make_general_fmt_num() {
|
||||||
var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/;
|
var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/;
|
||||||
@ -121,11 +121,9 @@ function gfn4(o) {
|
|||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
function gfn5(o) {
|
function gfn5(o) {
|
||||||
//for(var i = 0; i != o.length; ++i) if(o.charCodeAt(i) === 46) return o.replace(gnr2,"").replace(gnr1,".$1");
|
|
||||||
//return o;
|
|
||||||
return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o;
|
return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o;
|
||||||
}
|
}
|
||||||
return function general_fmt_num(v/*:number*/, opts/*:?any*/)/*:string*/ {
|
return function general_fmt_num(v/*:number*/)/*:string*/ {
|
||||||
var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
|
var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
|
||||||
if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
|
if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
|
||||||
else if(Math.abs(V) <= 9) o = gfn2(v);
|
else if(Math.abs(V) <= 9) o = gfn2(v);
|
||||||
@ -134,18 +132,18 @@ return function general_fmt_num(v/*:number*/, opts/*:?any*/)/*:string*/ {
|
|||||||
return gfn5(gfn4(o));
|
return gfn5(gfn4(o));
|
||||||
};})();
|
};})();
|
||||||
SSF._general_num = general_fmt_num;
|
SSF._general_num = general_fmt_num;
|
||||||
function general_fmt(v/*:any*/, opts/*:?any*/) {
|
function general_fmt(v/*:any*/) {
|
||||||
switch(typeof v) {
|
switch(typeof v) {
|
||||||
case 'string': return v;
|
case 'string': return v;
|
||||||
case 'boolean': return v ? "TRUE" : "FALSE";
|
case 'boolean': return v ? "TRUE" : "FALSE";
|
||||||
case 'number': return (v|0) === v ? general_fmt_int(v, opts) : general_fmt_num(v, opts);
|
case 'number': return (v|0) === v ? general_fmt_int(v/*, opts*/) : general_fmt_num(v/*, opts*/);
|
||||||
case 'undefined': return "";
|
case 'undefined': return "";
|
||||||
case 'object': if(v == null) return "";
|
case 'object': if(v == null) return "";
|
||||||
}
|
}
|
||||||
throw new Error("unsupported value in General format: " + v);
|
throw new Error("unsupported value in General format: " + v);
|
||||||
}
|
}
|
||||||
SSF._general = general_fmt;
|
SSF._general = general_fmt;
|
||||||
function fix_hijri(date, o) { return 0; }
|
function fix_hijri(/*date, o*/) { return 0; }
|
||||||
function parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {
|
function parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {
|
||||||
if(v > 2958465 || v < 0) return null;
|
if(v > 2958465 || v < 0) return null;
|
||||||
var date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;
|
var date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;
|
||||||
@ -526,8 +524,7 @@ function write_num_int(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string
|
|||||||
case "##,###":
|
case "##,###":
|
||||||
case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
|
case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
|
||||||
default:
|
default:
|
||||||
if(fmt.slice(-3) == ".00") return write_num_int(type, fmt.slice(0,-3), val) + ".00";
|
if(fmt.match(/\.[0#?]*$/)) return write_num_int(type, fmt.slice(0,fmt.lastIndexOf(".")), val) + hashq(fmt.slice(fmt.lastIndexOf(".")));
|
||||||
if(fmt.slice(-2) == ".0") return write_num_int(type, fmt.slice(0,-2), val) + ".0";
|
|
||||||
}
|
}
|
||||||
throw new Error("unsupported format |" + fmt + "|");
|
throw new Error("unsupported format |" + fmt + "|");
|
||||||
}
|
}
|
||||||
@ -536,8 +533,8 @@ return function write_num(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:str
|
|||||||
};})();
|
};})();
|
||||||
function split_fmt(fmt/*:string*/)/*:Array<string>*/ {
|
function split_fmt(fmt/*:string*/)/*:Array<string>*/ {
|
||||||
var out/*:Array<string>*/ = [];
|
var out/*:Array<string>*/ = [];
|
||||||
var in_str = false, cc;
|
var in_str = false/*, cc*/;
|
||||||
for(var i = 0, j = 0; i < fmt.length; ++i) switch((cc=fmt.charCodeAt(i))) {
|
for(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {
|
||||||
case 34: /* '"' */
|
case 34: /* '"' */
|
||||||
in_str = !in_str; break;
|
in_str = !in_str; break;
|
||||||
case 95: case 42: case 92: /* '_' '*' '\\' */
|
case 95: case 42: case 92: /* '_' '*' '\\' */
|
||||||
@ -553,11 +550,11 @@ function split_fmt(fmt/*:string*/)/*:Array<string>*/ {
|
|||||||
SSF._split = split_fmt;
|
SSF._split = split_fmt;
|
||||||
var abstime = /\[[HhMmSs]*\]/;
|
var abstime = /\[[HhMmSs]*\]/;
|
||||||
function fmt_is_date(fmt/*:string*/)/*:boolean*/ {
|
function fmt_is_date(fmt/*:string*/)/*:boolean*/ {
|
||||||
var i = 0, cc = 0, c = "", o = "";
|
var i = 0, /*cc = 0,*/ c = "", o = "";
|
||||||
while(i < fmt.length) {
|
while(i < fmt.length) {
|
||||||
switch((c = fmt.charAt(i))) {
|
switch((c = fmt.charAt(i))) {
|
||||||
case 'G': if(isgeneral(fmt, i)) i+= 6; i++; break;
|
case 'G': if(isgeneral(fmt, i)) i+= 6; i++; break;
|
||||||
case '"': for(;(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i; ++i; break;
|
case '"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i; ++i; break;
|
||||||
case '\\': i+=2; break;
|
case '\\': i+=2; break;
|
||||||
case '_': i+=2; break;
|
case '_': i+=2; break;
|
||||||
case '@': ++i; break;
|
case '@': ++i; break;
|
||||||
@ -579,13 +576,13 @@ function fmt_is_date(fmt/*:string*/)/*:boolean*/ {
|
|||||||
case '.':
|
case '.':
|
||||||
/* falls through */
|
/* falls through */
|
||||||
case '0': case '#':
|
case '0': case '#':
|
||||||
while(i < fmt.length && ("0#?.,E+-%".indexOf(c=fmt.charAt(++i)) > -1 || c=='\\' && fmt.charAt(i+1) == "-" && "0#".indexOf(fmt.charAt(i+2))>-1)){}
|
while(i < fmt.length && ("0#?.,E+-%".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\' && fmt.charAt(i+1) == "-" && "0#".indexOf(fmt.charAt(i+2))>-1))){/* empty */}
|
||||||
break;
|
break;
|
||||||
case '?': while(fmt.charAt(++i) === c){} break;
|
case '?': while(fmt.charAt(++i) === c){/* empty */} break;
|
||||||
case '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;
|
case '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;
|
||||||
case '(': case ')': ++i; break;
|
case '(': case ')': ++i; break;
|
||||||
case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
|
case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
|
||||||
while(i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1){} break;
|
while(i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;
|
||||||
case ' ': ++i; break;
|
case ' ': ++i; break;
|
||||||
default: ++i; break;
|
default: ++i; break;
|
||||||
}
|
}
|
||||||
@ -655,7 +652,7 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
|
|||||||
}
|
}
|
||||||
/* falls through */
|
/* falls through */
|
||||||
case '0': case '#':
|
case '0': case '#':
|
||||||
o = c; while(++i < fmt.length && "0#?.,E+-%".indexOf(c=fmt.charAt(i)) > -1 || c=='\\' && fmt.charAt(i+1) == "-" && i < fmt.length - 2 && "0#".indexOf(fmt.charAt(i+2))>-1) o += c;
|
o = c; while((++i < fmt.length && "0#?.,E+-%".indexOf(c=fmt.charAt(i)) > -1) || (c=='\\' && fmt.charAt(i+1) == "-" && i < fmt.length - 2 && "0#".indexOf(fmt.charAt(i+2))>-1)) o += c;
|
||||||
out[out.length] = {t:'n', v:o}; break;
|
out[out.length] = {t:'n', v:o}; break;
|
||||||
case '?':
|
case '?':
|
||||||
o = c; while(fmt.charAt(++i) === c) o+=c;
|
o = c; while(fmt.charAt(++i) === c) o+=c;
|
||||||
@ -717,9 +714,9 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
|
|||||||
jj = i+1;
|
jj = i+1;
|
||||||
while(out[jj] != null && (
|
while(out[jj] != null && (
|
||||||
(c=out[jj].t) === "?" || c === "D" ||
|
(c=out[jj].t) === "?" || c === "D" ||
|
||||||
(c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/') ||
|
((c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/')) ||
|
||||||
out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') ||
|
(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||
|
||||||
c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?')
|
(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))
|
||||||
)) {
|
)) {
|
||||||
out[i].v += out[jj].v;
|
out[i].v += out[jj].v;
|
||||||
out[jj] = {v:"", t:";"}; ++jj;
|
out[jj] = {v:"", t:";"}; ++jj;
|
||||||
@ -773,7 +770,7 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
|
|||||||
if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
|
if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
|
||||||
jj = ostr.indexOf(".")+1;
|
jj = ostr.indexOf(".")+1;
|
||||||
for(i=decpt; i<out.length; ++i) {
|
for(i=decpt; i<out.length; ++i) {
|
||||||
if(out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt ) continue;
|
if(out[i] == null || ('n?('.indexOf(out[i].t) === -1 && i !== decpt)) continue;
|
||||||
j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
|
j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
|
||||||
vv = out[i].v.substr(0,j);
|
vv = out[i].v.substr(0,j);
|
||||||
for(; j<out[i].v.length; ++j) {
|
for(; j<out[i].v.length; ++j) {
|
||||||
|
39
ssf.js
39
ssf.js
@ -101,7 +101,7 @@ function frac(x, D, mixed) {
|
|||||||
var q = Math.floor(sgn * P/Q);
|
var q = Math.floor(sgn * P/Q);
|
||||||
return [q, sgn*P - q*Q, Q];
|
return [q, sgn*P - q*Q, Q];
|
||||||
}
|
}
|
||||||
function general_fmt_int(v, opts) { return ""+v; }
|
function general_fmt_int(v) { return ""+v; }
|
||||||
SSF._general_int = general_fmt_int;
|
SSF._general_int = general_fmt_int;
|
||||||
var general_fmt_num = (function make_general_fmt_num() {
|
var general_fmt_num = (function make_general_fmt_num() {
|
||||||
var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/;
|
var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/;
|
||||||
@ -121,11 +121,9 @@ function gfn4(o) {
|
|||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
function gfn5(o) {
|
function gfn5(o) {
|
||||||
//for(var i = 0; i != o.length; ++i) if(o.charCodeAt(i) === 46) return o.replace(gnr2,"").replace(gnr1,".$1");
|
|
||||||
//return o;
|
|
||||||
return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o;
|
return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o;
|
||||||
}
|
}
|
||||||
return function general_fmt_num(v, opts) {
|
return function general_fmt_num(v) {
|
||||||
var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
|
var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
|
||||||
if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
|
if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
|
||||||
else if(Math.abs(V) <= 9) o = gfn2(v);
|
else if(Math.abs(V) <= 9) o = gfn2(v);
|
||||||
@ -134,18 +132,18 @@ return function general_fmt_num(v, opts) {
|
|||||||
return gfn5(gfn4(o));
|
return gfn5(gfn4(o));
|
||||||
};})();
|
};})();
|
||||||
SSF._general_num = general_fmt_num;
|
SSF._general_num = general_fmt_num;
|
||||||
function general_fmt(v, opts) {
|
function general_fmt(v) {
|
||||||
switch(typeof v) {
|
switch(typeof v) {
|
||||||
case 'string': return v;
|
case 'string': return v;
|
||||||
case 'boolean': return v ? "TRUE" : "FALSE";
|
case 'boolean': return v ? "TRUE" : "FALSE";
|
||||||
case 'number': return (v|0) === v ? general_fmt_int(v, opts) : general_fmt_num(v, opts);
|
case 'number': return (v|0) === v ? general_fmt_int(v/*, opts*/) : general_fmt_num(v/*, opts*/);
|
||||||
case 'undefined': return "";
|
case 'undefined': return "";
|
||||||
case 'object': if(v == null) return "";
|
case 'object': if(v == null) return "";
|
||||||
}
|
}
|
||||||
throw new Error("unsupported value in General format: " + v);
|
throw new Error("unsupported value in General format: " + v);
|
||||||
}
|
}
|
||||||
SSF._general = general_fmt;
|
SSF._general = general_fmt;
|
||||||
function fix_hijri(date, o) { return 0; }
|
function fix_hijri(/*date, o*/) { return 0; }
|
||||||
function parse_date_code(v,opts,b2) {
|
function parse_date_code(v,opts,b2) {
|
||||||
if(v > 2958465 || v < 0) return null;
|
if(v > 2958465 || v < 0) return null;
|
||||||
var date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;
|
var date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;
|
||||||
@ -523,8 +521,7 @@ return "." + $1 + fill("0", r[1].length-$1.length); });
|
|||||||
case "##,###":
|
case "##,###":
|
||||||
case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
|
case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
|
||||||
default:
|
default:
|
||||||
if(fmt.slice(-3) == ".00") return write_num_int(type, fmt.slice(0,-3), val) + ".00";
|
if(fmt.match(/\.[0#?]*$/)) return write_num_int(type, fmt.slice(0,fmt.lastIndexOf(".")), val) + hashq(fmt.slice(fmt.lastIndexOf(".")));
|
||||||
if(fmt.slice(-2) == ".0") return write_num_int(type, fmt.slice(0,-2), val) + ".0";
|
|
||||||
}
|
}
|
||||||
throw new Error("unsupported format |" + fmt + "|");
|
throw new Error("unsupported format |" + fmt + "|");
|
||||||
}
|
}
|
||||||
@ -533,8 +530,8 @@ return function write_num(type, fmt, val) {
|
|||||||
};})();
|
};})();
|
||||||
function split_fmt(fmt) {
|
function split_fmt(fmt) {
|
||||||
var out = [];
|
var out = [];
|
||||||
var in_str = false, cc;
|
var in_str = false/*, cc*/;
|
||||||
for(var i = 0, j = 0; i < fmt.length; ++i) switch((cc=fmt.charCodeAt(i))) {
|
for(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {
|
||||||
case 34: /* '"' */
|
case 34: /* '"' */
|
||||||
in_str = !in_str; break;
|
in_str = !in_str; break;
|
||||||
case 95: case 42: case 92: /* '_' '*' '\\' */
|
case 95: case 42: case 92: /* '_' '*' '\\' */
|
||||||
@ -550,11 +547,11 @@ function split_fmt(fmt) {
|
|||||||
SSF._split = split_fmt;
|
SSF._split = split_fmt;
|
||||||
var abstime = /\[[HhMmSs]*\]/;
|
var abstime = /\[[HhMmSs]*\]/;
|
||||||
function fmt_is_date(fmt) {
|
function fmt_is_date(fmt) {
|
||||||
var i = 0, cc = 0, c = "", o = "";
|
var i = 0, /*cc = 0,*/ c = "", o = "";
|
||||||
while(i < fmt.length) {
|
while(i < fmt.length) {
|
||||||
switch((c = fmt.charAt(i))) {
|
switch((c = fmt.charAt(i))) {
|
||||||
case 'G': if(isgeneral(fmt, i)) i+= 6; i++; break;
|
case 'G': if(isgeneral(fmt, i)) i+= 6; i++; break;
|
||||||
case '"': for(;(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i; ++i; break;
|
case '"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i; ++i; break;
|
||||||
case '\\': i+=2; break;
|
case '\\': i+=2; break;
|
||||||
case '_': i+=2; break;
|
case '_': i+=2; break;
|
||||||
case '@': ++i; break;
|
case '@': ++i; break;
|
||||||
@ -576,13 +573,13 @@ function fmt_is_date(fmt) {
|
|||||||
case '.':
|
case '.':
|
||||||
/* falls through */
|
/* falls through */
|
||||||
case '0': case '#':
|
case '0': case '#':
|
||||||
while(i < fmt.length && ("0#?.,E+-%".indexOf(c=fmt.charAt(++i)) > -1 || c=='\\' && fmt.charAt(i+1) == "-" && "0#".indexOf(fmt.charAt(i+2))>-1)){}
|
while(i < fmt.length && ("0#?.,E+-%".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\' && fmt.charAt(i+1) == "-" && "0#".indexOf(fmt.charAt(i+2))>-1))){/* empty */}
|
||||||
break;
|
break;
|
||||||
case '?': while(fmt.charAt(++i) === c){} break;
|
case '?': while(fmt.charAt(++i) === c){/* empty */} break;
|
||||||
case '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;
|
case '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;
|
||||||
case '(': case ')': ++i; break;
|
case '(': case ')': ++i; break;
|
||||||
case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
|
case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
|
||||||
while(i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1){} break;
|
while(i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;
|
||||||
case ' ': ++i; break;
|
case ' ': ++i; break;
|
||||||
default: ++i; break;
|
default: ++i; break;
|
||||||
}
|
}
|
||||||
@ -652,7 +649,7 @@ function eval_fmt(fmt, v, opts, flen) {
|
|||||||
}
|
}
|
||||||
/* falls through */
|
/* falls through */
|
||||||
case '0': case '#':
|
case '0': case '#':
|
||||||
o = c; while(++i < fmt.length && "0#?.,E+-%".indexOf(c=fmt.charAt(i)) > -1 || c=='\\' && fmt.charAt(i+1) == "-" && i < fmt.length - 2 && "0#".indexOf(fmt.charAt(i+2))>-1) o += c;
|
o = c; while((++i < fmt.length && "0#?.,E+-%".indexOf(c=fmt.charAt(i)) > -1) || (c=='\\' && fmt.charAt(i+1) == "-" && i < fmt.length - 2 && "0#".indexOf(fmt.charAt(i+2))>-1)) o += c;
|
||||||
out[out.length] = {t:'n', v:o}; break;
|
out[out.length] = {t:'n', v:o}; break;
|
||||||
case '?':
|
case '?':
|
||||||
o = c; while(fmt.charAt(++i) === c) o+=c;
|
o = c; while(fmt.charAt(++i) === c) o+=c;
|
||||||
@ -711,9 +708,9 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
|
|||||||
jj = i+1;
|
jj = i+1;
|
||||||
while(out[jj] != null && (
|
while(out[jj] != null && (
|
||||||
(c=out[jj].t) === "?" || c === "D" ||
|
(c=out[jj].t) === "?" || c === "D" ||
|
||||||
(c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/') ||
|
((c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/')) ||
|
||||||
out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') ||
|
(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||
|
||||||
c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?')
|
(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))
|
||||||
)) {
|
)) {
|
||||||
out[i].v += out[jj].v;
|
out[i].v += out[jj].v;
|
||||||
out[jj] = {v:"", t:";"}; ++jj;
|
out[jj] = {v:"", t:";"}; ++jj;
|
||||||
@ -767,7 +764,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
|
|||||||
if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
|
if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
|
||||||
jj = ostr.indexOf(".")+1;
|
jj = ostr.indexOf(".")+1;
|
||||||
for(i=decpt; i<out.length; ++i) {
|
for(i=decpt; i<out.length; ++i) {
|
||||||
if(out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt ) continue;
|
if(out[i] == null || ('n?('.indexOf(out[i].t) === -1 && i !== decpt)) continue;
|
||||||
j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
|
j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
|
||||||
vv = out[i].v.substr(0,j);
|
vv = out[i].v.substr(0,j);
|
||||||
for(; j<out[i].v.length; ++j) {
|
for(; j<out[i].v.length; ++j) {
|
||||||
|
@ -155,5 +155,8 @@
|
|||||||
["[$£-809]#,##0.0000;\\-[$£-809]#,##0.0000", [3.14159, "£3.1416"], [-3.14159, "-£3.1416"]],
|
["[$£-809]#,##0.0000;\\-[$£-809]#,##0.0000", [3.14159, "£3.1416"], [-3.14159, "-£3.1416"]],
|
||||||
["\"-\"0.00", [3.14159, "-3.14"], [-3.14159, "--3.14"]],
|
["\"-\"0.00", [3.14159, "-3.14"], [-3.14159, "--3.14"]],
|
||||||
["[$-409]mmm\\-yy", [12345, "Oct-33"]],
|
["[$-409]mmm\\-yy", [12345, "Oct-33"]],
|
||||||
|
|
||||||
|
["\\,##.??;\\(#,###.??\\);0", [15,",15. ","#"], [14.3453453,",14.35","#"], [12.1,",12.1 ","#"], [0,"0","#"], [-15,"(15. )","#"], [-14.3453453,"(14.35)","#"], [-12.1,"(12.1 )","#"], [1,",1. ","#"]],
|
||||||
|
["\"£\"#.####;-\"£\"#.####", [3.141592654, "£3.1416"], [-3.141592654, "-£3.1416"]],
|
||||||
["\"foo\";\"bar\";\"baz\";\"qux\";\"foobar\"", [1], [0], [-1], ["sheetjs"]]
|
["\"foo\";\"bar\";\"baz\";\"qux\";\"foobar\"", [1], [0], [-1], ["sheetjs"]]
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user