Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:ref/ohje

local export = {}
local taulukot = require("Moduuli:ref/taulukot")

function export.Sisalto(frame)
    local pframe  = frame:getParent()
    local nimi    = pframe.args[1]
    local sisalto = taulukot[nimi]
    local sivu    = pframe.args.s
    local tunnus  = pframe.args.nimi or nimi .. (sivu or "") .. (hakusana or "")
    local huom    = pframe.args.huom
    local ryhma   = pframe.args.ryhma
    local hakusana = pframe.args.sv
    local hakusanat = pframe.args.svv

    
    if not sisalto then
        error("Viitettä " .. nimi .. " ei löydy")
    end


    sisalto = mw.ustring.gsub(sisalto, "{{{2|}}}", pframe.args[2] or "")        
    sisalto = mw.ustring.gsub(sisalto, "{{{2}}}",  pframe.args[2] or "{{{2}}}")
    
    sisalto = mw.ustring.gsub(sisalto, "{{{s|}}}", sivu or "")    
    sisalto = mw.ustring.gsub(sisalto, "{{{s}}}",  sivu or "{{{s}}}")
    
    sisalto = mw.ustring.gsub(sisalto, "{{{sv|}}}", hakusana or "")  
    sisalto = mw.ustring.gsub(sisalto, "{{{sv}}}",  hakusana or "{{{sv}}}")   
    
    sisalto = mw.ustring.gsub(sisalto, "{{{svv|}}}", hakusanat or "") 
    sisalto = mw.ustring.gsub(sisalto, "{{{svv}}}",  hakusanat or "{{{svv}}}")   
    
    sisalto = mw.text.trim( sisalto )
    
    return sisalto
end

function export.Viite(frame)
    sisalto = export.Sisalto(frame)
        
    return frame:extensionTag{
        name = 'ref',
        content = sisalto,
        args = {
            name = nimi,
            group = ryhma
        }
    }
end


function export.Luettelo(frame)
    local list = {}
    
    for k, v in pairs(taulukot) do
        table.insert(list, { nimi = k, sisalto = v })
    end

    table.sort(list, function (a, b) return a.nimi < b.nimi end)


    local ul = mw.html.create( 'ul' )
    
    for i, v in ipairs(list) do
        ul:node(
            mw.html.create( 'li' )
                :node(
                    mw.html.create( 'b' ):wikitext( v.nimi .. ": " )
                     )
            :wikitext( frame:preprocess( v.sisalto ) )
        )
    end

    return tostring(ul)

end

function export.Lahde(frame)
    sisalto = export.Sisalto(frame)
        
    return frame:preprocess{
        text = sisalto,
    }
end

return export