Module:Fnielsen

From Wikipedia

Documentation for this module may be created at Module:Fnielsen/doc

-- Tutorial from Tim Starling

-- http://snippets.luacode.org/?p=snippets/Split_a_string_into_a_list_5
function split(s, delimiter)
    local i1 = 1
    local thelist = {}
    while true do 
        local i2, i3 = s:find(delimiter, i1)
        if not i2 then
            local last = s:sub(i1)
            if last ~= '' then table.insert(thelist, last) end
            if #thelist == 1 and thelist[1] == '' then
                return {}
            else
                return thelist
            end
        end
        table.insert(thelist, s:sub(i1, i2-1))
        i1 = i3+1
    end
end

function table2string(t)
    local s = ''
    local element
    for i,v in ipairs(t) do 
        s = s .. '"' .. v .. '", '
    end
    return s
end

function table2htmltablerow(t)
    -- @t table with row elements
    -- returns string formatted for a HTML wikitext row
    local s = '<tr>'
    local element
    for i,v in ipairs(t) do 
        s = s .. '<td style="font-size:75%; border: 1px #000 solid; border-collapse: collapse; ">' .. v 
    end
    return s
end

function array2htmltable(a)
    -- @a array  table of tables
    -- returns string formatted for a HTML wikitext 
    s = '<table class=sortable border=2 style="font-size:75%; background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse;">'
    local first = true
    for i, row in ipairs(a) do
        s = s .. '<tr>'
        if first then
            for j, element in ipairs(row) do 
                s = s .. '<th style="background: #f2f2f2; text-align: left; border: 1px #000 solid; border-collapse: collapse;">' .. element 
            end
            first = false
        else        
            for j, element in ipairs(row) do 
                s = s .. '<td style="font-size:75%; border: 1px #000 solid; border-collapse: collapse; ">' .. element 
            end
        end
    end
    s = s .. '</table>'
    return s
end


-- http://www.lua.org/pil/20.4.html
function fromCSV(s, delimiter)
    local t = {}
    local lines = {}
    local array = {}
    lines = split(s, '\n')
    for i,line in ipairs(lines) do
        t = split(line, delimiter)
        table.insert(array, t) 
    end
    return array
end

-- Interface --

local p = {}

function p.hello(frame)
    return 'Hello ' .. frame.args[1]
end



function p.csvdata(frame)
    local array = fromCSV(frame:preprocess('{{:Obsessive-compulsive disorder Neuroimaging Database - Amygdala.csv}}'), '\t')
    s = 'The table has ' .. #array .. ' rows' 
    s = s .. array2htmltable(array)
    return s
end

return p