Module:rad-pronunciation: Difference between revisions
Jump to navigation
Jump to search
TheNightAvl (talk | contribs) mNo edit summary |
TheNightAvl (talk | contribs) mNo edit summary |
||
Line 213: | Line 213: | ||
table.insert(args_temp, 1, "rad") | table.insert(args_temp, 1, "rad") | ||
args_temp["nopre"] = 1 | args_temp["nopre"] = 1 | ||
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", "hjádvanþs" } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } | IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", "hjádvanþs" } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } .. "[[Category:Radestrian terms with hjádvanþs dialect pronunciation]]" | ||
end | end | ||
for r, _ in pairs(register) do | for r, _ in pairs(register) do | ||
Line 220: | Line 220: | ||
table.insert(args_temp, 1, "rad") | table.insert(args_temp, 1, "rad") | ||
args_temp["nopre"] = 1 | args_temp["nopre"] = 1 | ||
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", "hjádvanþs", r } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } | IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", "hjádvanþs", r } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } .. "[[Category:Radestrian terms with hjádvanþs dialect pronunciation]]" | ||
end | end | ||
end | end | ||
Line 232: | Line 232: | ||
table.insert(args_temp, 1, "rad") | table.insert(args_temp, 1, "rad") | ||
args_temp["nopre"] = 1 | args_temp["nopre"] = 1 | ||
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", d } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } | IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", d } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } .. "[[Category:Radestrian terms with " .. d .. " dialect pronunciation]]" | ||
end | end | ||
Line 240: | Line 240: | ||
table.insert(args_temp, 1, "rad") | table.insert(args_temp, 1, "rad") | ||
args_temp["nopre"] = 1 | args_temp["nopre"] = 1 | ||
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", d, r } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } | IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", d, r } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } .. "[[Category:Radestrian terms with " .. d .. " dialect pronunciation]]" | ||
end | end | ||
end | end | ||
end | end | ||
if mw.ustring.match(IPA_show, ", /") then IPA_show = IPA_show ("Radestrian terms with multiple pronunciations") end | |||
local homophones_show = "" | local homophones_show = "" | ||
Line 253: | Line 255: | ||
homophones_show = homophones_show .. ", " .. m_links.full_link{ term = item, language = m_languages.get_by_code("rad") } | homophones_show = homophones_show .. ", " .. m_links.full_link{ term = item, language = m_languages.get_by_code("rad") } | ||
end | end | ||
homophones_show = mw.ustring.gsub(homophones_show, "(%:%,)", ":") | homophones_show = mw.ustring.gsub(homophones_show, "(%:%,)", ":") .. "[[Category:Radestrian homophones]]" | ||
end | end | ||
Revision as of 22:10, 28 February 2024
This module automatically formats the Radestrian pronunciation section. To use it, add the {{rad-pr}}
template to the section.
local export = {}
local getArgs = require('Module:Arguments').getArgs
local m_rad_IPA = require("Module:rad-IPA")
local m_rad_syllables = require("Module:rad-syllables")
local m_links = require("Module:links")
local m_languages = require("Module:languages")
function table.contains(table, element)
for _, value in pairs(table) do
if value == element then
return true
end
end
return false
end
function export.show(frame)
local args = getArgs(frame)
local word = mw.title.getCurrentTitle().subpageText
local p = 1
if args["entry"] ~= nil then
word = args["entry"]
end
-- All possible "modes":
local parameter = {["IPA"] = "IPA", ["syllables"] = "syllables", ["homophones"] = "homophones"}
local register = {["colloquial"] = "colloquial", ["formal"] = "formal", ["humorous"] = "humorous"}
local dialect = {["hjádvanþs"] = "hjádvanþs", ["coastal"] = "coastal", ["insular"] = "insular"}
-- get automations --
local auto_IPA = m_rad_IPA.generate({word})
local auto_IPA_phon = m_rad_IPA.generate({word, "phon"})
local auto_IPA_hj = m_rad_IPA.generate({word, "hj"})
local auto_IPA_phon_hj = m_rad_IPA.generate({word, "hj", "phon"})
local auto_syllables = m_rad_syllables.generate({word})
-- create data arrays --
local IPA = {
["standard"] = {
["plain"] = {},
}
}
for _, r in pairs(register) do
IPA["standard"][r] = {}
end
for _, d in pairs(dialect) do
IPA[d] = {["plain"] = {}}
for _, r in pairs(register) do
IPA[d][r] = {}
end
end -- set up IPA
local rhymes = {}
local syllables = {}
local homophones = {}
-- get data --
local IPA_no_auto = false
local syllables_no_auto = false
local show_rhymes = true
local mode = "IPA"
local mode_dialect = "standard"
local mode_register = "plain"
local working_syllables = ""
-- turn off rhymes if affix
if mw.ustring.find(word, "^[%-·]") or mw.ustring.find(word, "[%-·]$") then
show_rhymes = false
end
local function insert_rhyme(input, pos)
local new_rhyme = m_rad_IPA.get_rhyme(input)
if not (new_rhyme == nil or table.contains(rhymes, new_rhyme)) and show_rhymes then
if pos == nil then
table.insert(rhymes, new_rhyme)
else
table.insert(rhymes, pos, new_rhyme)
end
-- mw.log("Rhyme registered: " .. new_rhyme)
end
end
local i = 1
while args[i] ~= nil or args[i+1] ~= nil do
mw.log("Processing argument " .. i .. ".")
if parameter[args[i]] ~= nil then -- mode changer
mode = args[i]
mode_dialect = "standard"
mode_register = "plain"
elseif dialect[args[i]] ~= nil then
if mode ~= "IPA" then
mode = "IPA"
mode_dialect = "standard"
mode_register = "plain"
end
mode_dialect = args[i]
mode_register = "plain"
elseif register[args[i]] ~= nil then
if mode ~= "IPA" then
mode = "IPA"
mode_dialect = "standard"
mode_register = "plain"
end
mode_register = args[i]
-- begin adding data to tables --
elseif mode == "IPA" then
if args[i] == "no auto" or args[i] == "noauto" then
IPA_no_auto = true
elseif args[i] ~= nil then
local temp_arg = args[i]
if not mw.ustring.find(temp_arg, "%/(.*)%/") then
if mw.ustring.find(temp_arg, "%[(.*)%]") then
if mw.ustring.find(temp_arg, "(.*) %[") then
temp_arg = "/" .. mw.ustring.match(temp_arg, "(.*) %[") .. "/ " .. mw.ustring.match(temp_arg, "(%[.*%])")
else
temp_arg = mw.ustring.match(temp_arg, "(%[.*%])")
end
else
temp_arg = "/" .. temp_arg .. "/ "
end
end
table.insert(IPA[mode_dialect][mode_register], temp_arg)
mw.log("IPA: added '" .. temp_arg .. "' to IPA[" .. mode_dialect .. "][" .. mode_register .. "]")
if mode_dialect == "standard" or mode_dialect == "hjádvanþs" then
local just_phonemic = mw.ustring.match(temp_arg, "%/(.*)%/")
insert_rhyme(just_phonemic)
end
end
elseif mode == "syllables" then
if args[i] == "no auto" or args[i] == "noauto" then
syllables_no_auto = true
elseif args[i] == "" or args[i] == nil then
if mw.ustring.find(working_syllables, "(%|)") then
table.insert(syllables, working_syllables)
mw.log("Syllables: " .. working_syllables .. " registered.")
end
working_syllables = ""
elseif args[i+1] == nil then
working_syllables = working_syllables .. "|" .. args[i]
table.insert(syllables, working_syllables)
mw.log("Syllables: " .. working_syllables .. " registered.")
working_syllables = ""
else
working_syllables = working_syllables .. "|" .. args[i]
end
elseif mode == "homophones" then
if args[i] ~= nil then
table.insert(homophones, args[i])
mw.log("Homophones: " .. args[i] .. " registered.")
end
end
i = i + 1
end
i = nil
-- add auto values --
if IPA_no_auto == false then
table.insert(IPA["standard"]["plain"], 1, "/" .. auto_IPA .. "/")
insert_rhyme(auto_IPA, 1)
if auto_IPA_phon ~= auto_IPA then
IPA["standard"]["plain"][1] = IPA["standard"]["plain"][1] .. " [" .. auto_IPA_phon .. "]"
end
if auto_IPA_hj ~= auto_IPA then
table.insert(IPA["hjádvanþs"]["plain"], 1, "/" .. auto_IPA_hj .. "/")
insert_rhyme(auto_IPA_hj, 2)
if auto_IPA_phon_hj ~= auto_IPA_hj then
IPA["hjádvanþs"]["plain"][1] = IPA["hjádvanþs"]["plain"][1] .. " [" .. auto_IPA_phon_hj .. "]"
end
end
end
if syllables_no_auto == false and mw.ustring.find(auto_syllables, "(%|)") then
table.insert(syllables, 1, auto_syllables)
end
-- format --
if #IPA["standard"]["plain"] == 0 then
error("Missing IPA input")
end
local args_temp = {}
local accent_temp = {}
args_temp = IPA["standard"]["plain"]
table.insert(args_temp, 1, "rad")
local IPA_show = "* " .. frame:expandTemplate{ title = "IPA", args = args_temp }
for r, _ in pairs(register) do
if #IPA["standard"][r] > 0 then
args_temp = IPA["standard"][r]
table.insert(args_temp, 1, "rad")
args_temp["nopre"] = 1
IPA_show = IPA_show .. "\n** (<i>" .. r .. "</i>) " .. frame:expandTemplate{ title = "IPA", args = args_temp }
end
end
if #IPA["hjádvanþs"]["plain"] > 0 then
args_temp = IPA["hjádvanþs"]["plain"]
table.insert(args_temp, 1, "rad")
args_temp["nopre"] = 1
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", "hjádvanþs" } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } .. "[[Category:Radestrian terms with hjádvanþs dialect pronunciation]]"
end
for r, _ in pairs(register) do
if #IPA["hjádvanþs"][r] > 0 then
args_temp = IPA["hjádvanþs"][r]
table.insert(args_temp, 1, "rad")
args_temp["nopre"] = 1
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", "hjádvanþs", r } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } .. "[[Category:Radestrian terms with hjádvanþs dialect pronunciation]]"
end
end
dialect["hjádvanþs"] = nil
for d, _ in pairs(dialect) do
if #IPA[d]["plain"] > 0 then
args_temp = IPA[d]["plain"]
table.insert(args_temp, 1, "rad")
args_temp["nopre"] = 1
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", d } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } .. "[[Category:Radestrian terms with " .. d .. " dialect pronunciation]]"
end
for r, _ in pairs(register) do
if #IPA[d][r] > 0 then
args_temp = IPA[d][r]
table.insert(args_temp, 1, "rad")
args_temp["nopre"] = 1
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", d, r } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp } .. "[[Category:Radestrian terms with " .. d .. " dialect pronunciation]]"
end
end
end
if mw.ustring.match(IPA_show, ", /") then IPA_show = IPA_show ("Radestrian terms with multiple pronunciations") end
local homophones_show = ""
if #homophones > 0 then
homophones_show = "\n* Homophones:"
table.sort(homophones)
for _, item in ipairs(homophones) do
homophones_show = homophones_show .. ", " .. m_links.full_link{ term = item, language = m_languages.get_by_code("rad") }
end
homophones_show = mw.ustring.gsub(homophones_show, "(%:%,)", ":") .. "[[Category:Radestrian homophones]]"
end
local rhymes_show = ""
if #rhymes > 0 and show_rhymes then
rhymes_show = "\n* Rhymes:"
for num, rhyme in ipairs(rhymes) do
if num > 1 then
rhymes_show = rhymes_show .. ","
end
rhymes_show = rhymes_show .. " <span class=\"IPA\">[[:Category:Rhymes:Radestrian/" .. rhyme .. "|-" .. rhyme .. "]]</span>"
if args["entry"] == nil then
rhymes_show = rhymes_show .. "[[Category:Rhymes:Radestrian/" .. rhyme .. "]]"
end
end
end
local syllables_show = ""
local function split_syllables(input)
local syllables = {}
for syl in mw.ustring.gmatch(input, "([^%|]+)") do
table.insert(syllables, syl)
end
return syllables
end
if #syllables > 0 then
syllables_show = "\n* "
args_temp = { "rad" }
for set = 1, #syllables do
if set > 1 then
table.insert(args_temp, "")
end
local working_syllables = split_syllables(syllables[set])
for syl = 1, #working_syllables do
table.insert(args_temp, working_syllables[syl])
end
end
args_temp["delimiter"] = "‧"
syllables_show = syllables_show .. frame:expandTemplate{ title = "syllables", args = args_temp }
end
return IPA_show .. homophones_show .. rhymes_show .. syllables_show
end
return export
--[[
Debug console test string:
=p.show(mw.getCurrentFrame():newChild{title="whatever",args={["entry"] = "rjaovs"}})
]]