Module:ja-compound

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"] = {type = "boolean"},		["nocap"] = {type = "boolean"}, -- required for use with but ignored	}) local len = (args[1].maxindex + 1) / 2 local result = {} local categories, sort = {"Japanese compound terms"}, {}

local function format_label(labels) local labels_f = {} for lb in labels:gmatch"[^,]+" do			local rl = ({				["rendaku"] = {"rendaku", "Japanese terms with rendaku"},				["renjo"] = {"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 terms infixed with " .. cat_form) else table.insert(categories, "Japanese terms prefixed with " .. cat_form) end elseif b_suf then table.insert(categories, "Japanese terms 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) if args.nocat then categories = "" else local lang = require("Module:languages").getByCode("jp") categories = require("Module:utilities").format_categories(categories, lang, sort) end

return result .. categories end

return export