10,746
edits
TheNightAvl (talk | contribs) mNo edit summary |
TheNightAvl (talk | contribs) No edit summary |
||
(82 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local export = {} | local export = {} | ||
local getArgs = require( | local getArgs = require("Module:Arguments").getArgs | ||
local m_rad_IPA = require("Module:rad-IPA") | local m_rad_IPA = require("Module:rad-IPA") | ||
local m_rad_syllables = require("Module:rad-syllables") | local m_rad_syllables = require("Module:rad-syllables") | ||
local m_links = require("Module:links") | local m_links = require("Module:links") | ||
local m_languages = require("Module:languages") | local m_languages = require("Module:languages") | ||
local | local m_rhymes = require("Module:rhymes") | ||
local m_table = require("Module:table") | |||
function | function export.show(frame) | ||
local args = getArgs(frame) | |||
if | local word = mw.title.getCurrentTitle().subpageText | ||
local p = 1 | |||
if args["entry"] ~= nil then | |||
word = args["entry"] | |||
end | 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"} | |||
-- 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 = "" | |||
local manual_entry = false | |||
-- account for acronyms | |||
if mw.ustring.find(word, "[A-ZÀÁẢÂÈÌÍỈÒØÙÛÚỦÝỶỲŪ][A-ZÀÁẢÂÈÌÍỈÒØÙÛÚỦÝỶỲŪ]+") then | |||
syllables_no_auto = true | |||
end | end | ||
-- 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) | |||
if show_rhymes then | |||
local function insert_to_rhymes(rhyme) | |||
if not (rhyme == nil or m_table.contains(rhymes, rhyme)) then | |||
if pos == nil then | |||
table.insert(rhymes, rhyme) | |||
else | |||
table.insert(rhymes, pos, rhyme) | |||
pos = pos + 1 | |||
end | |||
-- mw.log("Rhyme registered: " .. rhyme) | |||
end | |||
end | |||
insert_to_rhymes(m_rad_IPA.get_rhyme(input)) | |||
local weak_rhymes = m_rad_IPA.get_weak_rhyme(input) | |||
if weak_rhymes ~= nil and type(weak_rhymes) == "table" then | |||
for _, weak_rhyme in ipairs(weak_rhymes) do | |||
insert_to_rhymes(weak_rhyme) | |||
end | end | ||
end | end | ||
end | 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 | |||
-- begin adding data to tables -- | |||
if mode ~= "IPA" then | |||
mode = "IPA" | |||
mode_dialect = "standard" | |||
mode_register = "plain" | |||
end | |||
mode_register = args[i] | |||
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] | |||
temp_arg = mw.ustring.gsub(temp_arg, "%*%(''(.*)''%)%*", "(%1)") | |||
local temp_note = mw.ustring.match(temp_arg, "%s*%*?%(.*%)%*?%s*") | |||
if temp_note then | |||
temp_arg = mw.ustring.gsub(temp_arg, "%s*%*?%(.*%)%*?%s*", "") | |||
temp_note = mw.ustring.match(temp_note, "%((.*)%)") | |||
end | |||
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 | |||
elseif mw.ustring.find(temp_arg, "^%<(.*)%>$") and mode_dialect == "standard" then | |||
temp_arg_match = mw.ustring.match(temp_arg, "^%<(.*)%>$") | |||
temp_arg_ipa = m_rad_IPA.generate({temp_arg_match}) | |||
temp_arg_ipa_phon = m_rad_IPA.generate({temp_arg_match, "phon"}) | |||
temp_arg_ipa_hj = m_rad_IPA.generate({temp_arg_match, "hj"}) | |||
temp_arg_ipa_hj_phon = m_rad_IPA.generate({temp_arg_match, "hj", "phon"}) | |||
temp_arg = "/" .. temp_arg_ipa .. "/" | |||
if temp_arg_ipa_phon ~= temp_arg_ipa then | |||
temp_arg = temp_arg .. " [" .. temp_arg_ipa_phon .. "]" | |||
end | |||
if temp_arg_ipa_hj ~= temp_arg_ipa then | |||
temp_arg_hj = "/" .. temp_arg_ipa_hj .. "/" | |||
if temp_arg_ipa_hj_phon ~= temp_arg_hj_ipa then | |||
temp_arg_hj = temp_arg_hj .. " [" .. temp_arg_ipa_hj_phon .. "]" | |||
end | |||
table.insert(IPA["hjádvanþs"][mode_register], temp_arg_hj) | |||
end | |||
else | |||
temp_arg = "/" .. temp_arg .. "/" | |||
end | |||
end | |||
if | |||
if temp_note then | |||
temp_arg = temp_arg .. " *(''" .. temp_note .. "'')*" | |||
end | end | ||
table.insert(IPA[mode_dialect][mode_register], temp_arg) | |||
-- mw.log("IPA: added '" .. temp_arg .. "' to IPA[" .. mode_dialect .. "][" .. mode_register .. "]") | |||
manual_entry = true | |||
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 | |||
-- get automations -- | |||
local auto_IPA = IPA_no_auto == false and m_rad_IPA.generate({word}) | |||
local auto_IPA_phon = IPA_no_auto == false and m_rad_IPA.generate({word, "phon"}) | |||
local auto_IPA_hj = IPA_no_auto == false and m_rad_IPA.generate({word, "hj"}) | |||
local auto_IPA_phon_hj = IPA_no_auto == false and m_rad_IPA.generate({word, "hj", "phon"}) | |||
local auto_syllables = syllables_no_auto == false and m_rad_syllables.generate({word}) | |||
-- 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} | |||
if manual_entry == true then | |||
IPA_show = IPA_show .. "[[Category:Radestrian terms with manually entered pronunciation]]" | |||
end | |||
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, "%>%, ") or mw.ustring.match(IPA_show, "%*.*%*") then | |||
IPA_show = IPA_show .. "[[Category: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* " .. m_rhymes.generate("rad", rhymes) | |||
end | |||
local syllables_show = "" | |||
local function split_syllables(input) | |||
local syllables = {} | local syllables = {} | ||
for syl in mw.ustring.gmatch(input, "([^%|]+)") do | for syl in mw.ustring.gmatch(input, "([^%|]+)") do | ||
table.insert(syllables, syl) | |||
end | end | ||
return syllables | 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 | |||
local to_Return = IPA_show .. homophones_show .. rhymes_show .. syllables_show | |||
if args["entry"] ~= nil then | |||
to_Return = mw.ustring.gsub(to_Return, "%[%[Category[^%]]+%]%]", "") | |||
end | |||
return to_Return | |||
end | end | ||
Line 255: | Line 372: | ||
--[[ | --[[ | ||
Debug console test string: | Debug console test string: | ||
=p.show(mw.getCurrentFrame():newChild{title="whatever",args={"rjaovs"}}) | =p.show(mw.getCurrentFrame():newChild{title="whatever",args={["entry"] = "rjaovs"}}) | ||
]] | ]] |