Пређи на садржај

Модул:dercat

Документацију овог модула можете да направите на страници Модул:dercat/док

local m_languages = require("Модул:languages")

local check_ancestor = require("Модул:etymology").check_ancestor
local format_categories = require("Модул:utilities").format_categories
local insert = table.insert
local ipairs = ipairs
local process_params = require("Модул:parameters").process

local export = {}

local function add_category(categories, adjective, target_lang_name, source_lang_name)
	if target_lang_name == source_lang_name and adjective == "изведени" then
		insert(categories, target_lang_name .. " terms borrowed back у " .. source_lang_name)
	else
		insert(categories, target_lang_name .. " термини " .. adjective .. " од " .. source_lang_name)
	end
end

function export.dercat(frame)
	local args = process_params(frame:getParent().args, {
		[1] = { required = true },
		[2] = { list = true, required = true },
		["inh"] = { type = "number" },
	})

	local target_lang = m_languages.getByCode(args[1], 1)
	local target_lang_name = target_lang:getCanonicalName()
	local categories = {}
	local has_cutoff = false
	for _, lang_code in ipairs(args[2]) do
		if lang_code == "<" then
			has_cutoff = true
			break
		end
	end
	for i, source_lang_code in ipairs(args[2]) do
		-- Accept family and etymology language codes.
		if source_lang_code == "<" then
			has_cutoff = false
		else
			local source_lang = m_languages.getByCode(source_lang_code, i, true, true)
			local source_lang_name = source_lang:getDisplayForm()
			add_category(categories, "изведени", target_lang_name, source_lang_name)
			if has_cutoff or (args.inh and i <= args.inh) then
				check_ancestor(target_lang, source_lang)
				add_category(categories, "наслеђени", target_lang_name, source_lang_name)
			end
		end
	end
	return format_categories(categories, target_lang)
end

return export