/*
this code will emulate how tab stops
worked back in my day on typewriters
and teletypes
I don't know how it would stand up
to large amounts of data
*/
function OnStart()
{
// use sample data
var data =
"123456789 123456789 123456789\n\n"+
"S/No\tFirst Name\tLast Name\n" +
"9\tSteve\tHouston\n" +
"10\tDonald\tTrump\n" +
"11\tMichelle\tObama"
var lay = app.CreateLayout("linear", "VCenter,FillXY")
var s = expandTabs(data)
var txt = app.AddText(lay, s, 0.9, -1, "monospace,left,multiline")
app.AddLayout(lay)
}
function expandTabs(data)
{
// set tab stops in characters from left
var tabs = [6, 18, 32, 44, 56]
var tabsMax = tabs.length - 1
//split data into array of lines
var linesIn = data.split("\n")
var len = linesIn.length
var linesOut = []
var line
//loop through lines
for(var i = 0; i < len; i++)
{
var arr = linesIn[i].split("\t")
var jlen = arr.length
var pos = 0
line = ""
// loop through columns
for(var j = 0; j < jlen; j++)
{
line += (arr.shift())
pos = line.length
var nxt = 0, pad = 0
// find next tab stop
while(tabs[nxt] < pos && nxt < tabsMax)
{
nxt++
}
var pad = tabs[nxt] - pos
if(pad > 0) line += " ".repeat(pad)
}
// add line to output array
linesOut.push(line)
}
// reassemble report and return it
return(linesOut.join("\n"))
}
////