Module:User:ObnoxiousCoder/cuneiform spellings

local export = {}

local m_links = require("Module:links") local lang = require("Module:languages").getByCode("akk") local m_table = require("Module:table") local m_strutils = require("Module:string utilities")

local function format_list_items(items) local result = {}

for _, item in ipairs(items) do		if type(item) == "table" then local link = m_links.full_link(item.term) if item.q then link = link .. " " .. require("Module:qualifier").format_qualifier(item.q)			end item = link elseif lang and not string.find(item, "", "") return item end require("Module:collation").sort(args, lang, keyfunc) end table.insert(output, format_list_items(args))

table.insert(output, ' ')

return table.concat(output) end

local param_mods = {"t", "tr", "g", "q"} local param_mod_set = m_table.listToSet(param_mods)

function export.parse_params(items) local iut for i, item in ipairs(items) do		if item:find("<") and not item:find("^[^<]*<[a-z]*[^a-z:]") then if not iut then iut = require("Module:inflection utilities") end local run = iut.parse_balanced_segment_run(item, "<", ">") local termobj = {term = {}} termobj.term.lang = lang termobj.term.term = run[1]

for j = 2, #run - 1, 2 do				if run[j + 1] ~= "" then parse_err("Extraneous text '" .. run[j + 1] .. "' after modifier") end local modtext = run[j]:match("^<(.*)>$") if not modtext then parse_err("Internal error: Modifier '" .. modtext .. "' isn't surrounded by angle brackets") end local prefix, arg = modtext:match("^([a-z]+):(.*)$") if not prefix then parse_err("Modifier " .. run[j] .. " lacks a prefix, should begin with one of '" .. table.concat(param_mods, ":', '") .. ":'") end if param_mod_set[prefix] then local obj_to_set if prefix == "q" then obj_to_set = termobj else obj_to_set = termobj.term end if obj_to_set[prefix] then parse_err("Modifier '" .. prefix .. "' occurs twice, second occurrence " .. run[j]) end if prefix == "t" then termobj.term.gloss = arg elseif prefix == "g" then termobj.term.genders = mw.text.split(arg, ",") else obj_to_set[prefix] = arg end else parse_err("Unrecognized prefix '" .. prefix .. "' in modifier " .. run[j]) end end items[i] = termobj end end return items end

function export.display(frame) local parent_args = frame:getParent.args

local params = { ["sum"] = {list = true}, ["phon"] = {list = true}, ["mix"] = {list = true} }

local args = require("Module:parameters").process(parent_args, params)

local top = [===[

local forms = {}

forms["sum"] = export.create_list(export.parse_params(args["sum"])) forms["phon"] = export.create_list(export.parse_params(args["phon"])) forms["mix"] = export.create_list(export.parse_params(args["mix"]))

return m_strutils.format(template, forms)

end

return export