ข้ามไปเนื้อหา

มอดูล:lad-headword

จาก วิกิพจนานุกรม พจนานุกรมเสรี

local export = {}
local pos_functions = {}
local m_scripts = require("Module:scripts")

local lang = require("Module:languages").getByCode("lad")
local langname = lang:getCategoryName()

local PAGENAME = mw.title.getCurrentTitle().text

local suffix_categories = {
	["คำคุณศัพท์"] = true,
	["คำกริยาวิเศษณ์"] = true,
	["คำนาม"] = true,
	["คำกริยา"] = true,
}

local function track(page)
	require("Module:debug").track("lad-headword/" .. page)
	return true
end

local function glossary_link(entry, text)
	text = text or entry
	return "[[ภาคผนวก:อภิธานศัพท์#" .. entry .. "|" .. text .. "]]"
end

-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
	local tracking_categories = {}
	
	local poscat = frame.args[1]
		or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
	-- หมวดหมู่เป็นภาษาไทย
	local poscat_th = require("Module:utilities").translate_term(poscat)
	
	local params = {
		["head"] = {list = true},
		["lat"] = {list = true}, --Latin equivalent(s)
		["heb"] = {list = true}, --Hebrew equivalent(s)
		["suff"] = {type = "boolean"},
	}

	if pos_functions[poscat_th] then
		for key, val in pairs(pos_functions[poscat_th].params) do
			params[key] = val
		end
	end
	
    local parargs = frame:getParent().args
	local args = require("Module:parameters").process(parargs, params)
	local data = {
		lang = lang,
		pos_category = poscat,
		sccat = true, -- add e.g. [[:Category:Ladino nouns in Hebrew script]]
		categories = {},
		heads = args["head"],
		genders = {},
		inflections = {},
		categories = {}
	}
	
	if args["suff"] then
		data.pos_category = "ปัจจัย"
		
		if suffix_categories[poscat_th] then
			local singular_poscat = poscat:gsub("s$", "")
			table.insert(data.categories, "ปัจจัยสร้าง" .. singular_poscat .. langname)
		else
			error("No category exists for suffixes forming " .. poscat .. ".")
		end
	end
	
	data.sc = lang:findBestScript(data.heads[1] or PAGENAME)
	data.is_heb = data.sc:getCode() == "Hebr"
	data.is_lat = data.sc:getCode() == "Latn"

	if data.is_heb then
		table.insert(data.inflections, {label = "อักษรฮีบรู"})
	elseif data.is_lat then
		table.insert(data.inflections, {label = "อักษรละติน"})
	end

	if #args.lat > 0 then
		args.lat.label = "อักษรละติน"
		args.lat.sc = m_scripts.getByCode("Latn")
		table.insert(data.inflections, args.lat)
	end

	if #args.heb > 0 then
		args.heb.label = "อักษรฮีบรู"
		args.heb.sc = m_scripts.getByCode("Hebr")
		table.insert(data.inflections, args.heb)
	end

	if pos_functions[poscat_th] then
		pos_functions[poscat_th].func(args, data, tracking_categories)
	end
	
	return require("Module:headword").full_headword(data)
		.. require("Module:utilities").format_categories(tracking_categories, lang)
end

pos_functions["คำคุณศัพท์"] = {
	params = {
		["pl"] = {list = true}, --plural(s)
		["f"] = {list = true}, --feminine form(s)
		["fpl"] = {list = true}, --feminine plural(s)
		["m"] = {list = true}, --masculine form(s)
		["mpl"] = {list = true}, --masculine plural(s)
	},
	func = function(args, data, tracking_categories)
		if #args.m > 0 then
			args.m.label = "เพศชาย"
			table.insert(data.inflections, args.m)
		end
	
		if #args.f > 0 then
			args.f.label = "เพศหญิง"
			table.insert(data.inflections, args.f)
		end
	
		if #args.pl > 0 then
			args.pl.label = "พหูพจน์"
			table.insert(data.inflections, args.pl)
		end
	
		if #args.mpl > 0 then
			args.mpl.label = "พหูพจน์เพศชาย"
			table.insert(data.inflections, args.mpl)
		end
	
		if #args.fpl > 0 then
			args.fpl.label = "พหูพจน์เพศหญิง"
			table.insert(data.inflections, args.fpl)
		end
	end
}

local noun_params = {
	["g"] = {list = true}, --gender(s)
	["pl"] = {list = true}, --plural(s)
	["f"] = {list = true}, --feminine form(s)
	["fpl"] = {list = true}, --feminine plural(s)
	["m"] = {list = true}, --masculine form(s)
	["mpl"] = {list = true}, --masculine plural(s)
}

local allowed_genders = {
	["m"] = true,
	["f"] = true,
	["m-p"] = true,
	["f-p"] = true,
}

local function do_nouns(pos, args, data, tracking_categories)
	for _, g in ipairs(args.g) do
		if not allowed_genders[g] then
			error("Unrecognized gender: " .. g)
		end
	end

	local plpos = require("Module:string utilities").pluralize(pos)

	data.genders = args.g

	-- Check for special plural signals
	local mode = nil
	
	if args.pl[1] == "?" or args.pl[1] == "!" or args.pl[1] == "-" or args.pl[1] == "~" or args.pl[1] == "#" then
		mode = args.pl[1]
		table.remove(args.pl, 1)  -- Remove the mode parameter
	end
	
	if mode == "?" then
		-- Plural is unknown
		table.insert(data.categories, langname .. " " .. plpos .. " with unknown or uncertain plurals")
	elseif mode == "!" then
		-- Plural is not attested
		table.insert(data.inflections, {label = "plural not attested"})
		table.insert(data.categories, langname .. " " .. plpos .. " with unattested plurals")
		return
	elseif mode == "-" then
		-- Uncountable noun; may occasionally have a plural
		table.insert(data.categories, plpos .. "นับไม่ได้" .. langname)
		table.insert(data.inflections, {label = "โดยปกติ" .. glossary_link("นับไม่ได้")})
	elseif mode == "~" then
		-- Mixed countable/uncountable noun, always has a plural
		table.insert(data.inflections, {label = glossary_link("นับได้") .. "และ" .. glossary_link("นับไม่ได้")})
		table.insert(data.categories, plpos .. "นับไม่ได้" .. langname)
		table.insert(data.categories, plpos .. "นับได้" .. langname)
	elseif mode == "#" or pos == "คำนาม" then
		-- Countable nouns; the default for regular nouns but not proper nouns
		if mode == "#" then
			table.insert(data.inflections, {label = glossary_link("นับได้")})
		end
		-- Not until we're sure that all nouns properly use pl=-
		-- table.insert(data.categories, plpos .. "นับได้" .. langname)
	end

	if #args.pl > 0 then
		args.pl.label = "พหูพจน์"
		args.pl.accel = {form = "p"}
		table.insert(data.inflections, args.pl)
	end

	if #args.f > 0 then
		args.f.label = "เพศหญิง"
		table.insert(data.inflections, args.f)
	end

	if #args.fpl > 0 then
		args.fpl.label = "พหูพจน์เพศหญิง"
		table.insert(data.inflections, args.fpl)
	end

	if #args.m > 0 then
		args.m.label = "เพศชาย"
		table.insert(data.inflections, args.m)
	end

	if #args.mpl > 0 then
		args.mpl.label = "พหูพจน์เพศชาย"
		table.insert(data.inflections, args.mpl)
	end
end

-- Display additional inflection information for a noun
pos_functions["คำนาม"] = {
	params = noun_params,
	func = function(args, data, tracking_categories)
		return do_nouns("คำนาม", args, data, tracking_categories)
	end,
}

pos_functions["คำวิสามานยนาม"] = {
	params = noun_params,
	func = function(args, data, tracking_categories)
		return do_nouns("คำสรรพนาม", args, data, tracking_categories)
	end,
}

pos_functions["คำสรรพนาม"] = {
	params = {
		["g"] = {list = true}, --gender(s)
	},
	func = function(args, data, tracking_categories)
		for _, g in ipairs(args.g) do
			if not allowed_genders[g] then
				error("Unrecognized gender: " .. g)
			end
		end
	
		data.genders = args.g
	end
}

return export