diff --git a/.flowconfig b/.flowconfig index ed817f1..41f0cdc 100644 --- a/.flowconfig +++ b/.flowconfig @@ -2,7 +2,6 @@ .*/node_modules/.* .*/dist/.* .*/test.js -.*/printj.js .*/bits/.* .*/ctest/.* @@ -13,6 +12,8 @@ .*/demo/browser.js .*/shim.js +.*/printj.js + [include] printj.flow.js .*/bin/.*.njs diff --git a/Makefile b/Makefile index b18c1a2..eef66b3 100644 --- a/Makefile +++ b/Makefile @@ -84,6 +84,10 @@ old-lint: $(TARGET) ## Run jshint and jscs checks @jscs lib/*.js if [ -e $(CLOSURE) ]; then java -jar $(CLOSURE) $(FLOWTARGET) --jscomp_warning=reportUnknownTypes >/dev/null; fi +.PHONY: tslint +tslint: $(TARGET) ## Run typescript checks + #@npm install dtslint typescript + @npm run-script dtslint .PHONY: flow flow: lint ## Run flow checker diff --git a/bin/printj.njs b/bin/printj.njs index ffba15d..74920f6 100755 --- a/bin/printj.njs +++ b/bin/printj.njs @@ -33,11 +33,11 @@ function help() { } function parse_arg(arg/*:string*/)/*:any*/ { - var m = arg.substr(2), p/*:number*/; - if(arg.charCodeAt(1) == 58) switch((p = arg.charCodeAt(0))) { - case /*n*/ 110: return parseInt(m); + var m = arg.substr(2), p/*:number*/ = 0; + if(arg.charCodeAt(1) === 58) switch((p = arg.charCodeAt(0))) { + case /*n*/ 110: return parseInt(m, 10); case /*f*/ 102: return parseFloat(m); - case /*b*/ 98: return !(m.toUpperCase() == "FALSE" || m == "0"); + case /*b*/ 98: return !(m.toUpperCase() === "FALSE" || m === "0"); case /*j*/ 106: return JSON.parse(m); case /*e*/ 101: return eval(m); case /*s*/ 115: return m; @@ -56,7 +56,7 @@ for(var i = 2; i < argv.length; ++i) switch(argv[i]) { console.log(X.vsprintf(fmt, args)); process.exit(0); -function dump(fmt) { +function dump(fmt/*:string*/)/*:number*/ { if(!fmt) { console.error("printj: missing format argument"); return 1; } X._tokenize(fmt).forEach(function(x){console.log(x);}); return 0; diff --git a/bits/00_header.js b/bits/00_header.js index 9bf8fc7..32a09a3 100644 --- a/bits/00_header.js +++ b/bits/00_header.js @@ -2,9 +2,9 @@ /* vim: set ts=2: */ /*jshint sub:true, eqnull:true */ /*exported PRINTJ */ -/*:: declare var DO_NOT_EXPORT_PRINTJ: any; */ -/*:: declare var define: any; */ -var PRINTJ/*:any*/; +/*:: declare var DO_NOT_EXPORT_PRINTJ:?boolean; */ +/*:: declare function define(cb:()=>any):void; */ +var PRINTJ/*:PRINTJModule*/; (function (factory/*:(a:any)=>void*/)/*:void*/ { /*jshint ignore:start */ if(typeof DO_NOT_EXPORT_PRINTJ === 'undefined') { @@ -12,16 +12,16 @@ var PRINTJ/*:any*/; factory(exports); } else if ('function' === typeof define && define.amd) { define(function () { - var module/*:any*/ = {}; + var module/*:PRINTJModule*/ = /*::(*/{}/*:: :any)*/; factory(module); return module; }); } else { - factory(PRINTJ = {}); + factory(PRINTJ = /*::(*/{}/*:: :any)*/); } } else { - factory(PRINTJ = {}); + factory(PRINTJ = /*::(*/{}/*:: :any)*/); } /*jshint ignore:end */ -}(function(PRINTJ) { +}(function(PRINTJ/*:PRINTJModule*/) { #include "01_version.js" diff --git a/bits/01_version.js b/bits/01_version.js index 2729a9f..908ae42 100644 --- a/bits/01_version.js +++ b/bits/01_version.js @@ -1 +1 @@ -PRINTJ.version = '1.0.0'; +PRINTJ.version = '1.0.1'; diff --git a/bits/40_macros.js b/bits/40_macros.js index df7be1a..47b4e92 100644 --- a/bits/40_macros.js +++ b/bits/40_macros.js @@ -1,6 +1,6 @@ #define isnan isNaN //#define PAD_(x,c) (x >= 0 ? new Array(((x)|0) + 1).join((c)) : "") -var padstr = { +var padstr/*:{[s:string]:string}*/ = { " ": " ", "0": "000000000000000000000000000000000", "7": "777777777777777777777777777777777", @@ -37,7 +37,7 @@ function pads(x/*:number*/, c/*:string*/)/*:string*/ { return PAD_(x,c); } #error SIZEOF_WCHAR_T must be 1, 2, or 4 #endif -#define CHAR_TO_STR(O,cc) cc &= MASK_CHAR; O = String.fromCharCode(cc); +#define CHAR_TO_STR(O,cc) { cc &= MASK_CHAR; O = String.fromCharCode(cc); } #if SIZEOF_SIZE_T > 4 /* TODO: negative ptrs? */ #define CONV_SIZE_T(x) x = Math.abs(x); diff --git a/bits/50_doit.js b/bits/50_doit.js index fd35105..1a92acf 100644 --- a/bits/50_doit.js +++ b/bits/50_doit.js @@ -1,7 +1,6 @@ #include "30_ctypes.js" #include "40_macros.js" -/*:: declare var util:any; */ -/*:: declare var require: any; */ +/*:: var util = require('util'); */ /*global process:true, util:true, require:true */ if(typeof process !== 'undefined' && !!process.versions && !!process.versions.node) util=require("util"); var u_inspect/*:(o:any)=>string*/ = (typeof util != 'undefined') ? util.inspect : JSON.stringify; @@ -12,8 +11,8 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { var argidx/*:number*/ = 0, idx/*:number*/ = 0; var Vnum/*:number*/ = 0; var pad/*:string*/ = ""; - for(var i = 0; i < t.length; ++i) { - var m/*:Array*/ = t[i], c/*:number*/ = (m[0]/*:string*/).charCodeAt(0); + for(var i/*:number*/ = 0; i < t.length; ++i) { + var m/*:ParsedEntry*/ = t[i], c/*:number*/ = (m[0]/*:string*/).charCodeAt(0); /* m order: conv full param flags width prec length */ if(c === /*L*/ 76) { o.push(m[1]); continue; } @@ -24,7 +23,7 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { /* flags */ var flags/*:string*/ = m[IDX_FLAGS]||""; - var alt = flags.indexOf("#") > -1; + var alt/*:boolean*/ = flags.indexOf("#") > -1; /* position */ if(m[IDX_POS]) argidx = parseInt(m[IDX_POS])-1; diff --git a/bits/51_convstr.js b/bits/51_convstr.js index 275c389..7bd3951 100644 --- a/bits/51_convstr.js +++ b/bits/51_convstr.js @@ -15,7 +15,7 @@ if(c == 67 || len.charCodeAt(0) === /*l*/ 108) WCHAR_TO_STR(O, cc) else CHAR_TO_STR(O, cc) break; - case "string": O = arg.charAt(0); break; + case "string": O = /*::(*/arg/*:: :string)*/.charAt(0); break; default: O = String(arg).charAt(0); } WIDTH(O, width, flags) diff --git a/bits/54_convmisc.js b/bits/54_convmisc.js index e146433..fa479e9 100644 --- a/bits/54_convmisc.js +++ b/bits/54_convmisc.js @@ -11,7 +11,7 @@ /* store length in the `len` key */ case /*n*/ 110: - if(arg) { arg.len=0; for(var oo = 0; oo < o.length; ++oo) arg.len += o[oo].length; } + if(arg) { arg.len=0; for(var oo/*:number*/ = 0; oo < o.length; ++oo) arg.len += o[oo].length; } continue; /* process error */ diff --git a/bits/60_integer.js b/bits/60_integer.js index 4d8c367..eb49ffa 100644 --- a/bits/60_integer.js +++ b/bits/60_integer.js @@ -31,7 +31,7 @@ } else { Vnum = (-Vnum) % 1e16; var d1/*:Array*/ = [1,8,4,4,6,7,4,4,0,7,3,7,0,9,5,5,1,6,1,6]; - var di = d1.length - 1; + var di/*:number*/ = d1.length - 1; while(Vnum > 0) { if((d1[di] -= (Vnum % 10)) < 0) { d1[di] += 10; d1[di-1]--; } --di; Vnum = Math.floor(Vnum / 10); diff --git a/bits/70_float.js b/bits/70_float.js index 328dbd3..ba9c654 100644 --- a/bits/70_float.js +++ b/bits/70_float.js @@ -1,7 +1,7 @@ Vnum = Number(arg); if(arg === null) Vnum = 0/0; if(len == "L") bytes = 12; - var isf = isFinite(Vnum); + var isf/*:boolean*/ = isFinite(Vnum); if(!isf) { /* Infinity or NaN */ if(Vnum < 0) O = "-"; else if(flags.indexOf("+") > -1) O = "+"; @@ -94,7 +94,7 @@ O = Vnum.toString(16); if(O.length > 1) { if(O.length > prec+2 && O.charCodeAt(prec+2) >= 56) { - var _f = O.charCodeAt(0) == 102; + var _f/*:boolean*/ = O.charCodeAt(0) == 102; O = (Vnum + 8 * Math.pow(16, -prec-1)).toString(16); if(_f && O.charCodeAt(0) == 49) E += 4; } diff --git a/bits/80_wrapper.js b/bits/80_wrapper.js index 84f9a26..8834b36 100644 --- a/bits/80_wrapper.js +++ b/bits/80_wrapper.js @@ -1,7 +1,7 @@ -function vsprintf(fmt/*:string*/, args/*:Array*/) { return doit(tokenize(fmt), args); } +function vsprintf(fmt/*:string*/, args/*:Args*/)/*:string*/ { return doit(tokenize(fmt), args); } -function sprintf()/*:string*/ { +function sprintf(/*:: ...argz*/)/*:string*/ { var args/*:Array*/ = new Array(arguments.length - 1); - for(var i = 0; i < args.length; ++i) args[i] = arguments[i+1]; + for(var i/*:number*/ = 0; i < args.length; ++i) args[i] = arguments[i+1]; return doit(tokenize(arguments[0]), args); } diff --git a/bits/flow.js b/bits/flow.js index 27037f3..485fad7 100644 --- a/bits/flow.js +++ b/bits/flow.js @@ -1,12 +1,14 @@ /*:: -type ParsedFmt = Array>; +type ParsedEntry = Array; +type ParsedFmt = Array; type Args = Array; declare module "exit-on-epipe" { }; declare class PRINTJModule { - sprintf(fmt:string, ...args:any):string; - vsprintf(fmt:string, args:Args):string; - _doit(t:ParsedFmt, args:Args):string; - _tokenize(fmt:string):ParsedFmt; + version:string; + sprintf:(fmt:string, ...args:any)=>string; + vsprintf:(fmt:string, args:Args)=>string; + _doit:(t:ParsedFmt, args:Args)=>string; + _tokenize:(fmt:string)=>ParsedFmt; }; declare module "./" { declare var exports:PRINTJModule }; declare module "../" { declare var exports:PRINTJModule }; diff --git a/ctest/printj.js b/ctest/printj.js index 9ff0083..7a65d48 100644 --- a/ctest/printj.js +++ b/ctest/printj.js @@ -23,7 +23,7 @@ var PRINTJ; /*jshint ignore:end */ }(function(PRINTJ) { -PRINTJ.version = '1.0.0'; +PRINTJ.version = '1.0.1'; function tokenize(fmt) { var out = []; @@ -216,7 +216,7 @@ function doit(t, args) { case "number": var cc = arg; if(c == 67 || len.charCodeAt(0) === /*l*/ 108) { cc &= 0xFFFFFFFF; O = String.fromCharCode( cc); } - else cc &= 0xFF; O = String.fromCharCode( cc); + else { cc &= 0xFF; O = String.fromCharCode( cc); } break; case "string": O = arg.charAt(0); break; default: O = String(arg).charAt(0); diff --git a/dist/printj.js b/dist/printj.js index 9ff0083..7a65d48 100644 --- a/dist/printj.js +++ b/dist/printj.js @@ -23,7 +23,7 @@ var PRINTJ; /*jshint ignore:end */ }(function(PRINTJ) { -PRINTJ.version = '1.0.0'; +PRINTJ.version = '1.0.1'; function tokenize(fmt) { var out = []; @@ -216,7 +216,7 @@ function doit(t, args) { case "number": var cc = arg; if(c == 67 || len.charCodeAt(0) === /*l*/ 108) { cc &= 0xFFFFFFFF; O = String.fromCharCode( cc); } - else cc &= 0xFF; O = String.fromCharCode( cc); + else { cc &= 0xFF; O = String.fromCharCode( cc); } break; case "string": O = arg.charAt(0); break; default: O = String(arg).charAt(0); diff --git a/dist/printj.min.js b/dist/printj.min.js index 7e1d0bc..a24da26 100644 --- a/dist/printj.min.js +++ b/dist/printj.min.js @@ -1,2 +1,2 @@ /* printj.js (C) 2016-present SheetJS -- http://sheetjs.com */ -var PRINTJ;(function(factory){if(typeof DO_NOT_EXPORT_PRINTJ==="undefined"){if("object"===typeof exports){factory(exports)}else if("function"===typeof define&&define.amd){define(function(){var module={};factory(module);return module})}else{factory(PRINTJ={})}}else{factory(PRINTJ={})}})(function(PRINTJ){PRINTJ.version="1.0.0";function tokenize(fmt){var out=[];var start=0;var i=0;var infmt=false;var fmtparam="",fmtflags="",fmtwidth="",fmtprec="",fmtlen="";var c=0;var L=fmt.length;for(;i=48&&c<58){if(fmtprec.length)fmtprec+=String.fromCharCode(c);else if(c==48&&!fmtwidth.length)fmtflags+=String.fromCharCode(c);else fmtwidth+=String.fromCharCode(c)}else switch(c){case 36:if(fmtprec.length)fmtprec+="$";else if(fmtwidth.charAt(0)=="*")fmtwidth+="$";else{fmtparam=fmtwidth+"$";fmtwidth=""}break;case 39:fmtflags+="'";break;case 45:fmtflags+="-";break;case 43:fmtflags+="+";break;case 32:fmtflags+=" ";break;case 35:fmtflags+="#";break;case 46:fmtprec=".";break;case 42:if(fmtprec.charAt(0)==".")fmtprec+="*";else fmtwidth+="*";break;case 104:case 108:if(fmtlen.length>1)throw"bad length "+fmtlen+String(c);fmtlen+=String.fromCharCode(c);break;case 76:case 106:case 122:case 116:case 113:case 90:case 119:if(fmtlen!=="")throw"bad length "+fmtlen+String.fromCharCode(c);fmtlen=String.fromCharCode(c);break;case 73:if(fmtlen!=="")throw"bad length "+fmtlen+"I";fmtlen="I";break;case 100:case 105:case 111:case 117:case 120:case 88:case 102:case 70:case 101:case 69:case 103:case 71:case 97:case 65:case 99:case 67:case 115:case 83:case 112:case 110:case 68:case 85:case 79:case 109:case 98:case 66:case 121:case 89:case 74:case 86:case 84:case 37:infmt=false;if(fmtprec.length>1)fmtprec=fmtprec.substr(1);out.push([String.fromCharCode(c),fmt.substring(start,i+1),fmtparam,fmtflags,fmtwidth,fmtprec,fmtlen]);start=i+1;fmtlen=fmtprec=fmtwidth=fmtflags=fmtparam="";break;default:throw new Error("Invalid format string starting with |"+fmt.substring(start,i+1)+"|")}}if(start-1;if(m[2])argidx=parseInt(m[2])-1;else if(c===109&&!alt){o.push("Success");continue}var width=0;if(m[4]!=null&&m[4].length>0){if(m[4].charAt(0)!=="*")width=parseInt(m[4],10);else if(m[4].length===1)width=args[idx++];else width=args[parseInt(m[4].substr(1),10)-1]}var prec=-1;if(m[5]!=null&&m[5].length>0){if(m[5].charAt(0)!=="*")prec=parseInt(m[5],10);else if(m[5].length===1)prec=args[idx++];else prec=args[parseInt(m[5].substr(1),10)-1]}if(!m[2])argidx=idx++;var arg=args[argidx];var len=m[6]||"";switch(c){case 83:case 115:O=String(arg);if(prec>=0)O=O.substr(0,prec);if(width>O.length||-width>O.length){if((flags.indexOf("-")==-1||width<0)&&flags.indexOf("0")!=-1){pad=width-O.length>=0?padstr["0"].substr(0,width-O.length):"";O=pad+O}else{pad=width-O.length>=0?padstr[" "].substr(0,width-O.length):"";O=flags.indexOf("-")>-1?O+pad:pad+O}}break;case 67:case 99:switch(typeof arg){case"number":var cc=arg;if(c==67||len.charCodeAt(0)===108){cc&=4294967295;O=String.fromCharCode(cc)}else cc&=255;O=String.fromCharCode(cc);break;case"string":O=arg.charAt(0);break;default:O=String(arg).charAt(0)}if(width>O.length||-width>O.length){if((flags.indexOf("-")==-1||width<0)&&flags.indexOf("0")!=-1){pad=width-O.length>=0?padstr["0"].substr(0,width-O.length):"";O=pad+O}else{pad=width-O.length>=0?padstr[" "].substr(0,width-O.length):"";O=flags.indexOf("-")>-1?O+pad:pad+O}}break;case 68:bytes=8;case 100:case 105:isnum=-1;sign=true;break;case 85:bytes=8;case 117:isnum=-1;break;case 79:bytes=8;case 111:isnum=-1;radix=8;break;case 120:isnum=-1;radix=-16;break;case 88:isnum=-1;radix=16;break;case 66:bytes=8;case 98:isnum=-1;radix=2;break;case 70:case 102:isnum=1;break;case 69:case 101:isnum=2;break;case 71:case 103:isnum=3;break;case 65:case 97:isnum=4;break;case 112:Vnum=typeof arg=="number"?arg:arg?Number(arg.l):-1;if(isNaN(Vnum))Vnum=-1;if(alt)O=Vnum.toString(10);else{Vnum=Math.abs(Vnum);O="0x"+Vnum.toString(16).toLowerCase()}break;case 110:if(arg){arg.len=0;for(var oo=0;oo=0)O=O.substr(0,prec);if(width>O.length||-width>O.length){if((flags.indexOf("-")==-1||width<0)&&flags.indexOf("0")!=-1){pad=width-O.length>=0?padstr["0"].substr(0,width-O.length):"";O=pad+O}else{pad=width-O.length>=0?padstr[" "].substr(0,width-O.length):"";O=flags.indexOf("-")>-1?O+pad:pad+O}}break}if(isnum==-1){Vnum=Number(arg);switch(len){case"hh":{bytes=1}break;case"h":{bytes=2}break;case"l":{if(bytes==4)bytes=8}break;case"L":case"q":case"ll":{if(bytes==4)bytes=8}break;case"j":{if(bytes==4)bytes=8}break;case"t":{if(bytes==4)bytes=8}break;case"z":case"Z":{if(bytes==4)bytes=8}break;case"I":{if(bytes==4)bytes=8}break;case"w":break}switch(bytes){case 1:Vnum=Vnum&255;if(sign&&Vnum>127)Vnum-=255+1;break;case 2:Vnum=Vnum&65535;if(sign&&Vnum>32767)Vnum-=65535+1;break;case 4:Vnum=sign?Vnum|0:Vnum>>>0;break;default:Vnum=isNaN(Vnum)?0:Math.round(Vnum);break}if(bytes>4&&Vnum<0&&!sign){if(radix==16||radix==-16){O=(Vnum>>>0).toString(16);Vnum=Math.floor((Vnum-(Vnum>>>0))/Math.pow(2,32));O=(Vnum>>>0).toString(16)+(8-O.length>=0?padstr["0"].substr(0,8-O.length):"")+O;O=(16-O.length>=0?padstr["f"].substr(0,16-O.length):"")+O;if(radix==16)O=O.toUpperCase()}else if(radix==8){O=(Vnum>>>0).toString(8);O=(10-O.length>=0?padstr["0"].substr(0,10-O.length):"")+O;Vnum=Math.floor((Vnum-(Vnum>>>0&1073741823))/Math.pow(2,30));O=(Vnum>>>0).toString(8)+O.substr(O.length-10);O=O.substr(O.length-20);O="1"+(21-O.length>=0?padstr["7"].substr(0,21-O.length):"")+O}else{Vnum=-Vnum%1e16;var d1=[1,8,4,4,6,7,4,4,0,7,3,7,0,9,5,5,1,6,1,6];var di=d1.length-1;while(Vnum>0){if((d1[di]-=Vnum%10)<0){d1[di]+=10;d1[di-1]--}--di;Vnum=Math.floor(Vnum/10)}O=d1.join("")}}else{if(radix===-16)O=Vnum.toString(16).toLowerCase();else if(radix===16)O=Vnum.toString(16).toUpperCase();else O=Vnum.toString(radix)}if(prec===0&&O=="0"&&!(radix==8&&alt))O="";else{if(O.length=0?padstr["0"].substr(0,prec-O.length):"")+O;else O=O.substr(0,1)+(prec+1-O.length>=0?padstr["0"].substr(0,prec+1-O.length):"")+O.substr(1)}if(!sign&&alt&&Vnum!==0)switch(radix){case-16:O="0x"+O;break;case 16:O="0X"+O;break;case 8:if(O.charAt(0)!="0")O="0"+O;break;case 2:O="0b"+O;break}}if(sign&&O.charAt(0)!="-"){if(flags.indexOf("+")>-1)O="+"+O;else if(flags.indexOf(" ")>-1)O=" "+O}if(width>0){if(O.length-1){O=O+(width-O.length>=0?padstr[" "].substr(0,width-O.length):"")}else if(flags.indexOf("0")>-1&&prec<0&&O.length>0){if(prec>O.length)O=(prec-O.length>=0?padstr["0"].substr(0,prec-O.length):"")+O;pad=width-O.length>=0?padstr[prec>0?" ":"0"].substr(0,width-O.length):"";if(O.charCodeAt(0)<48){if(O.charAt(2).toLowerCase()=="x")O=O.substr(0,3)+pad+O.substring(3);else O=O.substr(0,1)+pad+O.substring(1)}else if(O.charAt(1).toLowerCase()=="x")O=O.substr(0,2)+pad+O.substring(2);else O=pad+O}else{O=(width-O.length>=0?padstr[" "].substr(0,width-O.length):"")+O}}}}else if(isnum>0){Vnum=Number(arg);if(arg===null)Vnum=0/0;if(len=="L")bytes=12;var isf=isFinite(Vnum);if(!isf){if(Vnum<0)O="-";else if(flags.indexOf("+")>-1)O="+";else if(flags.indexOf(" ")>-1)O=" ";O+=isNaN(Vnum)?"nan":"inf"}else{var E=0;if(prec==-1&&isnum!=4)prec=6;if(isnum==3){O=Vnum.toExponential(1);E=+O.substr(O.indexOf("e")+1);if(prec===0)prec=1;if(prec>E&&E>=-4){isnum=11;prec=prec-(E+1)}else{isnum=12;prec=prec-1}}var sg=Vnum<0||1/Vnum==-Infinity?"-":"";if(Vnum<0)Vnum=-Vnum;switch(isnum){case 1:case 11:if(Vnum<1e21){O=Vnum.toFixed(prec);if(isnum==1){if(prec===0&&alt&&O.indexOf(".")==-1)O+="."}else if(!alt)O=O.replace(/(\.\d*[1-9])0*$/,"$1").replace(/\.0*$/,"");else if(O.indexOf(".")==-1)O+=".";break}O=Vnum.toExponential(20);E=+O.substr(O.indexOf("e")+1);O=O.charAt(0)+O.substr(2,O.indexOf("e")-2);O=O+(E-O.length+1>=0?padstr["0"].substr(0,E-O.length+1):"");if(alt||prec>0&&isnum!==11)O=O+"."+(prec>=0?padstr["0"].substr(0,prec):"");break;case 2:case 12:O=Vnum.toExponential(prec);E=O.indexOf("e");if(O.length-E===3)O=O.substr(0,E+2)+"0"+O.substr(E+2);if(alt&&O.indexOf(".")==-1)O=O.substr(0,E)+"."+O.substr(E);else if(!alt&&isnum==12)O=O.replace(/\.0*e/,"e").replace(/\.(\d*[1-9])0*e/,".$1e");break;case 4:if(Vnum===0){O="0x0"+(alt||prec>0?"."+(prec>=0?padstr["0"].substr(0,prec):""):"")+"p+0";break}O=Vnum.toString(16);var ac=O.charCodeAt(0);if(ac==48){ac=2;E=-4;Vnum*=16;while(O.charCodeAt(ac++)==48){E-=4;Vnum*=16}O=Vnum.toString(16);ac=O.charCodeAt(0)}var ai=O.indexOf(".");if(O.indexOf("(")>-1){var am=O.match(/\(e(.*)\)/);var ae=am?+am[1]:0;E+=4*ae;Vnum/=Math.pow(16,ae)}else if(ai>1){E+=4*(ai-1);Vnum/=Math.pow(16,ai-1)}else if(ai==-1){E+=4*(O.length-1);Vnum/=Math.pow(16,O.length-1)}if(bytes>8){if(ac<50){E-=3;Vnum*=8}else if(ac<52){E-=2;Vnum*=4}else if(ac<56){E-=1;Vnum*=2}}else{if(ac>=56){E+=3;Vnum/=8}else if(ac>=52){E+=2;Vnum/=4}else if(ac>=50){E+=1;Vnum/=2}}O=Vnum.toString(16);if(O.length>1){if(O.length>prec+2&&O.charCodeAt(prec+2)>=56){var _f=O.charCodeAt(0)==102;O=(Vnum+8*Math.pow(16,-prec-1)).toString(16);if(_f&&O.charCodeAt(0)==49)E+=4}if(prec>0){O=O.substr(0,prec+2);if(O.length=0?padstr["0"].substr(0,prec+2-O.length):"")+O.substr(1);else O+=prec+2-O.length>=0?padstr["0"].substr(0,prec+2-O.length):""}}else if(prec===0)O=O.charAt(0)+(alt?".":"")}else if(prec>0)O=O+"."+(prec>=0?padstr["0"].substr(0,prec):"");else if(alt)O=O+".";O="0x"+O+"p"+(E>=0?"+"+E:E);break}if(sg===""){if(flags.indexOf("+")>-1)sg="+";else if(flags.indexOf(" ")>-1)sg=" "}O=sg+O}if(width>O.length){if(flags.indexOf("-")>-1){O=O+(width-O.length>=0?padstr[" "].substr(0,width-O.length):"")}else if(flags.indexOf("0")>-1&&O.length>0&&isf){pad=width-O.length>=0?padstr["0"].substr(0,width-O.length):"";if(O.charCodeAt(0)<48){if(O.charAt(2).toLowerCase()=="x")O=O.substr(0,3)+pad+O.substring(3);else O=O.substr(0,1)+pad+O.substring(1)}else if(O.charAt(1).toLowerCase()=="x")O=O.substr(0,2)+pad+O.substring(2);else O=pad+O}else{O=(width-O.length>=0?padstr[" "].substr(0,width-O.length):"")+O}}if(c<96)O=O.toUpperCase()}o.push(O)}return o.join("")}function vsprintf(fmt,args){return doit(tokenize(fmt),args)}function sprintf(){var args=new Array(arguments.length-1);for(var i=0;i=48&&c<58){if(fmtprec.length)fmtprec+=String.fromCharCode(c);else if(c==48&&!fmtwidth.length)fmtflags+=String.fromCharCode(c);else fmtwidth+=String.fromCharCode(c)}else switch(c){case 36:if(fmtprec.length)fmtprec+="$";else if(fmtwidth.charAt(0)=="*")fmtwidth+="$";else{fmtparam=fmtwidth+"$";fmtwidth=""}break;case 39:fmtflags+="'";break;case 45:fmtflags+="-";break;case 43:fmtflags+="+";break;case 32:fmtflags+=" ";break;case 35:fmtflags+="#";break;case 46:fmtprec=".";break;case 42:if(fmtprec.charAt(0)==".")fmtprec+="*";else fmtwidth+="*";break;case 104:;case 108:if(fmtlen.length>1)throw"bad length "+fmtlen+String(c);fmtlen+=String.fromCharCode(c);break;case 76:;case 106:;case 122:;case 116:;case 113:;case 90:;case 119:if(fmtlen!=="")throw"bad length "+fmtlen+String.fromCharCode(c);fmtlen=String.fromCharCode(c);break;case 73:if(fmtlen!=="")throw"bad length "+fmtlen+"I";fmtlen="I";break;case 100:;case 105:;case 111:;case 117:;case 120:;case 88:;case 102:;case 70:;case 101:;case 69:;case 103:;case 71:;case 97:;case 65:;case 99:;case 67:;case 115:;case 83:;case 112:;case 110:;case 68:;case 85:;case 79:;case 109:;case 98:;case 66:;case 121:;case 89:;case 74:;case 86:;case 84:;case 37:infmt=false;if(fmtprec.length>1)fmtprec=fmtprec.substr(1);out.push([String.fromCharCode(c),fmt.substring(start,i+1),fmtparam,fmtflags,fmtwidth,fmtprec,fmtlen]);start=i+1;fmtlen=fmtprec=fmtwidth=fmtflags=fmtparam="";break;default:throw new Error("Invalid format string starting with |"+fmt.substring(start,i+1)+"|");}}if(start-1;if(m[2])argidx=parseInt(m[2])-1;else if(c===109&&!alt){o.push("Success");continue}var width=0;if(m[4]!=null&&m[4].length>0){if(m[4].charAt(0)!=="*")width=parseInt(m[4],10);else if(m[4].length===1)width=args[idx++];else width=args[parseInt(m[4].substr(1),10)-1]}var prec=-1;if(m[5]!=null&&m[5].length>0){if(m[5].charAt(0)!=="*")prec=parseInt(m[5],10);else if(m[5].length===1)prec=args[idx++];else prec=args[parseInt(m[5].substr(1),10)-1]}if(!m[2])argidx=idx++;var arg=args[argidx];var len=m[6]||"";switch(c){case 83:;case 115:O=String(arg);if(prec>=0)O=O.substr(0,prec);if(width>O.length||-width>O.length){if((flags.indexOf("-")==-1||width<0)&&flags.indexOf("0")!=-1){pad=width-O.length>=0?padstr["0"].substr(0,width-O.length):"";O=pad+O}else{pad=width-O.length>=0?padstr[" "].substr(0,width-O.length):"";O=flags.indexOf("-")>-1?O+pad:pad+O}}break;case 67:;case 99:switch(typeof arg){case"number":var cc=arg;if(c==67||len.charCodeAt(0)===108){cc&=4294967295;O=String.fromCharCode(cc)}else{cc&=255;O=String.fromCharCode(cc)}break;case"string":O=arg.charAt(0);break;default:O=String(arg).charAt(0);}if(width>O.length||-width>O.length){if((flags.indexOf("-")==-1||width<0)&&flags.indexOf("0")!=-1){pad=width-O.length>=0?padstr["0"].substr(0,width-O.length):"";O=pad+O}else{pad=width-O.length>=0?padstr[" "].substr(0,width-O.length):"";O=flags.indexOf("-")>-1?O+pad:pad+O}}break;case 68:bytes=8;case 100:;case 105:isnum=-1;sign=true;break;case 85:bytes=8;case 117:isnum=-1;break;case 79:bytes=8;case 111:isnum=-1;radix=8;break;case 120:isnum=-1;radix=-16;break;case 88:isnum=-1;radix=16;break;case 66:bytes=8;case 98:isnum=-1;radix=2;break;case 70:;case 102:isnum=1;break;case 69:;case 101:isnum=2;break;case 71:;case 103:isnum=3;break;case 65:;case 97:isnum=4;break;case 112:Vnum=typeof arg=="number"?arg:arg?Number(arg.l):-1;if(isNaN(Vnum))Vnum=-1;if(alt)O=Vnum.toString(10);else{Vnum=Math.abs(Vnum);O="0x"+Vnum.toString(16).toLowerCase()}break;case 110:if(arg){arg.len=0;for(var oo=0;oo=0)O=O.substr(0,prec);if(width>O.length||-width>O.length){if((flags.indexOf("-")==-1||width<0)&&flags.indexOf("0")!=-1){pad=width-O.length>=0?padstr["0"].substr(0,width-O.length):"";O=pad+O}else{pad=width-O.length>=0?padstr[" "].substr(0,width-O.length):"";O=flags.indexOf("-")>-1?O+pad:pad+O}}break;}if(isnum==-1){Vnum=Number(arg);switch(len){case"hh":{bytes=1}break;case"h":{bytes=2}break;case"l":{if(bytes==4)bytes=8}break;case"L":;case"q":;case"ll":{if(bytes==4)bytes=8}break;case"j":{if(bytes==4)bytes=8}break;case"t":{if(bytes==4)bytes=8}break;case"z":;case"Z":{if(bytes==4)bytes=8}break;case"I":{if(bytes==4)bytes=8}break;case"w":break;}switch(bytes){case 1:Vnum=Vnum&255;if(sign&&Vnum>127)Vnum-=255+1;break;case 2:Vnum=Vnum&65535;if(sign&&Vnum>32767)Vnum-=65535+1;break;case 4:Vnum=sign?Vnum|0:Vnum>>>0;break;default:Vnum=isNaN(Vnum)?0:Math.round(Vnum);break;}if(bytes>4&&Vnum<0&&!sign){if(radix==16||radix==-16){O=(Vnum>>>0).toString(16);Vnum=Math.floor((Vnum-(Vnum>>>0))/Math.pow(2,32));O=(Vnum>>>0).toString(16)+(8-O.length>=0?padstr["0"].substr(0,8-O.length):"")+O;O=(16-O.length>=0?padstr["f"].substr(0,16-O.length):"")+O;if(radix==16)O=O.toUpperCase()}else if(radix==8){O=(Vnum>>>0).toString(8);O=(10-O.length>=0?padstr["0"].substr(0,10-O.length):"")+O;Vnum=Math.floor((Vnum-(Vnum>>>0&1073741823))/Math.pow(2,30));O=(Vnum>>>0).toString(8)+O.substr(O.length-10);O=O.substr(O.length-20);O="1"+(21-O.length>=0?padstr["7"].substr(0,21-O.length):"")+O}else{Vnum=-Vnum%1e16;var d1=[1,8,4,4,6,7,4,4,0,7,3,7,0,9,5,5,1,6,1,6];var di=d1.length-1;while(Vnum>0){if((d1[di]-=Vnum%10)<0){d1[di]+=10;d1[di-1]--}--di;Vnum=Math.floor(Vnum/10)}O=d1.join("")}}else{if(radix===-16)O=Vnum.toString(16).toLowerCase();else if(radix===16)O=Vnum.toString(16).toUpperCase();else O=Vnum.toString(radix)}if(prec===0&&O=="0"&&!(radix==8&&alt))O="";else{if(O.length=0?padstr["0"].substr(0,prec-O.length):"")+O;else O=O.substr(0,1)+(prec+1-O.length>=0?padstr["0"].substr(0,prec+1-O.length):"")+O.substr(1)}if(!sign&&alt&&Vnum!==0)switch(radix){case-16:O="0x"+O;break;case 16:O="0X"+O;break;case 8:if(O.charAt(0)!="0")O="0"+O;break;case 2:O="0b"+O;break;}}if(sign&&O.charAt(0)!="-"){if(flags.indexOf("+")>-1)O="+"+O;else if(flags.indexOf(" ")>-1)O=" "+O}if(width>0){if(O.length-1){O=O+(width-O.length>=0?padstr[" "].substr(0,width-O.length):"")}else if(flags.indexOf("0")>-1&&prec<0&&O.length>0){if(prec>O.length)O=(prec-O.length>=0?padstr["0"].substr(0,prec-O.length):"")+O;pad=width-O.length>=0?padstr[prec>0?" ":"0"].substr(0,width-O.length):"";if(O.charCodeAt(0)<48){if(O.charAt(2).toLowerCase()=="x")O=O.substr(0,3)+pad+O.substring(3);else O=O.substr(0,1)+pad+O.substring(1)}else if(O.charAt(1).toLowerCase()=="x")O=O.substr(0,2)+pad+O.substring(2);else O=pad+O}else{O=(width-O.length>=0?padstr[" "].substr(0,width-O.length):"")+O}}}}else if(isnum>0){Vnum=Number(arg);if(arg===null)Vnum=0/0;if(len=="L")bytes=12;var isf=isFinite(Vnum);if(!isf){if(Vnum<0)O="-";else if(flags.indexOf("+")>-1)O="+";else if(flags.indexOf(" ")>-1)O=" ";O+=isNaN(Vnum)?"nan":"inf"}else{var E=0;if(prec==-1&&isnum!=4)prec=6;if(isnum==3){O=Vnum.toExponential(1);E=+O.substr(O.indexOf("e")+1);if(prec===0)prec=1;if(prec>E&&E>=-4){isnum=11;prec=prec-(E+1)}else{isnum=12;prec=prec-1}}var sg=Vnum<0||1/Vnum==-Infinity?"-":"";if(Vnum<0)Vnum=-Vnum;switch(isnum){case 1:;case 11:if(Vnum<1e21){O=Vnum.toFixed(prec);if(isnum==1){if(prec===0&&alt&&O.indexOf(".")==-1)O+="."}else if(!alt)O=O.replace(/(\.\d*[1-9])0*$/,"$1").replace(/\.0*$/,"");else if(O.indexOf(".")==-1)O+=".";break}O=Vnum.toExponential(20);E=+O.substr(O.indexOf("e")+1);O=O.charAt(0)+O.substr(2,O.indexOf("e")-2);O=O+(E-O.length+1>=0?padstr["0"].substr(0,E-O.length+1):"");if(alt||prec>0&&isnum!==11)O=O+"."+(prec>=0?padstr["0"].substr(0,prec):"");break;case 2:;case 12:O=Vnum.toExponential(prec);E=O.indexOf("e");if(O.length-E===3)O=O.substr(0,E+2)+"0"+O.substr(E+2);if(alt&&O.indexOf(".")==-1)O=O.substr(0,E)+"."+O.substr(E);else if(!alt&&isnum==12)O=O.replace(/\.0*e/,"e").replace(/\.(\d*[1-9])0*e/,".$1e");break;case 4:if(Vnum===0){O="0x0"+(alt||prec>0?"."+(prec>=0?padstr["0"].substr(0,prec):""):"")+"p+0";break}O=Vnum.toString(16);var ac=O.charCodeAt(0);if(ac==48){ac=2;E=-4;Vnum*=16;while(O.charCodeAt(ac++)==48){E-=4;Vnum*=16}O=Vnum.toString(16);ac=O.charCodeAt(0)}var ai=O.indexOf(".");if(O.indexOf("(")>-1){var am=O.match(/\(e(.*)\)/);var ae=am?+am[1]:0;E+=4*ae;Vnum/=Math.pow(16,ae)}else if(ai>1){E+=4*(ai-1);Vnum/=Math.pow(16,ai-1)}else if(ai==-1){E+=4*(O.length-1);Vnum/=Math.pow(16,O.length-1)}if(bytes>8){if(ac<50){E-=3;Vnum*=8}else if(ac<52){E-=2;Vnum*=4}else if(ac<56){E-=1;Vnum*=2}}else{if(ac>=56){E+=3;Vnum/=8}else if(ac>=52){E+=2;Vnum/=4}else if(ac>=50){E+=1;Vnum/=2}}O=Vnum.toString(16);if(O.length>1){if(O.length>prec+2&&O.charCodeAt(prec+2)>=56){var _f=O.charCodeAt(0)==102;O=(Vnum+8*Math.pow(16,-prec-1)).toString(16);if(_f&&O.charCodeAt(0)==49)E+=4}if(prec>0){O=O.substr(0,prec+2);if(O.length=0?padstr["0"].substr(0,prec+2-O.length):"")+O.substr(1);else O+=prec+2-O.length>=0?padstr["0"].substr(0,prec+2-O.length):""}}else if(prec===0)O=O.charAt(0)+(alt?".":"")}else if(prec>0)O=O+"."+(prec>=0?padstr["0"].substr(0,prec):"");else if(alt)O=O+".";O="0x"+O+"p"+(E>=0?"+"+E:E);break;}if(sg===""){if(flags.indexOf("+")>-1)sg="+";else if(flags.indexOf(" ")>-1)sg=" "}O=sg+O}if(width>O.length){if(flags.indexOf("-")>-1){O=O+(width-O.length>=0?padstr[" "].substr(0,width-O.length):"")}else if(flags.indexOf("0")>-1&&O.length>0&&isf){pad=width-O.length>=0?padstr["0"].substr(0,width-O.length):"";if(O.charCodeAt(0)<48){if(O.charAt(2).toLowerCase()=="x")O=O.substr(0,3)+pad+O.substring(3);else O=O.substr(0,1)+pad+O.substring(1)}else if(O.charAt(1).toLowerCase()=="x")O=O.substr(0,2)+pad+O.substring(2);else O=pad+O}else{O=(width-O.length>=0?padstr[" "].substr(0,width-O.length):"")+O}}if(c<96)O=O.toUpperCase()}o.push(O)}return o.join("")}function vsprintf(fmt,args){return doit(tokenize(fmt),args)}function sprintf(){var args=new Array(arguments.length-1);for(var i=0;iany):void; */ +var PRINTJ/*:PRINTJModule*/; (function (factory/*:(a:any)=>void*/)/*:void*/ { /*jshint ignore:start */ if(typeof DO_NOT_EXPORT_PRINTJ === 'undefined') { @@ -12,20 +12,20 @@ var PRINTJ/*:any*/; factory(exports); } else if ('function' === typeof define && define.amd) { define(function () { - var module/*:any*/ = {}; + var module/*:PRINTJModule*/ = /*::(*/{}/*:: :any)*/; factory(module); return module; }); } else { - factory(PRINTJ = {}); + factory(PRINTJ = /*::(*/{}/*:: :any)*/); } } else { - factory(PRINTJ = {}); + factory(PRINTJ = /*::(*/{}/*:: :any)*/); } /*jshint ignore:end */ -}(function(PRINTJ) { +}(function(PRINTJ/*:PRINTJModule*/) { -PRINTJ.version = '1.0.0'; +PRINTJ.version = '1.0.1'; function tokenize(fmt/*:string*/)/*:ParsedFmt*/ { var out/*:ParsedFmt*/ = []; @@ -150,15 +150,14 @@ function tokenize(fmt/*:string*/)/*:ParsedFmt*/ { } //#define PAD_(x,c) (x >= 0 ? new Array(((x)|0) + 1).join((c)) : "") -var padstr = { +var padstr/*:{[s:string]:string}*/ = { " ": " ", "0": "000000000000000000000000000000000", "7": "777777777777777777777777777777777", "f": "fffffffffffffffffffffffffffffffff" }; -/*:: declare var util:any; */ -/*:: declare var require: any; */ +/*:: var util = require('util'); */ /*global process:true, util:true, require:true */ if(typeof process !== 'undefined' && !!process.versions && !!process.versions.node) util=require("util"); var u_inspect/*:(o:any)=>string*/ = (typeof util != 'undefined') ? util.inspect : JSON.stringify; @@ -168,8 +167,8 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { var argidx/*:number*/ = 0, idx/*:number*/ = 0; var Vnum/*:number*/ = 0; var pad/*:string*/ = ""; - for(var i = 0; i < t.length; ++i) { - var m/*:Array*/ = t[i], c/*:number*/ = (m[0]/*:string*/).charCodeAt(0); + for(var i/*:number*/ = 0; i < t.length; ++i) { + var m/*:ParsedEntry*/ = t[i], c/*:number*/ = (m[0]/*:string*/).charCodeAt(0); /* m order: conv full param flags width prec length */ if(c === /*L*/ 76) { o.push(m[1]); continue; } @@ -180,7 +179,7 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { /* flags */ var flags/*:string*/ = m[3]||""; - var alt = flags.indexOf("#") > -1; + var alt/*:boolean*/ = flags.indexOf("#") > -1; /* position */ if(m[2]) argidx = parseInt(m[2])-1; @@ -220,9 +219,9 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { case "number": var cc/*:number*/ = arg; if(c == 67 || len.charCodeAt(0) === /*l*/ 108) { cc &= 0xFFFFFFFF; O = String.fromCharCode( cc); } - else cc &= 0xFF; O = String.fromCharCode( cc); + else { cc &= 0xFF; O = String.fromCharCode( cc); } break; - case "string": O = arg.charAt(0); break; + case "string": O = /*::(*/arg/*:: :string)*/.charAt(0); break; default: O = String(arg).charAt(0); } if( width > O.length || - width > O.length) { if(( flags.indexOf("-") == -1 || width < 0) && flags.indexOf("0") != -1) { pad = ( width - O.length >= 0 ? padstr["0"].substr(0, width - O.length) : ""); O = pad + O; } else { pad = ( width - O.length >= 0 ? padstr[" "].substr(0, width - O.length) : ""); O = flags.indexOf("-") > -1 ? O + pad : pad + O; } } @@ -286,7 +285,7 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { /* store length in the `len` key */ case /*n*/ 110: - if(arg) { arg.len=0; for(var oo = 0; oo < o.length; ++oo) arg.len += o[oo].length; } + if(arg) { arg.len=0; for(var oo/*:number*/ = 0; oo < o.length; ++oo) arg.len += o[oo].length; } continue; /* process error */ @@ -386,7 +385,7 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { } else { Vnum = (-Vnum) % 1e16; var d1/*:Array*/ = [1,8,4,4,6,7,4,4,0,7,3,7,0,9,5,5,1,6,1,6]; - var di = d1.length - 1; + var di/*:number*/ = d1.length - 1; while(Vnum > 0) { if((d1[di] -= (Vnum % 10)) < 0) { d1[di] += 10; d1[di-1]--; } --di; Vnum = Math.floor(Vnum / 10); @@ -446,7 +445,7 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { Vnum = Number(arg); if(arg === null) Vnum = 0/0; if(len == "L") bytes = 12; - var isf = isFinite(Vnum); + var isf/*:boolean*/ = isFinite(Vnum); if(!isf) { /* Infinity or NaN */ if(Vnum < 0) O = "-"; else if(flags.indexOf("+") > -1) O = "+"; @@ -538,7 +537,7 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { O = Vnum.toString(16); if(O.length > 1) { if(O.length > prec+2 && O.charCodeAt(prec+2) >= 56) { - var _f = O.charCodeAt(0) == 102; + var _f/*:boolean*/ = O.charCodeAt(0) == 102; O = (Vnum + 8 * Math.pow(16, -prec-1)).toString(16); if(_f && O.charCodeAt(0) == 49) E += 4; } @@ -588,11 +587,11 @@ function doit(t/*:ParsedFmt*/, args/*:Array*/)/*:string*/ { return o.join(""); } -function vsprintf(fmt/*:string*/, args/*:Array*/) { return doit(tokenize(fmt), args); } +function vsprintf(fmt/*:string*/, args/*:Args*/)/*:string*/ { return doit(tokenize(fmt), args); } -function sprintf()/*:string*/ { +function sprintf(/*:: ...argz*/)/*:string*/ { var args/*:Array*/ = new Array(arguments.length - 1); - for(var i = 0; i < args.length; ++i) args[i] = arguments[i+1]; + for(var i/*:number*/ = 0; i < args.length; ++i) args[i] = arguments[i+1]; return doit(tokenize(arguments[0]), args); } diff --git a/printj.js b/printj.js index 9ff0083..7a65d48 100644 --- a/printj.js +++ b/printj.js @@ -23,7 +23,7 @@ var PRINTJ; /*jshint ignore:end */ }(function(PRINTJ) { -PRINTJ.version = '1.0.0'; +PRINTJ.version = '1.0.1'; function tokenize(fmt) { var out = []; @@ -216,7 +216,7 @@ function doit(t, args) { case "number": var cc = arg; if(c == 67 || len.charCodeAt(0) === /*l*/ 108) { cc &= 0xFFFFFFFF; O = String.fromCharCode( cc); } - else cc &= 0xFF; O = String.fromCharCode( cc); + else { cc &= 0xFF; O = String.fromCharCode( cc); } break; case "string": O = arg.charAt(0); break; default: O = String(arg).charAt(0); diff --git a/types/bin_printj.ts b/types/bin_printj.ts new file mode 100644 index 0000000..f5de475 --- /dev/null +++ b/types/bin_printj.ts @@ -0,0 +1,53 @@ +/* printj.ts (C) 2016-present SheetJS -- http://sheetjs.com */ +/* vim: set ts=2 ft=typescript: */ +/*jshint node:true, evil:true */ +import X = require("printj"); +let argv = ["n:1","a","e:null","f:3.4", "b:true", "e:1+1"]; + +function help() { +[ +"usage: printj [options] [args...]", +"", +"Options:", +" -h, --help output usage information", +"", +"Arguments are treated as strings unless prefaced by a type indicator:", +" n: call parseInt (ex. n:3 -> 3)", +" f: call parseFloat (ex. f:3.1 -> 3.1)", +' b: false when lowercase value is "FALSE" or "0", else true', +" s: interpret as string (ex. s:n:3 -> \"n:3\")", +" j: interpret as an object using JSON.parse", +" e: evaluate argument (ex. e:1+1 -> 2, e:\"1\"+1 -> \"11\")", +"", +"samples:", +" $ printj '|%02hhx%d|' n:50 e:0x7B # |32123|", +" $ printj '|%2$d + %3$d is %1$d|' e:1+2 n:1 n:2 # |1 + 2 is 3| ", +" $ printj '|%s is %s|' s:1+2 e:1+2 # |1+2 is 3|", +" $ printj '|%c %c|' s:69 n:69 # |6 E|", +"", +"Support email: dev@sheetjs.com", +"Web Demo: http://oss.sheetjs.com/printj/" +].forEach(function(l) { console.log(l); }); +return 0; +} + +function parse_arg(arg: string): any { + let m: string = arg.substr(2), p: number = 0; + if(arg.charCodeAt(1) === 58) switch((p = arg.charCodeAt(0))) { + case /*n*/ 110: return parseInt(m, 10); + case /*f*/ 102: return parseFloat(m); + case /*b*/ 98: return !(m.toUpperCase() === "FALSE" || m === "0"); + case /*j*/ 106: return JSON.parse(m); + case /*s*/ 115: return m; + } + return arg; +} + +let args: any[] = []; +let fmt = "", n = 0; +for(let i = 2; i < argv.length; ++i) switch(argv[i]) { + case "--help": case "-h": break; + default: if(n++ === 0) fmt = argv[i]; else args.push(parse_arg(argv[i])); +} + +console.log(X.vsprintf(fmt, args)); diff --git a/types/index.d.ts b/types/index.d.ts new file mode 100644 index 0000000..4434ac7 --- /dev/null +++ b/types/index.d.ts @@ -0,0 +1,11 @@ +/* index.d.ts (C) 2015-present SheetJS */ +// TypeScript Version: 2.2 + +/** Version string */ +export const version: string; + +/** Generate formatted string from format and subsequent arguments */ +export function sprintf(fmt: string, ...args: any[]): string; + +/** Generate formatted string from format and array of variables */ +export function vsprintf(fmt: string, args: any[]): string; diff --git a/types/printj-test.ts b/types/printj-test.ts new file mode 100644 index 0000000..d9ac2f3 --- /dev/null +++ b/types/printj-test.ts @@ -0,0 +1,4 @@ +import { vsprintf, sprintf } from 'printj'; + +const t1: string = sprintf("%02hhx", 123); +const t2: string = vsprintf("%02hhx %d", [123, 213]); diff --git a/types/tsconfig.json b/types/tsconfig.json new file mode 100644 index 0000000..7a65429 --- /dev/null +++ b/types/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ "es5", "dom" ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": false, + "baseUrl": ".", + "paths": { "printj": ["."] }, + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/types/tslint.json b/types/tslint.json new file mode 100644 index 0000000..d9401a9 --- /dev/null +++ b/types/tslint.json @@ -0,0 +1,11 @@ +{ + "extends": "dtslint/dtslint.json", + "rules": { + "whitespace": false, + "no-sparse-arrays": false, + "only-arrow-functions": false, + "no-consecutive-blank-lines": false, + "prefer-conditional-expression": false, + "one-variable-per-declaration": false + } +}