function err(msg) { throw Error(msg) }
module.exports = function() {
var re = /%([+-])?(\d+)?(?:\.(\d+))?s/g // captures: left-justify, field-width, precision (type 's' assumed)
var a = arguments
if(!a.length) { return '' }
else if( a.length === 1 ) { return a[0] }
var ret = '', off = 0, expr = a[0], m = null
for( var i=1; i<a.length; i++ ) {
m = re.exec( expr ) || err( 'too many arguments' ) // should have at least one %.. expression per arg
ret += expr.substring(off, m.index)
var s = a[i]
s = m[3] == null ? s : s.substring(0, m[3]) // precision (max size)
if(s.length < m[2]) { // field-width (min size)
if(m[1] === '-') {
while( s.length < m[2]) { s = s + ' ' }
} else {
while( s.length < m[2]) { s = ' ' + s }
}
}
ret += s
off = re.lastIndex
}
return (off < expr.length) ? ret + expr.substring(off) : ret
}
|