Module:rad-pronunciation: Difference between revisions

From Laenkea
Jump to navigation Jump to search
mNo edit summary
No edit summary
 
(78 intermediate revisions by the same user not shown)
Line 1: Line 1:
local export = {}
local export = {}
local getArgs = require('Module:Arguments').getArgs
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_syllables = require("Module: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 m_parameters = require("Module:parameters")
local m_rhymes = require("Module:rhymes")
local m_table = require("Module:table")


function table.contains(table, element)
function export.show(frame)
  for _, value in pairs(table) do
    local args = getArgs(frame)
     if value == element then
    local word = mw.title.getCurrentTitle().subpageText
      return true
    local p = 1
 
     if args["entry"] ~= nil then
        word = args["entry"]
     end
     end
  end
  return false
end


function export.show(frame)
    -- All possible "modes":
local args_frame = getArgs(frame)
    local parameter = {["IPA"] = "IPA", ["syllables"] = "syllables", ["homophones"] = "homophones"}
local args = {}
    local register = {["colloquial"] = "colloquial", ["formal"] = "formal", ["humorous"] = "humorous"}
local word = mw.title.getCurrentTitle().text
    local dialect = {["hjádvanþs"] = "hjádvanþs", ["coastal"] = "coastal", ["insular"] = "insular"}
local p = 1
 
    -- create data arrays --
if args_frame["override"] ~= nil then
    local IPA = {
word = args_frame["override"]
        ["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
mw.log("——— Processing arguments ———")
while args_frame[p] do
table.insert(args, args_frame[p])
mw.log("Argument " .. p .. ": " .. args_frame[p])
p = p + 1
end
-- All possible "modes":
local parameter = {["IPA"] = "IPA", ["syllables"] = "syllables", ["homophones"] = "homophones"}
local register = {["colloquial"] = "colloquial", ["formal"] = "formal"}
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"] = {}, ["colloquial"] = {}, ["formal"] = {},  },
["hjádvanþs"] = {["plain"] = {}, ["colloquial"] = {}, ["formal"] = {},  },
["coastal"] = {["plain"] = {}, ["colloquial"] = {}, ["formal"] = {},  },
["insular"] = {["plain"] = {}, ["colloquial"] = {}, ["formal"] = {},  },
}
local rhymes = {}
local syllables = {}
local homophones = {}


    -- turn off rhymes if affix
local function insert_rhyme(input, pos)
    if mw.ustring.find(word, "^[%-·]") or mw.ustring.find(word, "[%-·]$") then
local new_rhyme = m_rad_IPA.get_rhyme(input)
        show_rhymes = false
if not (new_rhyme == nil or table.contains(rhymes, new_rhyme)) then
    end
if pos == nil then
 
table.insert(rhymes, new_rhyme)
    local function insert_rhyme(input, pos)
else
    if show_rhymes then
table.insert(rhymes, pos, new_rhyme)
        local function insert_to_rhymes(rhyme)
end
        if not (rhyme == nil or m_table.contains(rhymes, rhyme)) then
mw.log("Rhyme registered: " .. new_rhyme)
            if pos == nil then
end
                table.insert(rhymes, rhyme)
end
            else
                table.insert(rhymes, pos, rhyme)
-- get data --
                pos = pos + 1
local IPA_no_auto = false
            end
local syllables_no_auto = false
        -- mw.log("Rhyme registered: " .. rhyme)
local mode = "IPA"
        end
local mode_dialect = "standard"
        end
local mode_register = "plain"
insert_to_rhymes(m_rad_IPA.get_rhyme(input))
local working_syllables = ""
local weak_rhymes = m_rad_IPA.get_weak_rhyme(input)
if weak_rhymes ~= nil and type(weak_rhymes) == "table" then
for i = 1, #args do
for _, weak_rhyme in ipairs(weak_rhymes) do
mw.log("Processing argument " .. i .. ".")
insert_to_rhymes(weak_rhyme)
if parameter[args[i]] ~= nil then -- mode changer
mode = args[i]
mode_dialect = "standard"
mode_register = "plain"
elseif dialect[args[i]] ~= nil then
mode_dialect = args[i]
mode_register = "plain"
elseif register[args[i]] ~= nil then
mode_register = args[i]
-- begin adding data to tables --
elseif mode == "IPA" then
if args[i] == "no auto" then
IPA_no_auto = true
else
table.insert(IPA[mode_dialect][mode_register], args[i])
mw.log("IPA: added '" .. args[i] .. "' to IPA[" .. mode_dialect .. "][" .. mode_register .. "]")
if mode_dialect == "standard" or mode_dialect == "hjádvanþs" then
local just_phonemic = mw.ustring.match(args[i], "%/(.*)%/")
insert_rhyme(just_phonemic)
end
end
end
end
elseif mode == "syllables" then
if args[i] == "no auto" then
syllables_no_auto = true
elseif args[i] == "" 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]
if mw.ustring.find(working_syllables, "(%|)") then
table.insert(syllables, working_syllables)
mw.log("Syllables: " .. working_syllables .. " registered.")
end
else
working_syllables = working_syllables .. "|" .. args[i]
end
elseif mode == "homophones" then
table.insert(homophones, args[i])
mw.log("Homophones: " .. args[i] .. " registered.")
end
end
end
    end
 
-- add auto values --
    local i = 1
if IPA_no_auto == false then
 
table.insert(IPA["standard"]["plain"], 1, "/" .. auto_IPA .. "/")
    while args[i] ~= nil or args[i + 1] ~= nil do
insert_rhyme(auto_IPA, 1)
        -- mw.log("Processing argument " .. i .. ".")
        if parameter[args[i]] ~= nil then -- mode changer
if auto_IPA_phon ~= auto_IPA then
            mode = args[i]
IPA["standard"]["plain"][1] = IPA["standard"]["plain"][1] .. " [" .. auto_IPA_phon .. "]"
            mode_dialect = "standard"
end
            mode_register = "plain"
        elseif dialect[args[i]] ~= nil then
if auto_IPA_hj ~= auto_IPA then
            if mode ~= "IPA" then
table.insert(IPA["hjádvanþs"]["plain"], 1, "/" .. auto_IPA_hj .. "/")
                mode = "IPA"
insert_rhyme(auto_IPA_hj, 2)
                mode_dialect = "standard"
                mode_register = "plain"
if auto_IPA_phon_hj ~= auto_IPA_hj then
            end
IPA["hjádvanþs"]["plain"][1] = IPA["hjádvanþs"]["plain"][1] .. " [" .. auto_IPA_phon_hj .. "]"
            mode_dialect = args[i]
end
            mode_register = "plain"
end
        elseif register[args[i]] ~= nil then
end
            -- begin adding data to tables --
            if mode ~= "IPA" then
if syllables_no_auto == false and mw.ustring.find(auto_syllables, "(%|)") then
                mode = "IPA"
table.insert(syllables, 1, auto_syllables)
                mode_dialect = "standard"
end
                mode_register = "plain"
            end
-- format --
            mode_register = args[i]
        elseif mode == "IPA" then
if #IPA["standard"]["plain"] == 0 then
            if args[i] == "no auto" or args[i] == "noauto" then
error("Missing IPA input.")
                IPA_no_auto = true
end
            elseif args[i] ~= nil then
                local temp_arg = args[i]
local args_temp = {}
               
local accent_temp = {}
                temp_arg = mw.ustring.gsub(temp_arg, "%*%(''(.*)''%)%*", "(%1)")
                local temp_note = mw.ustring.match(temp_arg, "%s*%*?%(.*%)%*?%s*")
args_temp = IPA["standard"]["plain"]
                if temp_note then
table.insert(args_temp, 1, "rad")
                temp_arg = mw.ustring.gsub(temp_arg, "%s*%*?%(.*%)%*?%s*", "")
local IPA_show = "* " .. frame:expandTemplate{ title = "IPA", args = args_temp }
                temp_note = mw.ustring.match(temp_note, "%((.*)%)")
            end
for r, _ in pairs(register) do
 
if #IPA["standard"][r] > 0 then
                if not mw.ustring.find(temp_arg, "%/(.*)%/") then
args_temp = IPA["standard"][r]
                    if mw.ustring.find(temp_arg, "%[(.*)%]") then
table.insert(args_temp, 1, "")
                        if mw.ustring.find(temp_arg, "(.*) %[") then
IPA_show = IPA_show .. "\n** (<i>" .. r .. "</i>) " .. frame:expandTemplate{ title = "IPA", args = args_temp }
                            temp_arg =
end
                                "/" ..
end
                                mw.ustring.match(temp_arg, "(.*) %[") .. "/ " .. mw.ustring.match(temp_arg, "(%[.*%])")
                        else
if #IPA["hjádvanþs"]["plain"] > 0 then
                            temp_arg = mw.ustring.match(temp_arg, "(%[.*%])")
args_temp = IPA["hjádvanþs"]["plain"]
                        end
table.insert(args_temp, 1, "")
                    elseif mw.ustring.find(temp_arg, "^%<(.*)%>$") and mode_dialect == "standard" then
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", "hjádvanþs" } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp }
                        temp_arg_match = mw.ustring.match(temp_arg, "^%<(.*)%>$")
end
                        temp_arg_ipa = m_rad_IPA.generate({temp_arg_match})
for r, _ in pairs(register) do
                        temp_arg_ipa_phon = m_rad_IPA.generate({temp_arg_match, "phon"})
if #IPA["hjádvanþs"][r] > 0 then
                        temp_arg_ipa_hj = m_rad_IPA.generate({temp_arg_match, "hj"})
args_temp = IPA["hjádvanþs"][r]
                        temp_arg_ipa_hj_phon = m_rad_IPA.generate({temp_arg_match, "hj", "phon"})
table.insert(args_temp, 1, "")
 
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", "hjádvanþs", r } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp }
                        temp_arg = "/" .. temp_arg_ipa .. "/"
end
                        if temp_arg_ipa_phon ~= temp_arg_ipa then
end
                            temp_arg = temp_arg .. " [" .. temp_arg_ipa_phon .. "]"
                        end
dialect["hjádvanþs"] = nil
                        if temp_arg_ipa_hj ~= temp_arg_ipa then
                            temp_arg_hj = "/" .. temp_arg_ipa_hj .. "/"
for d, _ in pairs(dialect) do
                            if temp_arg_ipa_hj_phon ~= temp_arg_hj_ipa then
                                temp_arg_hj = temp_arg_hj .. " [" .. temp_arg_ipa_hj_phon .. "]"
if #IPA[d]["plain"] > 0 then
                            end
args_temp = IPA[d]["plain"]
                            table.insert(IPA["hjádvanþs"][mode_register], temp_arg_hj)
table.insert(args_temp, 1, "")
                        end
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", d } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp }
                    else
end
                        temp_arg = "/" .. temp_arg .. "/"
                    end
for r, _ in pairs(register) do
                end
if #IPA[d][r] > 0 then
 
args_temp = IPA[d][r]
if temp_note then
table.insert(args_temp, 1, "")
temp_arg = temp_arg .. " *(''" .. temp_note .. "'')*"
IPA_show = IPA_show .. "\n** " .. frame:expandTemplate{ title = "accent", args = { "rad", d, r } } .. " " .. frame:expandTemplate{ title = "IPA", args = args_temp }
end
end
end
end
                table.insert(IPA[mode_dialect][mode_register], temp_arg)
                -- mw.log("IPA: added '" .. temp_arg .. "' to IPA[" .. mode_dialect .. "][" .. mode_register .. "]")
local homophones_show = ""
                manual_entry = true
 
if #homophones  > 0 then
                if mode_dialect == "standard" or mode_dialect == "hjádvanþs" then
homophones_show = "\n* Homophones:"
                    local just_phonemic = mw.ustring.match(temp_arg, "%/(.*)%/")
for _, item in ipairs(table.sort(homophones)) do
                    insert_rhyme(just_phonemic)
homophones_show = homophones_show .. ", " .. m_links.full_link{ term = item, language = m_languages.get_by_code("rad") }
                end
end
            end
homophones_show = mw.ustring.gsub(homophones_show, "(%:%,)", "%:")
        elseif mode == "syllables" then
end
            if args[i] == "no auto" or args[i] == "noauto" then
                syllables_no_auto = true
local rhymes_show = ""
            elseif args[i] == "" or args[i] == nil then
                if mw.ustring.find(working_syllables, "(%|)") then
if #rhymes > 0 then
                    table.insert(syllables, working_syllables)
rhymes_show = "\n* Rhymes:"
                    -- mw.log("Syllables: " .. working_syllables .. " registered.")
                end
for num, rhyme in ipairs(rhymes) do
                working_syllables = ""
if num > 1 then
            elseif args[i + 1] == nil then
rhymes_show = rhymes_show .. ","
                working_syllables = working_syllables .. "|" .. args[i]
end
                table.insert(syllables, working_syllables)
rhymes_show = rhymes_show .. " <span class=\"IPA\">[[:Category:Rhymes:Radestrian/" .. rhyme .. "|-" .. rhyme .. "]]</span>[[Category:Rhymes:Radestrian/" .. rhyme .. "]]"
                -- mw.log("Syllables: " .. working_syllables .. " registered.")
end
                working_syllables = ""
end
            else
                working_syllables = working_syllables .. "|" .. args[i]
local syllables_show = ""
            end
        elseif mode == "homophones" then
local function split_syllables(input)
            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)
            table.insert(syllables, syl)
         end
         end
         return syllables
         return syllables
end
    end
 
if #syllables > 0 then
    if #syllables > 0 then
syllables_show = "\n* "
        syllables_show = "\n* "
args_temp = { "rad" }
        args_temp = {"rad"}
for set = 1, #syllables do
        for set = 1, #syllables do
if set > 1 then
            if set > 1 then
table.insert(args_temp, "")
                table.insert(args_temp, "")
end
            end
local working_syllables = split_syllables(syllables[set])
            local working_syllables = split_syllables(syllables[set])
for syl = 1, #working_syllables do
            for syl = 1, #working_syllables do
table.insert(args_temp, working_syllables[syl])
                table.insert(args_temp, working_syllables[syl])
end
            end
end
        end
syllables_show = syllables_show .. frame:expandTemplate{ title = "syllables", args = args_temp }
        args_temp["delimiter"] = "–"
end
 
        syllables_show = syllables_show .. frame:expandTemplate {title = "syllables", args = args_temp}
return IPA_show .. homophones_show .. rhymes_show .. syllables_show
    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 260: 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"}})
]]
]]

Latest revision as of 01:03, 19 August 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")
local m_rhymes = require("Module:rhymes")
local m_table = require("Module:table")

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"}

    -- 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

    -- 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

    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 temp_note then
					temp_arg = temp_arg .. " *(''" .. temp_note .. "'')*"	
				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 = {}
        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

    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

return export

--[[
Debug console test string:
=p.show(mw.getCurrentFrame():newChild{title="whatever",args={["entry"] = "rjaovs"}})
]]