Moduuli:Hiekkalaatikko
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Hiekkalaatikko/ohje
local p = {}
function p.aritmetiikka()
local a = 5
local b = 3
local result
result = ';Aritmetiikka\n'
result = result .. ':a on ' .. a .. '\n'
result = result .. ':b on ' .. b .. '\n'
result = result .. ':a + b on ' .. a + b .. '\n'
result = result .. ':a - b on ' .. a - b .. '\n'
result = result .. ':a * b on ' .. a * b .. '\n'
result = result .. ':a / b on ' .. a / b .. '\n'
result = result .. ':a % b on ' .. a % b .. '\n'
result = result .. ':a ^ b on ' .. a ^ b .. '\n'
result = result .. ':-a on ' .. -a .. '\n'
return result
end
function p.relaatiot()
local a = 5
local b = 3
local result
result = ';Relaatiot\n'
result = result .. ':a on ' .. a .. '\n'
result = result .. ':b on ' .. b .. '\n'
result = result .. ':a == b on ' .. tostring(a == b) .. '\n'
result = result .. ':a ~= b on ' .. tostring(a ~= b) .. '\n'
result = result .. ':a < b on ' .. tostring(a < b) .. '\n'
result = result .. ':a > b on ' .. tostring(a > b) .. '\n'
result = result .. ':a <= b on ' .. tostring(a <= b) .. '\n'
result = result .. ':a >= b on ' .. tostring(a >= b) .. '\n'
return result
end
function p.loogiset()
local a = 5
local b = 3
local result
result = ';Loogiset\n'
result = result .. ':a on ' .. a .. '\n'
result = result .. ':b on ' .. b .. '\n'
result = result .. ':a < b and b < a on ' .. tostring(a < b and b < a) .. '\n'
result = result .. ':a < b or b < a on ' .. tostring(a < b or b < a) .. '\n'
result = result .. ':a < b on ' .. tostring(a < b) .. '\n'
result = result .. ':not (a < b) on ' .. tostring(not (a < b)) .. '\n'
return result
end
function p.length()
local string = 'Tämä on merkkijono'
local result
result = ';Pituus\n'
result = result .. ':Merkkijonon "' .. string .. '" pituus on ' .. #string
return result
end
function p.ehdot()
local tunti
local result
tunti = tonumber(os.date('%H'))
if tunti < 9 then
result = 'Hyvää huomenta!'
elseif tunti < 15 then
result = 'Hyvää iltapäivää!'
else
result = 'Hyvää iltaa!'
end
return result
end
function p.forloop()
local i
local result
result = ';for\n'
for i = 2, 10, 2 do
result = result .. ":i = " .. i .. '\n'
end
return result
end
function p.whileloop()
local i
local result
result = ';while\n'
i = 2
while i <= 10 do
result = result .. ":i = " .. i .. '\n'
i = i + 2
end
return result
end
function p.repeatloop()
local i
local result
result = ';repeat\n'
i = 2
repeat
result = result .. ":i = " .. i .. '\n'
i = i + 2
until i > 10
return result
end
local function toCelsius(f)
return (f - 32) * 5 / 9
end
local function toFahrenheit(c)
return c * 9 / 5 + 32
end
function p.functions()
local temperature
local result
result = ';Fahrenheit-asteluvut Celsius-asteikolle\n'
for temperature = 0, 100, 10 do
result = result .. ':' .. temperature .. ' °F on ' .. string.format('%.1f', toCelsius(temperature)) .. ' °C\n'
end
result = result .. ';Celsius-asteluvut Fahrenheit-asteikolle\n'
for temperature = 0, 100, 10 do
result = result .. ':' .. temperature .. ' °C on ' .. string.format('%.1f', toFahrenheit(temperature)) .. ' °F\n'
end
return result
end
local function tableToString(t)
local key
local value
local result
result = ''
for key, value in pairs(t) do
if (tonumber(key) ~= nil) then
result = result .. ':table[' .. key .. '] on ' .. value .. '\n'
else
result = result .. ':table[\'' .. key .. '\'] on ' .. value .. '\n'
end
end
return result
end
function p.sequence()
local numbers = {10, 20, 30}
local result
result = ';jono\n'
result = result .. tableToString(numbers)
return result
end
function p.dictionary()
local languages = {
['de'] = 'saksa',
['en'] = 'englanti',
['es'] = 'espanja',
['fi'] = 'suomi',
['fr'] = 'ranska',
['it'] = 'italia',
['ja'] = 'japani',
['ko'] = 'korea',
['ru'] = 'venäjä',
['zh'] = 'kiina'
}
local result
result = ';sanakirja\n'
result = result .. tableToString(languages)
return result
end
local function reciprocal1(value)
return 1 / value
end
function p.test1(frame)
local value = frame.args[1]
return reciprocal1(value)
end
local function reciprocal2(value)
if value == nil then
error('value must exist')
end
if tonumber(value) == nil then
error('value must be a number')
end
if tonumber(value) == 0 then
error('value must not be 0')
end
return 1 / value
end
function p.test2(frame)
local value = frame.args[1]
return reciprocal2(value)
end
local function reciprocal3(value)
assert(value, 'value must exist')
assert(tonumber(value), 'value must be a number')
assert(tonumber(value) ~= 0, 'value must not be zero')
return 1 / value
end
function p.test3(frame)
local value = frame.args[1]
return reciprocal3(value)
end
function p.test4(frame)
local value = frame.args[1]
if pcall(function () result = reciprocal3(value) end) then
return result
else
return 'Error: Value must exist, must be numeric, and not zero.'
end
end
function p.args(frame)
return ';args\n' .. tableToString(frame.args)
end
function p.callParserFunction(frame)
return ';callParserFunction\n:' .. frame:callParserFunction('#time', 'Y-m-d H:i:s') .. '\n'
end
function p.expandTemplate(frame)
return ';expandTemplate\n:' .. frame:expandTemplate({title = 'Malline:Hiekkalaatikko', args = {'arg1', 'arg2'}}) .. '\n'
end
function p.extensionTag(frame)
return ';extensionTag\n:' .. frame:extensionTag('nowiki', '[[text]]', {}) .. '\n'
end
function p.getParent(frame)
frame = frame:getParent()
return ';getParent\n:' .. frame:getTitle() .. '\n'
end
function p.getTitle(frame)
return ';getTitle\n:' .. frame:getTitle() .. '\n'
end
function p.canTalk(frame)
local title = mw.title.getCurrentTitle()
return ';canTalk\n:' .. tostring(title.canTalk) .. '\n'
end
function p.baseText(frame)
local title = mw.title.getCurrentTitle()
return ';baseText\n:' .. tostring(title.baseText) .. '\n'
end
function p.exists(frame)
local title = mw.title.getCurrentTitle()
return ';exists\n:' .. tostring(title.exists) .. '\n'
end
function p.fileExists(frame)
local title = mw.title.getCurrentTitle()
return ';fileExists\n:' .. tostring(title.fileExists) .. '\n'
end
function p.fragment(frame)
local title = mw.title.getCurrentTitle()
return ';fragment\n:' .. title.fragment .. '\n'
end
function p.fullText(frame)
local title = mw.title.getCurrentTitle()
return ';fullText\n:' .. title.fullText .. '\n'
end
function p.getContent(frame)
local text = mw.text.trim(frame.args[1])
local namespace = mw.text.trim(frame.args[2])
local title = mw.title.new(text, namespace)
return ';getContent\n<blockquote>' .. title:getContent() .. '</blockquote>\n'
end
function p.id(frame)
local title = mw.title.getCurrentTitle();
return ';id\n:' .. title.id .. '\n'
end
function p.inNamespace(frame)
local title = mw.title.getCurrentTitle();
return ';inNamespace\n:' .. tostring(title:inNamespace(0)) .. '\n'
end
function p.inNamespaces(frame)
local title = mw.title.getCurrentTitle();
return ';inNamespaces\n:' .. tostring(title:inNamespaces(0)) .. '\n'
end
function p.interwiki(frame)
local title = mw.title.getCurrentTitle();
return ';interwiki\n:' .. title.interwiki .. '\n'
end
function p.isContentPage(frame)
local title = mw.title.getCurrentTitle();
return ';isContentPage\n:' .. tostring(title.isContentPage) .. '\n'
end
function p.isExternal(frame)
local title = mw.title.getCurrentTitle();
return ';isExternal\n:' .. tostring(title.isExternal) .. '\n'
end
function p.isLocal(frame)
local title = mw.title.getCurrentTitle();
return ';isLocal\n:' .. tostring(title.isLocal) .. '\n'
end
function p.isRedirect(frame)
local title = mw.title.getCurrentTitle();
return ';isRedirect\n:' .. tostring(title.isRedirect) .. '\n'
end
function p.isSpecialPage(frame)
local title = mw.title.getCurrentTitle();
return ';isSpecialPage\n:' .. tostring(title.isSpecialPage) .. '\n'
end
function p.isSubpage(frame)
local title = mw.title.getCurrentTitle();
return ';isSubpage\n:' .. tostring(title.isSubpage) .. '\n'
end
function p.isTalkPage(frame)
local title = mw.title.getCurrentTitle();
return ';isTalkPage\n:' .. tostring(title.isTalkPage) .. '\n'
end
function p.isSubpageOf(frame)
local title = mw.title.getCurrentTitle();
local text = mw.text.trim(frame.args[1])
local namespace = mw.text.trim(frame.args[2])
local title2 = mw.title.new(text, namespace)
return ';isSubpageOf\n:' .. tostring(title:isSubpageOf(title2)) .. '\n'
end
function p.new(frame)
local text = mw.text.trim(frame.args[1])
local namespace = mw.text.trim(frame.args[2])
local title = mw.title.new(text, namespace)
return ';new\n:' .. title.id .. '\n'
end
function p.nsText(frame)
local title = mw.title.getCurrentTitle();
return ';nsText\n:' .. title.nsText .. '\n'
end
function p.prefixedText(frame)
local title = mw.title.getCurrentTitle()
return ';prefixedText\n:' .. title.prefixedText .. '\n'
end
function p.rootText(frame)
local title = mw.title.getCurrentTitle()
return ';rootText\n:' .. title.rootText .. '\n'
end
function p.subjectNsText(frame)
local title = mw.title.getCurrentTitle()
return ';subjectNsText\n:' .. title.subjectNsText .. '\n'
end
function p.subpageText(frame)
local title = mw.title.getCurrentTitle()
return ';subpageText\n:' .. title.subpageText .. '\n'
end
function p.text(frame)
local title = mw.title.getCurrentTitle()
return ';text\n:' .. title.text .. '\n'
end
function p.lopputeksti(frame)
return ';sub\n:string.sub(frame.args[1]) on' .. string.sub(frame.args[1], frame.args[2], string.len(frame.args[1])) .. '\n'
end
function p.korvaa(frame)
local teksti = frame.args['teksti']
teksti = string.gsub(teksti, '%[%[.*AAA', '' )
teksti = string.gsub(teksti, '%]%]', '' )
return teksti
end
local function poista_linkit(t)
local result = t
-- poistetaan sisäiset linkitykset
if string.find(result,'%[%[.-|') ~= nil then
result = string.gsub(result, '%[%[.-|', '' )
result = string.gsub(result, '%]%]', '' )
elseif string.find(result, '%[%[.-%]%]') then
result = string.gsub(result, '%[%[', '' )
result = string.gsub(result, '%]%]', '' )
end
--poistetaan ulkoiset linkitykset
if string.find(result, '%[http.-%s' ) ~= nil then
result = string.gsub(result, '%[http.-%s', '' )
result = string.gsub(result, '%]', '' )
end
return result
end
local function hakemistolinkki(kohde, otsake, otsaketaso)
local linkin_alkuosa, linkin_loppuosa
local linkki
-- local i
--[[ for i = 1, (otsaketaso-1) do
linkki = linkki .. '#'
end
]]
if(otsake ~= nil) then
linkin_alkuosa = kohde..'#'..mw.text.trim(otsake)
linkin_loppuosa = mw.text.trim(otsake)
--alkup.
--linkki = linkki..' [['..kohde..'#'..mw.text.trim(otsake)..'|'..mw.text.trim(otsake)..']]'
else
linkki = ''
return linkki
end
linkin_alkuosa = string.gsub(linkin_alkuosa, '{', '%%7B' )
linkin_alkuosa = string.gsub(linkin_alkuosa, '}', '%%7D' )
linkin_alkuosa = string.gsub(linkin_alkuosa, '%[', '%%5B' )
linkin_alkuosa = string.gsub(linkin_alkuosa, '%]', '%%5D' )
-- linkin_loppuosa = string.gsub(linkin_loppuosa, '{', '<nowiki>{</nowiki>' )
linkki = '[['..linkin_alkuosa..'|'..linkin_loppuosa..']]'
return linkki
end
function p.find()
return ';find\n:string.find(\.\.\.) is ' .. string.find('Olipa kerran == \n==teksti', '==.\n') .. '\n'
end
function p.otsikot(frame)
assert(frame.args['sivu'], 'Teksti 1')
assert(frame.args['nimiavaruus'], 'Teksti 2')
local text = mw.text.trim(frame.args['sivu'])
local namespace = mw.text.trim(frame.args['nimiavaruus'])
local title = mw.title.new(text, namespace)
local aineisto = title:getContent()
local alku
local loppu
local i
local taso
local aiempi_taso
local otsikko
local korjaus = 0
local runko
local result = ''
local hakemisto = '<ol>'
--result = result .. '\nT: ' .. text .. '\nfullText:' .. title.fullText .. '\nRoot: ' .. title.rootText
--result = result .. '\nBase: ' .. title.baseText
alku = string.find(aineisto, '\n==')
loppu = string.find(aineisto, '\n', alku+1)
if alku == nil or loppu == nil then
return 'Otsikoita ei löytynyt.'
end
if (string.find(string.sub(aineisto, alku, loppu),'=%s\n') ) then
korjaus = 1
else
korjaus = 0
end
aiempi_taso = 2
while alku ~= nil and loppu ~= nil do
i = 1
while string.sub(aineisto,alku+i,alku+i) == '=' do
i = i + 1
end
taso = i - 1
if taso > aiempi_taso then
for i = 1, (taso - aiempi_taso) do
hakemisto = hakemisto .. '<ol>'
end
elseif taso < aiempi_taso then
for i = 1, (aiempi_taso - taso) do
hakemisto = hakemisto .. '</ol>'
end
end
aiempi_taso = taso
otsikko = string.sub(aineisto, alku, loppu)
if (string.find(otsikko,'=%s\n') ) then
korjaus = 1
else
korjaus = 0
end
runko = string.sub(otsikko,taso+2,-(taso+korjaus+2))
result = result .. otsikko .. '\nTaso: ' .. taso .. '\nRunko: ' .. runko
result = result .. '\nRaaka: ' .. poista_linkit(runko)
result = result .. '\nmw.text.nowiki: ' .. mw.text.nowiki(runko)
result = result .. '\nlinkki: ' .. hakemistolinkki(title.fullText, poista_linkit(runko), taso) .. '\n'
hakemisto = hakemisto..'<li>'
hakemisto = hakemisto .. hakemistolinkki(title.fullText, poista_linkit(runko),taso) .. '</li>'
aineisto = string.sub(aineisto, loppu, #aineisto)
alku = string.find(aineisto, '\n==')
if (alku ~= nil) then
loppu = string.find(aineisto, '\n', alku+1)
end
end
return hakemisto
end
local function hlink( merkkijono )
local mjono = merkkijono
local ide = string.sub( mjono, 1, -2 )
local result
result = 'https://www.elonet.fi/fi/henkilo/'..tonumber(ide,36)
if string.sub(mjono, -1) ~= '/' then
result = result .. string.sub(mjono, -1)
end
return result
end
function laske_S(s1, s2)
return select(2, s1:gsub(s2, ""))
end
function p.testi_jep(frame)
local s = frame.args[1]
local result = s
local a = '%+'
s = laske_S(s, 'sos'..a)
if s == 0 then
s = 'Nolla'
elseif s > 2 then
s ='Tulos oli ' .. s
end
result = string.gsub(result, "'?''(.-)'''?", '%1')
if string.find(s,'https?://.?.?.?.?elonet.fi/title/ek[%a%d]-/[%a%d%#][%a%d%#]-[%s|<%]]') ~= nil then
s = 'aAa'
end
if string.find(s,'https?://.?.?.?.?elonet.fi/title/ek[%a%d]-[/|\n%s%]<]') ~= nil then
s = 'aAa'
end
if string.find(s,'https?://.?.?.?.?elonet.fi/name/he[%a%d]-/[%a%d%#][%a%d%#]-[%s|<%]]') ~= nil then
s = string.gsub(s, '(https?://.?.?.?.?elonet.fi/name/he[%a%d]-/)[%a%d%#][%a%d%#]-([%s|<%]])',
'%1'..'%2')
end
if string.find(s,'https?://.?.?.?.?elonet.fi/name/he[%a%d]-[/|\n%s%]<]') ~= nil then
s = string.gsub(s, 'https?://.?.?.?.?elonet.fi/name/he([%a%d]-[/|\n%s%]<])',
hlink)
end
return result
end
return p