Модул:category tree/affix cat
This module implements {{circumfixcat}}
, {{infixcat}}
, {{interfixcat}}
, {{prefixcat}}
and {{suffixcat}}
. The documentation here describes how the module works, and how to add, modify or remove information from the category tree. For information on how to use the template itself, see its documentation.
This module does not use labels. Effectively, there is only one label, whose data is hard-coded into the module.
Горња документација је укључена са странице Модул:category tree/affix cat/док. (уреди | историја) Уредници могу да експериментишу на подстраницама песак (направи | дуплирај) и тест (направи) овог модула. Подстранице овог модула. |
local m_links = require("Модул:links")
local m_compound = require("Модул:compound")
local export = {}
-- Category object
local Category = {}
Category.__index = Category
function Category.new_main(frame)
local params = {
[1] = {required = true},
[2] = {required = true},
[3] = {},
["id"] = {},
["pos"] = {},
["sc"] = {},
["sort"] = {},
["tr"] = {},
}
args = require("Модул:parameters").process(frame:getParent().args, params)
local info = {code = args[1], term = args[2], alt = args[3], id = args["id"], pos = args["pos"], sc = args["sc"], sort = args["sort"], tr = args["tr"], affixtype = frame.args["affixtype"]}
return Category.new(info)
end
function Category.new(info)
local self = setmetatable({}, Category)
for key, val in pairs(info) do
if not (key == "affixtype" or key == "alt" or key == "code" or key == "id" or key == "pos" or key == "sc" or key == "sort" or key == "term" or key == "tr") then
error("The parameter \"" .. key .. "\" was not recognized.")
end
end
self._info = info
-- Add default POS, or make POS plural.
self._pos = self._info.pos or "речи"
if not self._pos:find("ч$") then
if self._pos:find("са$") then
self._pos = self._pos .. "и"
else
self._pos = self._pos .. "са"
end
end
if not self._info.code then
error("No language code was specified.")
end
if not self._info.term then
error("No term was specified.")
end
self._lang = require("Модул:languages").getByCode(self._info.code) or error("Језички код \"" .. self._info.code .. "\" није добар.")
self._sc = (self._info.sc and (require("Модул:scripts").getByCode(val) or error("Код писма \"" .. val .. "\" није добар.")) or nil)
self._term = m_compound.make_affix(self._info.term, self._lang, self._sc, self._info.affixtype)
self._alt = m_compound.make_affix(self._info.alt, self._lang, self._sc, self._info.affixtype)
self._tr = m_compound.make_affix(self._info.tr, self._lang, require("Модул:scripts").getByCode("Latn"), self._info.affixtype)
-- Convert term/alt into affixes if needed
local desc = {
["са префиксом"] = "beginning with the prefix",
["affix"] = "завршава са суфиксом",
["circumfix"] = "bookended with the circumfix",
["уметнуте са"] = "спојена са инфиксом",
["interfix"] = "joined with the interfix",
["transfix"] = "patterned with the transfix",
}
if self._info.affixtype then
self._desc = desc[self._info.affixtype] or error(self._info.affixtype .. " није препознат тип афикса.")
else
error("Молим provide a тип of affix in the affixtype параметар.")
end
return self
end
export.new = Category.new
export.new_main = Category.new_main
function Category:getInfo()
return self._info
end
function Category:getBreadcrumbName()
if self._pos and self._pos == "речи" then
local affix = require("Модул:script utilities").tag_text(
self._alt or self._term,
self._lang,
self._sc,
"term"
)
if self._info.id then
return affix .. " (" .. self._info.id .. ")"
else
return affix
end
else
return self._pos
end
end
function Category:getDataModule()
return "Модул:category tree/affix cat"
end
function Category:canBeEmpty()
return false
end
function Category:isHidden()
return false
end
function Category:getCategoryName()
return self._lang:getCanonicalName() .. " " .. self._pos .. " " .. self._info.affixtype .. " са " .. self._lang:makeEntryName(self._term) .. (self._info.id and " (" .. self._info.id .. ")" or "")
end
function Category:getDescription()
local description =
self._lang:getCanonicalName() .. " " .. self._pos .. " " .. self._desc .. " " ..
m_links.full_link({lang = self._lang, term = self._term, alt = self._alt, sc = self._sc, id = self._info.id, tr = self._tr}, "term") ..
"."
mw.getCurrentFrame():callParserFunction(
"DISPLAYTITLE",
"Категорија:" .. self._lang:getCanonicalName() .. " " .. self._pos .. " " .. self._info.affixtype .. 'са ' .. require("Модул:script utilities").tag_text(self._lang:makeEntryName(self._term), self._lang, self._script, "term") .. (self._info.id and " (" .. self._info.id .. ")" or "")
)
return description
end
function Category:getParents()
local parents = {}
local parent
if self._info.id then
if self._pos and self._pos == "речи" then
parent = {}
parent.name = export.new({
code = self._info.code,
term = self._info.term,
affixtype = self._info.affixtype
})
parent.sort = self._info.id
table.insert(parents, parent)
else
parent = {}
parent.name = export.new({
code = self._info.code,
term = self._info.term,
affixtype = self._info.affixtype,
id = self._info.id
})
parent.sort = self._info.id .. ", " .. self._info.pos
table.insert(parents, parent)
parent = {}
parent.name = export.new({
code = self._info.code,
term = self._info.term,
affixtype = self._info.affixtype,
pos = self._info.pos
})
parent.sort = self._info.id
table.insert(parents, parent)
end
else
if self._pos and self._pos ~= "речи" then
parent = {}
parent.name = export.new({
code = self._info.code,
term = self._info.term,
affixtype = self._info.affixtype
})
parent.sort = self._info.pos
table.insert(parents, parent)
end
end
parent = {}
parent.name = require("Модул:category tree/poscatboiler").new({code = self._info.code, label = "речи са" .. self._info.affixtype})
parent.sort = self._lang:makeSortKey(self._info.sort or self._term)
table.insert(parents, parent)
return parents
end
function Category:getChildren()
return nil
end
function Category:getUmbrella()
return nil
end
return export