Module:sl-headword

local m_params = require("Module:parameters") local m_str_utils = require("Module:string utilities")

local find = m_str_utils.find local lower = m_str_utils.lower local u = m_str_utils.char

local lang = require("Module:languages").getByCode("sl")

local export = {}

local function do_headwords(data) -- If the first headword given is "-", then skip the check. if data.heads[1] == "-" then data.heads[1] = mw.title.getCurrentTitle.subpageText return false end for i, head in ipairs(data.heads) do		if not require("Module:sl-common").has_accents(head) then table.insert(data.categories, "Requests for accents in Slovene entries") end end return true end

local function do_genders(data) local valid_genders = { ["m"] = true, ["m-an"] = true, ["m-in"] = true, ["f"] = true, ["n"] = true, ["m-d"] = true, ["f-d"] = true, ["n-d"] = true, ["m-p"] = true, ["f-p"] = true, ["n-p"] = true, }	for i, g in ipairs(data.genders) do		data.genders[i] = g		-- Categorize by gender, in addition to what's done already by Module:gender and number if g == "m-an" then table.insert(data.categories, "Slovene masculine animate nouns") elseif g == "m-in" then table.insert(data.categories, "Slovene masculine inanimate nouns") end end end

local function do_comparatives(data, comparatives, check_accents) local SUBPAGENAME = mw.title.getCurrentTitle.subpageText --local encoded_head = data.heads[1] --if encoded_head == SUBPAGENAME then --	encoded_head = nil --end local comp_parts = {label = "comparative", request = true} --accel = {form = "comparative", lemma = encoded_head} local sup_parts = {label = "superlative"} --accel = {form = "superlative", lemma = encoded_head} for i, comp in ipairs(comparatives) do		if comp == "bolj" then table.insert(comp_parts, "bȍlj " .. (data.heads[1] or SUBPAGENAME)) table.insert(sup_parts, "nȁjbolj " .. (data.heads[1] or SUBPAGENAME)) else table.insert(comp_parts, comp) table.insert(sup_parts, "nȁj" .. comp) if check_accents and not require("Module:sl-common").has_accents(comp) then table.insert(data.categories, "Requests for accents in Slovene entries") end end end table.insert(data.inflections, comp_parts) table.insert(data.inflections, sup_parts) end

function export.default(frame) local params = { [1] = {list = "head"}, }	local args = m_params.process(frame:getParent.args, params, nil, "sl-headword", "default") local data = {lang = lang, pos_category = frame.args[1], categories = {}, heads = args[1], inflections = {}} local check_accents = do_headwords(data) return require("Module:headword").full_headword(data) end

function export.adjectives(frame) local params = { [1] = {list = "head"}, [2] = {list = true}, }	local args = m_params.process(frame:getParent.args, params, nil, "sl-headword", "adjectives") local data = {lang = lang, pos_category = "adjectives", categories = {}, heads = args[1], inflections = {}} local check_accents = do_headwords(data)

-- Decide what to do next... if args[2][1] == "-" then table.insert(data.inflections, {label = "not comparable"}) else do_comparatives(data, args[2], check_accents) end return require("Module:headword").full_headword(data) end

function export.adverbs(frame) local params = { [1] = {list = "head"}, [2] = {list = true}, }	local args = m_params.process(frame:getParent.args, params, nil, "sl-headword", "adverbs") local data = {lang = lang, pos_category = "adverbs", categories = {}, heads = args[1], inflections = {}} local check_accents = do_headwords(data)

-- Decide what to do next... if args[2][1] and args[2][1] ~= "-" then do_comparatives(data, args[2], check_accents) end return require("Module:headword").full_headword(data) end

function export.nouns(frame) local params = { [1] = {list = "head"}, [2] = {list = "g", default = "?"}, ["f"] = {list = true}, ["m"] = {list = true}, }	local args = m_params.process(frame:getParent.args, params, nil, "sl-headword", "nouns") local data = {lang = lang, pos_category = "nouns", categories = {}, heads = args[1], genders = args[2], inflections = {}} local check_accents = do_headwords(data) do_genders(data) -- Female equivalent if #args["f"] > 0 then args["f"].label = "female equivalent" if check_accents then for i, form in ipairs(args["f"]) do				if not require("Module:sl-common").has_accents(form) then table.insert(data.categories, "Requests for accents in Slovene noun entries") end end end -- Tone check for i, form in ipairs(args["f"]) do			local found_tonal = false local found_stress = false local found_ambiguous = false form = lower(form) if find(form, "[ȃȇȋȏȗȓāēīōūȁȅȉȍȕẹọ" .. u(0x0304) .. "]") then found_tonal = true end if find(form, "[êô]") then found_stress = true end if find(form, "[áéíóúŕàèìòù]") then found_ambiguous = true end if found_stress then require("Module:debug").track("sl-headword/stress") elseif found_ambiguous then require("Module:debug").track("sl-headword/ambiguous") elseif found_tonal then require("Module:debug").track("sl-headword/tonal") end end table.insert(data.inflections, args["f"]) end -- Male equivalent if #args["m"] > 0 then args["m"].label = "male equivalent" if check_accents then for i, form in ipairs(args["m"]) do				if not require("Module:sl-common").has_accents(form) then table.insert(data.categories, "Requests for accents in Slovene noun entries") end end end -- Tone check for i, form in ipairs(args["m"]) do			local found_tonal = false local found_stress = false local found_ambiguous = false form = lower(form) if find(form, "[ȃȇȋȏȗȓāēīōūȁȅȉȍȕẹọ" .. u(0x0304) .. "]") then found_tonal = true end if find(form, "[êô]") then found_stress = true end if find(form, "[áéíóúŕàèìòù]") then found_ambiguous = true end if found_stress then require("Module:debug").track("sl-headword/stress") elseif found_ambiguous then require("Module:debug").track("sl-headword/ambiguous") elseif found_tonal then require("Module:debug").track("sl-headword/tonal") end end table.insert(data.inflections, args["m"]) end return require("Module:headword").full_headword(data) end

function export.proper_nouns(frame) local params = { [1] = {list = "head"}, [2] = {list = "g", default = "?"}, ["f"] = {list = true}, }	local args = m_params.process(frame:getParent.args, params, nil, "sl-headword", "proper_nouns") local data = {lang = lang, pos_category = "proper nouns", categories = {}, heads = args[1], genders = args[2], inflections = {}} local check_accents = do_headwords(data) do_genders(data) -- Female equivalent if #args["f"] > 0 then args["f"].label = "female equivalent" if check_accents then for i, form in ipairs(args["f"]) do				if not require("Module:sl-common").has_accents(form) then table.insert(data.categories, "Requests for accents in Slovene noun entries") end end end table.insert(data.inflections, args["f"]) end return require("Module:headword").full_headword(data) end

function export.verbs(frame) local params = { [1] = {list = "head"}, [2] = {default = "?"}, ["impf"] = {list = true}, ["pf"] = {list = true}, }	local args = m_params.process(frame:getParent.args, params, nil, "sl-headword", "verbs") local data = {lang = lang, pos_category = "verbs", categories = {}, heads = args[1], genders = {args[2]}, inflections = {}} local check_accents = do_headwords(data) -- Check aspect if data.genders[1] == "impf" then table.insert(data.categories, "Slovene imperfective verbs") if #args["impf"] > 0 then error("Imperfective verbs cannot have an imperfective equivalent") end -- Perfective equivalents if #args["pf"] > 0 then if check_accents then for _, form in ipairs(args["pf"]) do					if require("Module:sl-common").has_accents(form) then table.insert(data.categories, "Requests for accents in Slovene verb entries") end end end args["pf"].label = "perfective" table.insert(data.inflections, args["pf"]) end elseif data.genders[1] == "pf" then table.insert(data.categories, "Slovene perfective verbs") if #args["pf"] > 0 then error("Perfective verbs cannot have a perfective equivalent") end -- Imperfective equivalents if #args["impf"] > 0 then if check_accents then for _, form in ipairs(args["impf"]) do					if require("Module:sl-common").has_accents(form) then table.insert(data.categories, "Requests for accents in Slovene verb entries") end end end args["impf"].label = "imperfective" table.insert(data.inflections, args["impf"]) end elseif data.genders[1] == "both" then data.genders = {"impf", "pf"} table.insert(data.categories, "Slovene biaspectual verbs") if #args["impf"] > 0 or #args["pf"] > 0 then error("Bispectual verbs cannot have an imperfective or perfective equivalent") end else data.genders = {"?"} table.insert(data.categories, "Requests for aspect in Slovene entries") end return require("Module:headword").full_headword(data) end

return export