Module:th-headword

From Wiktionary, the free dictionary
Jump to navigation Jump to search
This module needs documentation.
Please document this module by describing its purpose and usage on the documentation page.

local export = {}
local pos_functions = {}

local lang = require("Module:languages").getByCode("th")
local script = require('Module:scripts').getByCode("Thai")
local PAGENAME = mw.title.getCurrentTitle().text
local pron = require("Module:th-pron")

function export.show(frame)

	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 data = {lang = lang, sc = script, pos_category = poscat, categories = {}, heads = {args["head"]}, inflections = {}, sort_key = args["sort"]}
	
	if args["cat2"] then
		table.insert(data.categories, "Thai " .. args["cat2"])
	end
	if args["cat3"] then
		table.insert(data.categories, "Thai " .. args["cat3"])
	end
	
	if pos_functions[poscat] then
		pos_functions[poscat](args, data)
	end
	
	local content = mw.title.new(PAGENAME):getContent()
	if content then
		local phon
		local code = mw.ustring.match(content, '{{th%-pron[^o}]*}}')
		local false_positive = mw.ustring.match(content, 'note=') or mw.ustring.match(content, 'obsolete spelling of') or mw.ustring.match(content, 'obsolete form of') or mw.ustring.match(content, 'alternative spelling of') or mw.ustring.match(content, 'archaic spelling of') or mw.ustring.match(PAGENAME, 'Unsupported')
	
		if not code then
			phon = args["phon"] or args["mono"] or "-"
			data.translits = {pron.translit(phon , "th", "Thai", "paiboon")}
			if not false_positive then
				table.insert(data.categories, "Thai terms without th-pron template")
			end
		else
			phon = args["phon"] or args["mono"] or mw.ustring.match(code, '|([^|}]+)') or PAGENAME -- detects only first one
			data.translits = {pron.translit(phon, "th", "Thai", "paiboon")}
		end
		
		local code2 = mw.ustring.match(content, '{{audio|th|[^}]*}}')
		if code2 then
			table.insert(data.categories, "Thai terms with redundant audio template")
		end
	end
	
	if mw.ustring.match(PAGENAME, '.-[ก-ฮ](รร)$') or mw.ustring.match(PAGENAME, '.-[ก-ฮ](รร)[^ะ-ฺๅ็-๎].-') then
		if PAGENAME ~= 'วงจรรวม' and PAGENAME ~= 'สรรวง' then
			table.insert(data.categories, "Thai terms spelled with รร")
		end
	end
	
	local letter = true
	local specialLetter = mw.ustring.gmatch(PAGENAME, '.-([ฤฦ]ๅ?).-')
	while true do
		letter = specialLetter()
		if (not letter) then break end
		table.insert(data.categories, "Thai terms spelled with " .. letter)
	end
	local specialLetter2 = mw.ustring.gmatch(PAGENAME, '.-([ฃ๊ฅ๋ฆ็ฌฎฏฐฑฒฬฮใๆ]).-')
	while true do
		letter = specialLetter2()
		if (not letter) then break end
		if letter == "๊" or letter == "๋" or letter == "็" then
			table.insert(data.categories, "Thai terms spelled with ◌" .. letter) -- add dotted circle for above/below marks
		else
			table.insert(data.categories, "Thai terms spelled with " .. letter)
		end
		if letter == "ๆ" and PAGENAME ~= "ๆ" then
			table.insert(data.categories, "Thai reduplications")
		end
	end
	--"Category:Thai terms spelled with ทร read as ซ" is detected in Module:th-pron
	local specialLetter3 = mw.ustring.gmatch(PAGENAME, '.-([ิุ]์).-')  -- I or U + KARAN
	while true do
		letter = specialLetter3()
		if (not letter) then break end
		table.insert(data.categories, "Thai terms spelled with ◌" .. letter)
	end
	if mw.ustring.find(PAGENAME, '[0-9⁰¹²³⁴-⁹₀-₉๐-๙]') then
		table.insert(data.categories, "Thai terms spelled with numbers")
	end

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

end

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

	local classifiers = {label = "classifier"}

	if args[1] then
		for _,par in ipairs(args) do
			if par == "*" then
				table.insert(classifiers, PAGENAME) -- shorthand
				table.insert(data.categories, "Thai classifiers")
				table.insert(data.categories, "Thai nouns classified by " .. PAGENAME)
			else
				table.insert(classifiers, par)
				table.insert(data.categories, "Thai nouns classified by " .. par)
			end
		end
		table.insert(data.inflections, classifiers)
	end

end

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

	local par1 = args[1]; if par1 == "" then par1 = nil end
	local par2 = args[2]; if par2 == "" then par2 = nil end
	local par3 = args[3]; if par3 == "" then par3 = nil end
	local abstract_forms = {label = "abstract noun", accel = {pos = "noun", form = "abstract-noun"}}

	if par1 ~= "-" then
		if not par1 then
			table.insert(abstract_forms, "การ" .. PAGENAME)
		else
			if par1 == "~" then
				table.insert(abstract_forms, "การ" .. PAGENAME)
				table.insert(abstract_forms, "ความ" .. PAGENAME)
			else
				table.insert(abstract_forms, par1)
				table.insert(abstract_forms, par2)
				table.insert(abstract_forms, par3)
			end
		end
		table.insert(data.inflections, abstract_forms)
	end

end

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

	local par1 = args[1]; if par1 == "" then par1 = nil end
	local par2 = args[2]; if par2 == "" then par2 = nil end
	local par3 = args[3]; if par3 == "" then par3 = nil end
	local abstract_forms = {label = "abstract noun", accel = {pos = "noun", form = "abstract-noun"}}

	if par1 ~= "-" then
		if not par1 then
			table.insert(abstract_forms, "ความ" .. PAGENAME)
		else
			table.insert(abstract_forms, par1)
			table.insert(abstract_forms, par2)
			table.insert(abstract_forms, par3)
		end
		table.insert(data.inflections, abstract_forms)
	end

end

-- same logic
pos_functions["adverbs"] = pos_functions["adjectives"]
-- same logic
pos_functions["proper nouns"] = pos_functions["nouns"]

return export