Moduuli:Tekstipohja
Ulkoasu
Funktiot
[muokkaa wikitekstiä]korvaaMuuttujat(text, vars)
[muokkaa wikitekstiä]- param text: merkkijono, joka sisältää {{{}}}-merkittyjä muuttujia
- param vars: dict, jossa on em. muuttujat ja niitä vastaavat arvot
- return: muutettu teksti
Korvaa teksin sisältämät muuttujat annetuilla arvoilla sisentäen korvaavan tekstin rivit sopivasti. Jos muuttujamerkintä sisältää rivinvaihdon, muutetaan korvaavan merkkijonon kaikki rivinvaihdot rivinvaihdon ja }}}-merkkien sisään jäävällä tekstillä.
Esim. jos merkintä on
local pohja = [=[
\relative c' {
{{{SOINNUT
}}}
}
]=]
local tulos = tekstipohja.korvaaMuuttujat(pohja, { ["SOINNUT"] = "<a c e>\n<g d e>\n<a c e>") })
on tulos-muuttujan arvo
\relative c' { <a c e> <g d e> <a c e> }
require "mw.ustring"
-- Työkalu placeholder-merkkien korvaamiseen sisällöllä tekstistä.
local p = {}
--- Tarkistaa sisältääkö nimi regex-erikoismerkkejä.
-- Heittää virheen jos nimi sisältää jonkun merkeistä [, ], %, {, }, |, ^ tai $.
local function check_var_name(var_name)
local pos = var_name:find('[%[%]%%{}|^$]')
if pos ~= nil then
error("Epäkelpo muuttujanimi: " .. var_name .. ", merkki " .. var_name:sub(pos, pos))
end
end
local function escape_replacement_string(s)
-- Korvataan kaikki %-merkit kahdella (%%)
return s:gsub("%%", "%%%%")
end
--- Korvaa teksin sisältämät muuttujat annetuilla arvoilla.
-- Jos muuttujamerkintä sisältää rivinvaihdon, muutetaan korvaavan merkkijonon
-- kaikki rivinvaihdot rivinvaihdon ja }}}-merkkien sisään jäävällä tekstillä.
-- Esim. jos merkintä on: """
-- Luettelo:
-- {{{Korvattava
-- # }}}
-- """ ja korvaava merkkijono on """
-- a
-- b
-- c
-- """ on lopputulos """
-- Luettelo:
-- # a
-- # b
-- # c
-- """
--
-- param text: merkkijono, joka sisältää {{{}}}-merkittyjä muuttujia
-- param vars: dict, jossa on em. muuttujat ja niitä vastaavat arvot
-- return: text, jossa muuttujat on korvattu
function p.korvaaMuuttujat(text, vars)
for var_name, var_val in pairs(vars) do
check_var_name(var_name)
local var_val_escaped = escape_replacement_string(var_val)
-- Yksinkertainen muuttujaviittaus.
local var_str = "{{{" .. var_name .. "}}}"
text = mw.ustring.gsub(text, var_str, var_val)
-- Rivinvaihdon sisältävä muuttujaviittaus.
local var_re = "{{{" .. var_name .. "(\n[^\n]*)}}}"
text = mw.ustring.gsub(text, var_re,
function (m)
local m_escaped = escape_replacement_string(m)
return var_val_escaped:gsub("\n", m_escaped)
end
)
end
return text
end
return p