Moduuli:läh-pieni

Wikisanakirjasta

Käytetään mallineesta läh-pieni käsin.


-- Osien tiedot.
--   [1]: 
--   [2]:
--   [3]: julkaisuvuosi 
--   [4]: osan ensimmäinen hakusana, jota käytetään tutkittaessa mihin osaan annettu haksusana kuuluu
local osat = {
    [1] = { "Ensimmäinen", "A - Isonzo", "1925", "a" },
    [2] = { "Toinen", "Isopurje - Maskotti", "1926", "isopurje" },
    [3] = { "Kolmas", "Masku - Sanomalehti", "1927", "masku" },
    [4] = { "Neljäs", "San Remo - Öölanti", "1928", "sanremo" },
}

-- Palauttaa osan numeron, jossa hakusana `hs` on/olisi.
local function hae_osa_hakusanalle(frame, hs)
    for i,r in ipairs(osat) do
        local alku = r[4]
        if alku == nil or alku > hs:lower() then
            return i-1
        end
    end
    return 4
end

-- Parsii osan numeron ja websivun numeron urlista.
local function parsi_url(frame, url, hs)
    -- urlin kaksi viimeistä numeroa joiden välissä on /
    -- hyväksyttyjä esim.:
    --  http://runeberg.org/pieni/2/0020.html
    --  2/0020.html
    --  2/0020
    return string.match(url, "/?([0-9]+)/([0-9]+)[^/]*$")
end

-- Muotoilee tekstin.
-- frame                 ...
-- osa (numero/teksti)   osan numero
-- ws (teksti)           nelinumeroinen Runebergin käyttämä sivunumero esim. "0020"
-- hs (teksti)           hakusana
local function muotoile(frame, osa, wsivu, hs)
    -- jos voidaan linkittää suoraan oikealle sivulle
    if wsivu then
        -- osa+0 muuttaa mahdollisen tekstimuotoisen numeron lukumuotoon
        return "Pieni tietosanakirja. " .. osa .. ", " .. osat[osa+0][2] .. "  / toim. Jaakko Forsman ... [et al.]. Helsinki: Otava, " .. osat[osa+0][3] .. ": hakusana ''" .. hs .. "'' ([http://runeberg.org/pieni/" .. osa .. "/" .. wsivu .. ".html Project Runebergissa])"
    -- muuten linkitetään osan hakemistoon
    else
        return "Pieni tietosanakirja. " .. osa .. ", " .. osat[osa+0][2] .. " / toim. Jaakko Forsman ... [et al.]. ([http://runeberg.org/pieni/" .. osa .. "/ Project Runebergissa]). Helsinki: Otava, " .. osat[osa+0][3] .. ": hakusana ''" .. hs .. "''"
    end
end

local m = {}
function m.Muotoile(frame)
    local pframe = frame:getParent()
    local url, hs = pframe.args[1], pframe.args[2]
    if url == "" then url = nil end
    if hs == "" or hs == nul then hs = frame.args[2] end -- pitäisi olla PAGENAME
    local osa, wsivu = nil, nil
    if url then
        osa, wsivu = parsi_url(nil, url, hs)
    else
        osa = hae_osa_hakusanalle(nil, hs)
    end
    return muotoile(nil, osa, wsivu, hs);
end
    
--testi
--local url, hs = "", "Seita"
--print(m.Muotoile{ ['getParent'] = function() return { ['args'] = { [1] = url, [2] = hs } } end })

    
return m