Moduł:IPA
Moduł techniczny wspierający działanie szablonu {{IPA}}.
preprocess
edytuj
Funkcja dekorująca zapis wymawianych dźwięków na linki do odpowiadających im artykułów. Funkcja pobiera zapis z parametru {{{1}}} przekazanego do szablonu {{IPA}}. Mapa dźwięków i odpowiadających im artykułów znajduje się w module danych Moduł:IPA/data.
Błędy
edytujBłędy należy zgłaszać na stronie Wikibooks:Kwestie techniczne.
Zobacz też
edytuj
Powyższy opis jest dołączany ze strony Moduł:IPA/opis. (edytuj | historia)
Zobacz podstrony tego modułu. |
return {
preprocess = function (frame)
local arg = frame:getParent().args[1]
if not arg then
-- missing arguments
return nil
end
if #arg == 0 then
-- empty argument
return nil
end
if not mw.ustring.isutf8(arg) then
-- invalid input is left as is
return arg
end
local ipadata = mw.loadData( 'Moduł:IPA/data' )
local split = function(text)
local result = {}
local joined = false
local current = ""
for code in mw.ustring.gcodepoint(text) do
local c = mw.ustring.char(code)
if ipadata.joining[code] then
current = current .. c
joined = true
elseif joined or ipadata.combining[code] then
current = current .. c
joined = false
else
if current ~= "" then
table.insert(result, current)
end
current = c
end
end
-- append last part
if current ~= "" then
table.insert(result, current)
end
return result
end
local decorate = function(parts)
local last = false
local currentLink = nil
local result = {}
local count = #parts
table.insert(parts,"") -- append empty text to simplify loop below
local i = 1
while i <= count do
local s, n = parts[i]..parts[i+1], 2
local t = ipadata.sounds[s]
if not t then
s, n = parts[i], 1
t = ipadata.sounds[s]
end
local link = nil
if t then
t = t.see and ipadata.sounds[t.see] or t
link = ((t.last and last) and last[t.last] or t.link) or ipadata.unknownSound
last = t.last and last or t
elseif mw.ustring.match(s,"%S") then
link = ipadata.unknownSound
last = false
else
last = false
end
-- append the optional title
if link ~= currentLink then
if currentLink then
table.insert(result,"]]")
currentLink = nil
end
if link then
table.insert(result,"[[w:")
table.insert(result,link)
table.insert(result,"|")
currentLink = link
end
end
-- append the sound
table.insert(result,s)
-- move to next sound in the input
i = i + n
end
if currentLink then
table.insert(result, "]]")
end
return table.concat(result,"")
end
local parts = split(arg)
local result = decorate(parts)
return result
end,
}