Modul:category tree/poscatboiler/data/affixes and compounds
- Berikut merupakan pendokumenan yang dijana oleh Templat:poscatboiler data submodule documentation. [sunting]
- Pautan berguna: laman akar • sublaman • pautan • transklusi • kes ujian • kotak pasir
Submodul data ini mentakrifkan sebahagian daripada struktur kategori Wikikamus.
Untuk pengenalan kepada sistem poscatboiler
dan penerangan tentang cara menambah atau mengubah suai kategori, lihat Modul:category tree/poscatboiler/data/doc.
local labels = {}
local raw_categories = {}
local handlers = {}
-----------------------------------------------------------------------------
-- --
-- LABELS --
-- --
-----------------------------------------------------------------------------
labels["majmuk aliteratif"] = {
description = "frasa nama bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang beraliteratif.",
parents = {"kata majmuk", "frasa aliteratif"},
}
labels["majmuk antonim"] = {
description = "kata majmuk bahasa {{{langname}}} yang sebahagiannya merupakan antonim kepada yang lain.",
parents = {"majmuk dvandva", sort = "antonim"},
}
labels["majmuk bahuvrihi"] = {
description = "kata majmuk bahasa {{{langname}}} yang bahagian pertamanya (A) mengubah bahagian keduanya (B), dan maknanya mengikuti corak [[metonim]]: “<seseorang> yang mempunyai B yang merupakan A.”",
parents = {"kata majmuk", "majmuk eksosentrik"},
}
-- Add "compound POS" categories for various parts of speech.
local compound_poses = {
"kata adjektif",
"kata adverba",
"kata penghubung",
"kata penunjuk",
"kata seru",
"kata nama",
"kata bilangan",
"kata partikal",
"kata dudi",
"awalan",
"kata depan",
"kata ganti nama",
"kata nama khas nouns",
"akhiran",
"kata kerja",
}
for _, pos in ipairs(compound_poses) do
labels["majmuk " .. pos] = {
description = "" .. pos .. "bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar.",
parents = {{name = "kata majmuk", sort = " "}, pos},
}
end
labels["majmuk penentu"] = {
description = "kata majmuk penentu bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar.",
parents = {"kata majmuk", "penentu"},
}
labels["kata majmuk"] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar.",
umbrella_parents = "Subkategori kata mengikut etimologi mengikut bahasa",
parents = {"kata mengikut etimologi"},
}
labels["majmuk dvandva"] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang boleh bersambungan dengan penambahan huruf 'dan'.",
parents = {"kata majmuk "},
}
labels["majmuk endosentrik "] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar, satu daripadanya ialah [[w:kata inti|kata inti]] kepada kata majmuk tersebut.",
parents = {"kata majmuk"},
}
labels["majmuk endosentrik nama-nama "] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar, satu daripadanya ialah [[w:kata inti|kata inti]] kepada kata majmuk tersebut.",
breadcrumb = "nama-nama",
parents = {"majmuk endosentrik", "kata majmuk"},
}
labels["majmuk endosentrik kerja-nama "] = {
description = "kata majmuk bahasa {{{langname}}} yang kata dasar pertamanya ialah kata kerja, yang kedua pula merupakan kata namaan dan kata inti kepada kata majmuk tersebut.",
breadcrumb = "kerja-nama",
parents = {"majmuk endosentrik", "majmuk kerja-nama"},
}
labels["majmuk eksosentrik "] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar, tiada daripadanya merupakan [[w:kata inti|kata inti]] kepada kata majmuk tersebut.",
parents = {"kata majmuk "},
}
labels["majmuk eksosentrik kerja-nama "] = {
description = "kata majmuk bahasa {{{langname}}} yang kata pertamanya ialah kata kerja transitif, kata keduanya merupakan kata nama yang berfungsi sebagai objek langsungnya, dan rerujuk merupakan orang atau benda yang melakukan tindakan tersebut.",
breadcrumb = "kerja-nama",
parents = {"majmuk eksosentrik ", "majmuk kerja-nama "},
}
labels["majmuk karmadharaya "] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang kata dasar utamanya menentukan akhiran kasus itu.",
parents = {"majmuk tatpurusa "},
}
labels["majmuk dvandva itaretara "] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang kata dasarnya boleh bersambungan dengan penambahan perkataan 'dan'.",
breadcrumb = "itaretara",
parents = {"majmuk dvandva "},
}
labels["majmuk berima "] = {
description = "frasa nama bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang berima.",
parents = {"kata majmuk ", "frasa berima "},
}
labels["majmuk dvandva samahara "] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang kata dasar tersebut boleh bersambungan dengan penambahan perkataan 'dan'.",
breadcrumb = "samahara",
parents = {"majmuk dvandva "},
}
labels["shitgibbons"] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada kata [[ekspletif]] bersuku kata tunggal yang diikuti dengan [[troki]] bersuku kata dua yang berfungsi sebagai [[penominal]] atau [[pengamat]].",
parents = {"majmuk endosentrik "},
}
labels["majmuk sinonim "] = {
description = "kata majmuk bahasa {{{langname}}} yang sebahagiannya bersinonim dengan yang lain.",
parents = {"majmuk dvandva ", sort = "sinonim"},
}
labels["majmuk tatpurusa"] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar ",
parents = {"kata majmuk "},
}
labels["majmuk kerja-nama "] = {
description = "kata majmuk bahasa {{{langname}}} yang bahagian pertamanya merupakan kata kerja transitif, bahagian keduanya merupakan kata nama yang berfungsi sebagai objek langsungnya, dan rerujuk terlibat merupakan orang atau benda yang melakukan tindakan tersebut, atau merupakan adjektif yang menghurai orang atau benda tersebut.",
parents = {"majmuk kerja-objek"},
}
labels["majmuk kerja-objek "] = {
description = "kata majmuk bahasa {{{langname}}} yang bahagian pertamanya merupakan kata kerja transitif, dan bahagian keduanya merupakan istilah (selalunya tetapi bukan setiap kali merupakan kata nama) yang berfungsi sebagai objeknya (yang selalunya secara langsung), dan rerujuk terlibat merupakan orang atau benda yang melakukan tindakan tersebut, atau merupakan kata adjektif yang menghurai orang atau benda tersebut.",
additional = "Contoh dalam bahasa Inggeris ialah {{m|en|pickpocket|lit=seseorang yang mencuri dompet}} dan {{m|en|catch-all|lit=sesuatu yang dapat semua benda}}.",
parents = {"kata majmuk "},
}
labels["majmuk kerja-kerja"] = {
description = "kata majmuk bahasa {{{langname}}} yang terdiri daripada dua atau lebih banyak kata kerja dalam bentuk iringan, selalunya merupakan pasangan sinonim atau antonim, dan rerujuk tersebut merujuk kata itu ke hasil perlakuan tindakan tersebut.",
parents = {"kata majmuk"},
}
labels["terbitan vrddhi "] = {
description = "istilah bahasa {{{langname}}} yang diterbit dari kata akar bahasa Indo-Eropah Purba melalui proses terbitan [[w:vṛddhi|vṛddhi]].",
parents = {"istilah berdasarkan etimologi"},
}
labels["gerundif vrddhi "] = {
description = "[[gerundif]] bahasa {{{langname}}} yang diterbit dari kata akar bahasa Indo-Eropah Purba melalui proses penerbitan [[w:vṛddhi|vṛddhi]].",
parents = {"terbitan vrddhi"},
}
labels["majmuk vyadhikarana"] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang apabila kata dasar bukan utama menentukan akhiran kasus.",
parents = {"majmuk tatpurusa"},
}
for _, fixtype in ipairs({"circumfix", "infix", "interfix", "prefix", "suffix",}) do
labels["istilah oleh " .. fixtype] = {
description = "istilah bahasa {{{langname}}} yang dikategori berdasarkan " .. fixtype .. "nya.",
umbrella_parents = "Istilah berdasarkan subkategori etimologi mengikut bahasa",
parents = {{name = "istilah berdasarkan etimologi", sort = fixtype}, fixtype .. ""},
}
end
-- Add 'umbrella_parents' key if not already present.
for key, data in pairs(labels) do
-- NOTE: umbrella.parents overrides umbrella_parents if both are given.
if not data.umbrella_parents then
data.umbrella_parents = "Jenis kata majmuk mengikut bahasa"
end
end
-----------------------------------------------------------------------------
-- --
-- RAW CATEGORIES --
-- --
-----------------------------------------------------------------------------
raw_categories["Jenis kata majmuk mengikut bahasa"] = {
description = "Kategori payung yang melangkaui topik berkenaan jenis kata majmuk.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Metakategori payung",
{name = "kata majmuk", is_label = true, sort = " "},
{name = "Istilah berdasarkan subkategori etimologi mengikut bahasa", sort = " "},
},
}
-----------------------------------------------------------------------------
-- --
-- HANDLERS --
-- --
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
------------------------------ Affix handlers -------------------------------
-----------------------------------------------------------------------------
table.insert(handlers, function(data)
local labelpref, pos, affixtype, term_and_id = data.label:match("^(([a-z -]+) ([a-z]+fix)ed with )(.+)$")
if affixtype then
local term, id = term_and_id:match("^(.+) %(([^()]+)%)$")
term = term or term_and_id
-- Convert term/alt into affixes if needed
local desc = {
["prefix"] = "bermula dengan awalan",
["suffix"] = "berhujung dengan akhiran",
["circumfix"] = "dikurung dengan apitan",
["infix"] = "dipisah dengan sisipan",
["interfix"] = "terhubung dengan jalinan",
-- Transfixes not supported currently.
-- ["transfix"] = "patterned with the transfix",
}
if not desc[affixtype] then
return nil
end
-- Here, {LANG} is replaced with the actual language, {TERM_AND_ID} with the actual term (or with 'TERM<id:ID>'
-- if there is an ID), {BASE} with '<var>base</var>', {BASE2} with '<var>base2</var>', {BASE_EXPL} with an
-- explanation of what "base" means, {BASE_BASE2_EXPL} with an explanation of what "base" and "base2" mean, and
-- {POS} with '|pos=POS' if there is a `pos` other than "terms", otherwise a blank string.
local what_categorizes = {
["prefix"] = "{{tl|af|{LANG}|{TERM_AND_ID}|{BASE}{POS}}} or {{tl|affix|{LANG}|{TERM_AND_ID}|{BASE}{POS}}} (or the more specific and less-preferred equivalents {{tl|pre}} or {{tl|prefix}}), where {BASE_EXPL}",
["suffix"] = "{{tl|af|{LANG}|{BASE}|{TERM_AND_ID}{POS}}} or {{tl|affix|{LANG}|{BASE}|{TERM_AND_ID}{POS}}} (or the more specific and less-preferred equivalents {{tl|suf}} or {{tl|suffix}}), where {BASE_EXPL}",
["circumfix"] = "{{tl|af|{LANG}|{BASE}|{TERM_AND_ID}{POS}}} or {{tl|affix|{LANG}|{BASE}|{TERM_AND_ID}{POS}}}, where {BASE_EXPL}",
["infix"] = "{{tl|infix|{LANG}|{BASE}|{TERM_AND_ID}{POS}}}, where {BASE_EXPL}",
["interfix"] = "{{tl|af|{LANG}|{BASE}|{TERM_AND_ID}{POS}|{BASE2}}} or {{tl|affix|{LANG}|{BASE}|{TERM_AND_ID}|{BASE2}{POS}}}, where {BASE_BASE2_EXPL}",
}
local params = {
["alt"] = {},
["sc"] = {},
["sort"] = {},
["tr"] = {},
["ts"] = {},
}
local args = require("Module:parameters").process(data.args, params, nil, "category tree/poscatboiler/data/terms by etymology")
local sc = data.sc or args.sc and require("Module:scripts").getByCode(args.sc, "sc") or nil
local m_affix = require("Module:affix")
-- Call make_affix to add display hyphens if they're not already present.
local _, display_term, lookup_term = m_affix.make_affix(term, data.lang, sc, affixtype, nil, true)
local _, display_alt = m_affix.make_affix(args.alt, data.lang, sc, affixtype)
local _, display_tr = m_affix.make_affix(args.tr, data.lang, require("Module:scripts").getByCode("Latn"), affixtype)
local _, display_ts = m_affix.make_affix(args.ts, data.lang, require("Module:scripts").getByCode("Latn"), affixtype)
local m_script_utilities = require("Module:script utilities")
local id_text = id and " (" .. id .. ")" or ""
-- Compute parents.
local parents = {}
if id then
if pos == "words" then
-- don't allow formerly-named categories with "words"
return nil
end
if pos == "terms" then
table.insert(parents, {name = labelpref .. term, sort = id, args = args})
else
table.insert(parents, {name = "terms " .. affixtype .. "ed with " .. term_and_id, sort = id .. ", " .. pos, args = args})
table.insert(parents, {name = labelpref .. term, sort = id, args = args})
end
elseif pos == "words" then
-- don't allow formerly-named categories with "words"
return nil
elseif pos ~= "terms" then
table.insert(parents, {name = "terms " .. affixtype .. "ed with " .. term, sort = pos, args = args})
end
table.insert(parents, {name = "terms by " .. affixtype, sort = (data.lang:makeSortKey((data.lang:makeEntryName(args.sort or term))))})
-- If other affixes are mapped to this one, show them.
local additional
if data.lang then
local langcode = data.lang:getCode()
if m_affix.langs_with_lang_specific_data[langcode] then
local langdata = mw.loadData(m_affix.affix_lang_data_module_prefix .. langcode)
local variants = {}
if langdata.affix_mappings then
for variant, canonical in pairs(langdata.affix_mappings) do
-- Above, we converted the stripped link term as we received it to the lookup form, so we
-- can look up the variants that are mapped to this term. Once we find them, map them to
-- display form.
local is_variant = false
if type(canonical) == "table" then
for _, canonical_v in pairs(canonical) do
if canonical_v == lookup_term then
is_variant = true
break
end
end
else
is_variant = canonical == lookup_term
end
if is_variant then
local _, display_variant = m_affix.make_affix(variant, data.lang, sc, affixtype)
table.insert(variants, "{{m|" .. langcode .. "|" .. display_variant .. "}}")
end
end
if #variants > 0 then
table.sort(variants)
additional = ("This category also includes terms %sed with %s."):format(affixtype,
require("Module:table").serialCommaJoin(variants))
end
end
end
end
if data.lang then
local what_categorizes_msg = what_categorizes[affixtype]
if not what_categorizes_msg then
error(("Internal error: No what_categorizes value for affixtype '%s' for label '%s', lang '%s'"):
format(affixtype, data.label, data.lang:getCode()))
end
what_categorizes_msg = "Terms are placed in this category using " .. (what_categorizes_msg
:gsub("{LANG}", data.lang:getCode())
:gsub("{TERM_AND_ID}", require("Module:string utilities").replacement_escape(
id and ("%s<id:%s>"):format(term, id) or term))
:gsub("{POS}", require("Module:string utilities").replacement_escape(
pos == "terms" and "" or ("|pos=%s"):format(pos)))
:gsub("{BASE}", "<var>base</var>")
:gsub("{BASE2}", "<var>base2</var>")
:gsub("{BASE_EXPL}", "<code><var>base</var></code> is the base lemma from which this term is derived")
:gsub("{BASE_BASE2_EXPL}", "<code><var>base</var></code> and <code><var>base2</var></code> are the " ..
"base lemmas from which this term is derived")
) .. "."
if additional then
additional = additional .. "\n\n" .. what_categorizes_msg
else
additional = what_categorizes_msg
end
end
return {
description = "{{{langname}}} " .. pos .. " " .. desc[affixtype] .. " " .. require("Module:links").full_link({
lang = data.lang, term = display_term, alt = display_alt, sc = sc, id = id, tr = display_tr, ts = display_ts}, "term") .. ".",
additional = additional,
breadcrumb = pos == "terms" and m_script_utilities.tag_text(display_alt or display_term, data.lang, sc, "term") .. id_text or pos,
displaytitle = "{{{langname}}} " .. labelpref .. m_script_utilities.tag_text(term, data.lang, sc, "term") .. id_text,
parents = parents,
umbrella = false,
}, true -- true = args handled
end
end)
return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers}