Module:ms-headword

local export = {} local pos_functions = {}

local u = require("Module:string/char") local lang = require("Module:languages").getByCode("ms") local PAGENAME = mw.loadData("Module:headword/data").pagename local script = lang:findBestScript(PAGENAME) -- Latn or ms-Arab

function export.show(frame) -- FIXME: use Module:parameters. local args = frame:getParent.args local poscat = frame.args[1] or error(                      "Part of speech has not been specified. Please pass parameter 1 to the module invocation.")

local head = args["head"]; if head == "" then head = nil end if (mw.ustring.find(PAGENAME, "اء[وي]")) then head = mw.ustring .gsub(PAGENAME, "(ا)(ء)([وي])", "%1%2%3") -- superscript hamza end

local data = { lang = lang, sc = script, pos_category = poscat, categories = {}, heads = {head}, translits = {"-"}, inflections = {} }

if (head and mw.ustring.find(head, "[كڬ]")) or       (args["j"] and mw.ustring.find(args["j"], "[كڬ]")) or        (args["j2"] and mw.ustring.find(args["j2"], "[كڬ]")) or        (args["j3"] and mw.ustring.find(args["j3"], "[كڬ]")) then table.insert(data.categories, "Malay terms with incorrect Jawi spelling") error("Please use ک in place of ك and ݢ in place of ڬ.") end

local special_marks = "[" .. u(0x200B) .. "-" .. u(0x200F) .. "]" -- ZWSP, ZWNJ, ZWJ, LRM, RLM if (head and mw.ustring.find(head, special_marks)) or       (args["j"] and mw.ustring.find(args["j"], special_marks)) or        (args["j2"] and mw.ustring.find(args["j2"], special_marks)) or        (args["j3"] and mw.ustring.find(args["j3"], special_marks)) then table.insert(data.categories, "Malay terms with incorrect Jawi spelling") error("Please remove ZWSP, ZWNJ, ZWJ, LRM, and RLM from title/headword.") end

function export.affixation(text, affix) if affix == "-" then text = text .. "-" .. text elseif mw.ustring.match(affix, "^%-.+%-$") then first_consonant = mw.ustring.match(text, "^[^aeiou]+") text = first_consonant .. mw.ustring.sub(affix, 2, -2) .. mw.ustring.sub(text, mw.ustring.len(first_consonant) + 1,                                     -1) else text = gsub(affix, "%-", "#" .. text) text = gsub(text, "N([^aeiou]*)([aeiou])([^aeiou]*)$", "nge%1%2%3") text = gsub(text, "meN#p", "memp") for pattern, replacement in pairs(pattern_replacements) do               text = gsub(text, pattern, replacement) end text = gsub(text, "[MNR]#?", letter_replacements) text = gsub(text, "#", "") end return text end

local letter_replacements = {["M"] = "m", ["N#"] = "ng", ["R#"] = "r"}

local jawi = {label = "Jawi spelling"} local sc_Arab = require("Module:scripts").getByCode("ms-Arab") if args["j"] then table.insert(jawi, {term = args["j"], sc = sc_Arab}) end if args["j2"] then table.insert(jawi, {term = args["j2"], sc = sc_Arab}) end if args["j3"] then table.insert(jawi, {term = args["j3"], sc = sc_Arab}) end if #jawi > 0 then table.insert(data.inflections, jawi) end

local rumi = {label = "Rumi spelling"} local sc_Latn = require("Module:scripts").getByCode("Latn") if args["r"] then table.insert(rumi, {term = args["r"], sc = sc_Latn}) end if args["r2"] then table.insert(rumi, {term = args["r2"], sc = sc_Latn}) end if args["r3"] then table.insert(rumi, {term = args["r3"], sc = sc_Latn}) end if #rumi > 0 then table.insert(data.inflections, rumi) end

if script:getCode == "ms-Arab" then table.insert(data.categories, "Malay terms in Arabic script") end

if pos_functions[poscat] then pos_functions[poscat](args, data) end

return require("Module:headword").full_headword(data)

end

pos_functions["nouns"] = function(args, data)

local pl = {label = "plural"} if args["pl"] == "-" then table.insert(data.categories, "Malay uncountable nouns") else if args["pl"] == nil then -- common plural local subwords = mw.text.split(PAGENAME, "%s") local firstword = subwords[1] subwords[1] = mw.ustring.gsub(                             "" .. firstword .. "-" .. firstword .. "",                              "([a-z]+%-)%1%1", "%1") -- reduplicate only first word table.insert(pl, table.concat(subwords, " ")) if script:getCode == "ms-Arab" then -- reduplicated form in Jawi subwords[1] = mw.ustring.gsub(                                 "" .. firstword .. "۲",                                  "([a-z]+%-)%1%1", "%1") -- add "2" only first word table.insert(pl, table.concat(subwords, " ")) end else table.insert(pl, args["pl"]) if args["pl2"] then table.insert(pl, args["pl2"]) end if args["pl3"] then table.insert(pl, args["pl3"]) end end table.insert(data.inflections, pl) end

local ku = {label = "informal 1st possessive"} if args["ku"] ~= "-" or args["ku"] == nil then table.insert(data.inflections, ku) if script:getCode == "ms-Arab" then table.insert(ku, mw.ustring.format("%sکو", PAGENAME)) else table.insert(ku, mw.ustring.format("%sku", PAGENAME)) end end

local mu = {label = "2nd possessive"} if args["mu"] ~= "-" or args["mu"] == nil then table.insert(data.inflections, mu) if script:getCode == "ms-Arab" then table.insert(mu, mw.ustring.format("%sمو", PAGENAME)) else table.insert(mu, mw.ustring.format("%smu", PAGENAME)) end end

local nya = {label = "3rd possessive"} if args["nya"] ~= "-" or args["nya"] == nil then table.insert(data.inflections, nya) if script:getCode == "ms-Arab" then table.insert(nya, mw.ustring.format("%sڽ", PAGENAME)) else table.insert(nya, mw.ustring.format("%snya", PAGENAME)) end end

end

pos_functions["proper nouns"] = function(args, data)

local pl = {label = "plural"} -- not necessary to have plural(s) if args["pl"] then table.insert(pl, args["pl"]) end if args["pl2"] then table.insert(pl, args["pl2"]) end if args["pl3"] then table.insert(pl, args["pl3"]) end if #pl > 0 then table.insert(data.inflections, pl) end

end

local aliases = { ['transitive (person)'] = 'trp', ['trans (person)'] = 'trp', ['transitive (object)'] = 'tro', ['trans (object)'] = 'tro', ['intransitive'] = 'in', ['intrans'] = 'in', ['intr'] = 'in', ['feeling'] = 'fl', ['feel.'] = 'fl' }

pos_functions["verbs"] = function(args, data)

local tv = args["tv"] or "" tv = aliases[tv] or tv   if tv ~= "" then if tv == "t" or tv == "tr" or tv == "tran" or tv == "transitive" then table.insert(data.inflections, {label = "transitive"}) table.insert(data.categories, "Malay transitive verbs") end if tv == "i" or tv == "in" or tv == "intr" or tv == "intransitive" then table.insert(data.inflections, {label = "intransitive"}) table.insert(data.categories, "Malay intransitive verbs") end if tv == "s" or tv == "st" or tv == "stat" or tv == "stative" then table.insert(data.inflections, {label = "stative"}) table.insert(data.categories, "Malay stative verbs") end else table.insert(data.categories, "Malay verbs without transitivity") end

end

pos_functions["adjectives"] = function(args, data)

local aform = {label = "used in the form"} for _, a in ipairs(args) do table.insert(aform, a) end if #aform > 0 then table.insert(data.inflections, aform) end end

pos_functions["classifiers"] = function(args, data)

local se = {label = "singular"} if args["se"] ~= "-" or args["se"] == nil then table.insert(data.inflections, se) if script:getCode == "ms-Arab" then table.insert(se, mw.ustring.format("سي%", PAGENAME)) else table.insert(se, mw.ustring.format("se%s", PAGENAME)) end end end

return export