Module:IPA: Difference between revisions
Jump to navigation
Jump to search
TheNightAvl (talk | contribs) No edit summary |
TheNightAvl (talk | contribs) No edit summary |
||
Line 17: | Line 17: | ||
["E"] = "ɛ", | ["E"] = "ɛ", | ||
["O"] = "ɔ", | ["O"] = "ɔ", | ||
[":"] = "ː", | ["%:"] = "ː", | ||
["'"] = " | ['%"'] = "ˈ", | ||
["%%"] = "ˌ", | |||
["'"] = "ʲ", | |||
["%_j"] = "ʲ", | |||
} | } | ||
for from, to in pairs(correspondences) do | for from, to in pairs(correspondences) do | ||
ipa = mw.ustring.gsub(ipa, "'''", " | ipa = mw.ustring.gsub(ipa, "'''", "★★") | ||
ipa = mw.ustring.gsub(ipa, "''", " | ipa = mw.ustring.gsub(ipa, "''", "★") | ||
ipa = mw.ustring.gsub(ipa, from, to) | ipa = mw.ustring.gsub(ipa, from, to) | ||
ipa = mw.ustring.gsub(ipa, " | ipa = mw.ustring.gsub(ipa, "★★", "'''") | ||
ipa = mw.ustring.gsub(ipa, " | ipa = mw.ustring.gsub(ipa, "★", "''") | ||
end | end | ||
return ipa | return ipa | ||
Line 42: | Line 45: | ||
if i > 1 then out = out .. ", " end | if i > 1 then out = out .. ", " end | ||
out = out .. '<span class="' .. class .. '">' | out = out .. '<span class="' .. class .. '">' | ||
i_ipa = get_SAMPAd(i_ipa) | local pieces = {} | ||
for pre, escaped, post in mw.ustring.gmatch(i_ipa, "([^%*]*)(%*[^%*]+%*)([^%*]*)") do | |||
table.insert(pieces, get_SAMPAd(pre) .. '</span>' .. mw.ustring.match(escaped, "^%*([^%*]+)%*$") .. '<span class="' .. class .. '">' .. get_SAMPAd(post)) | |||
end | |||
i_ipa = table.concat(pieces) | |||
if linked then | if linked then | ||
out = out .. "[[" .. language_pron .. "|" .. i_ipa .. "]]" | out = out .. "[[" .. language_pron .. "|" .. i_ipa .. "]]" | ||
Line 72: | Line 79: | ||
return export | return export | ||
--[[ | |||
=p.show(mw.getCurrentFrame():newChild{title="parent", args={"rad", "nom", ["nopre"] = "true"}}:newChild{title="child"}) | |||
]]-- |
Revision as of 22:22, 20 March 2024
{{IPA}}
local export = {}
local params = {
[1] = {},
[2] = {list = true},
nolarge = {type = "boolean"},
linked = {type = "boolean"},
nopre = {type = "boolean"},
}
local params_inline = {
[1] = {},
[2] = {list = true},
}
function get_SAMPAd(ipa)
local correspondences = {
["g"] = "ɡ",
["E"] = "ɛ",
["O"] = "ɔ",
["%:"] = "ː",
['%"'] = "ˈ",
["%%"] = "ˌ",
["'"] = "ʲ",
["%_j"] = "ʲ",
}
for from, to in pairs(correspondences) do
ipa = mw.ustring.gsub(ipa, "'''", "★★")
ipa = mw.ustring.gsub(ipa, "''", "★")
ipa = mw.ustring.gsub(ipa, from, to)
ipa = mw.ustring.gsub(ipa, "★★", "'''")
ipa = mw.ustring.gsub(ipa, "★", "''")
end
return ipa
end
function format_ipa(language, ipa, nolarge, nopre, linked)
local language_pron = "Appendix:" .. language.name .. "_pronunciation"
local out = ""
if not nopre then
out = out .. "[[w:International_Phonetic_Alphabet|IPA]]"
out = out .. "<sup>([[" .. language_pron .. "|key]])</sup>: "
end
local class = "IPA"
if nolarge then class = class .. " nolarge" end
for i, i_ipa in ipairs(ipa) do
if i > 1 then out = out .. ", " end
out = out .. '<span class="' .. class .. '">'
local pieces = {}
for pre, escaped, post in mw.ustring.gmatch(i_ipa, "([^%*]*)(%*[^%*]+%*)([^%*]*)") do
table.insert(pieces, get_SAMPAd(pre) .. '</span>' .. mw.ustring.match(escaped, "^%*([^%*]+)%*$") .. '<span class="' .. class .. '">' .. get_SAMPAd(post))
end
i_ipa = table.concat(pieces)
if linked then
out = out .. "[[" .. language_pron .. "|" .. i_ipa .. "]]"
else
out = out .. i_ipa
end
out = out .. "</span>"
end
return out
end
function export.show(frame)
local args = require("Module:parameters").process(frame:getParent().args, params)
local language = require("Module:languages").get_by_code(args[1])
if language == nil then
error("No such language: " .. args[1])
end
return format_ipa(language, args[2], args["nolarge"], args["nopre"], args["linked"])
end
function export.show_inline(frame)
local args = require("Module:parameters").process(frame:getParent().args, params_inline)
local language = require("Module:languages").get_by_code(args[1])
if language == nil then
error("No such language: " .. args[1])
end
return format_ipa(language, args[2], true, true, true)
end
return export
--[[
=p.show(mw.getCurrentFrame():newChild{title="parent", args={"rad", "nom", ["nopre"] = "true"}}:newChild{title="child"})
]]--