Documentation for this module may be created at မဝ်ဂျူ:ja-compound/doc

local export = {}

local link = require('Module:ja-link').link
-- [[Module:parameters]]

function export.show(frame)
	local args = require("Module:parameters").process(frame:getParent().args, {
		[1] = {list = true, allow_holes = true},
		["t"] = {list = true, allow_holes = true},
		["rom"] = {list = true, allow_holes = true},
		["pos"] = {list = true, allow_holes = true},
		["lit"] = {list = true, allow_holes = true},
		["linkto"] = {list = true, allow_holes = true},
		["s"] = {list = true, allow_holes = true},
		["sort"] = {},
		["nocat"] = {},
	})
	local len = (args[1].maxindex + 1) / 2
	local result = {}
	local categories, sort = {'ပံၚ်ကောံအရေဝ်ဝေါဟာဂျပါန်ဂမၠိုင်'}, {}

	local function format_label(labels)
		local labels_f = {}
		for lb in labels:gmatch'[^,]+' do
			local rl = ({
				['rendaku'] = {'[[Wiktionary:Japanese glossary#rendaku|rendaku]]', 'Japanese terms with rendaku'},
				['renjo'] = {'[[Wiktionary:Japanese glossary#renjō|renjō]]', 'Japanese terms with renjō'},
			})[lb]
			if rl then
				table.insert(labels_f, rl[1])
				table.insert(categories, rl[2])
			else
				table.insert(labels_f, lb)
			end
		end
		return table.concat(labels_f, ', ') .. ' form '
	end

	for i = 1, len do
		local kana_this = args[1][i * 2] or args[1][i * 2 - 1]
		local kana_this_raw = kana_this:gsub('[ ^%.%%%-]', '')

		local b_pre, b_suf = kana_this:match'%-$', kana_this:match'^%-'
		local cat_form = args[1][i * 2 - 1] and args[1][i * 2 - 1]:gsub('[ ^%.%%%-]', '') or kana_this_raw
		if b_pre then
			if b_suf then
				table.insert(categories, 'Japanese words infixed with ' .. cat_form)
			else
				table.insert(categories, 'Japanese words prefixed with ' .. cat_form)
			end
		elseif b_suf then table.insert(categories, 'Japanese words suffixed with ' .. cat_form) end

		local data_pos
		if args.s[i] then
			local sandhi_lemma, sandhi_kana, sandhi_label, _s
			_s, sandhi_label = args.s[i]:match'^(.-)%?(.-)$'
			_s = _s or args.s[i]
			sandhi_lemma, sandhi_kana = _s:match'^(.-):(.-)$'
			if sandhi_lemma == '' then
				sandhi_lemma = args[1][i * 2 - 1]
			elseif sandhi_lemma == nil then
				sandhi_lemma = _s
			end

			data_pos = table.concat{
				args['pos'][i] and args['pos'][i] .. ', ' or '',
				sandhi_label and format_label(sandhi_label) or 'as ',
				link{
					lemma = sandhi_lemma,
					kana = sandhi_kana,
					linkto = '-',
				},
			}
			table.insert(sort, ((sandhi_kana or sandhi_lemma):gsub("[%^%-%% ]", "")))
		else
			data_pos = args['pos'][i]
			table.insert(sort, (kana_this_raw:gsub('[%^%% ]', '')))
		end
		table.insert(result, link{
			lemma = args[1][i * 2 - 1],
			kana = args[1][i * 2],
			gloss = args['t'][i],
			transliteration = args['rom'][i],
			lit = args['lit'][i],
			linkto = args['linkto'][i],
			pos = data_pos,
		})
	end
	result = table.concat(result, ' + ')

	sort = args.sort or table.concat(sort)
	sort = (sort == '' and '' or '|') .. sort .. ']]'
	categories = '[[Category:' .. table.concat(categories, sort .. '[[Category:') .. sort
	if args.nocat then categories = '' end

	return result .. categories
end

return export