Modul:category tree/affixes and compounds
Penampilan
- Berikut merupakan pendokumenan yang dijana oleh Templat:category tree data submodule documentation. [sunting]
- Pautan berguna: akar laman • sublaman akar laman • 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/data/doc.
local labels = {}
local raw_categories = {}
local handlers = {}
-----------------------------------------------------------------------------
-- --
-- LABELS --
-- --
-----------------------------------------------------------------------------
labels["Kata majmuk aliteratif"] = {
description = "Frasa nama bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang beraliteratif.",
parents = {"Kata majmuk", "Frasa aliteratif"},
}
labels["Kata majmuk antonim"] = {
description = "kata majmuk bahasa {{{langname}}} yang sebahagiannya merupakan antonim kepada yang lain.",
parents = {"Kata majmuk dvandva", sort = "antonim"},
}
labels["Kata 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", "Kata majmuk eksosentrik"},
}
-- Add "compound POS" categories for various parts of speech.
local compound_poses = {
"Kata sifat",
"Adverba",
"Kata hubung",
"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[pos .. " majmuk"] = {
description = pos .. "bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar.",
parents = {{name = "Kata majmuk", sort = " "}, pos},
}
end
labels["Kata 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 perkataan mengikut etimologi mengikut bahasa",
parents = {"Perkataan mengikut etimologi"},
}
labels["Kata 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["Kata 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["Kata 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 = {"Kata majmuk endosentrik", "Kata majmuk"},
}
labels["Kata 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 = {"Kata majmuk endosentrik", "Kata majmuk kerja-nama"},
}
labels["Kata 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["Kata 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 = {"Kata majmuk eksosentrik", "Kata majmuk kerja-nama"},
}
labels["Kata majmuk karmadharaya"] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang kata dasar utamanya menentukan akhiran kasus itu.",
parents = {"Kata majmuk tatpurusa"},
}
labels["Kata 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 = {"Kata majmuk dvandva"},
}
labels["Kata majmuk berima"] = {
description = "Frasa nama bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang berima.",
parents = {"Kata majmuk", "Frasa berima"},
}
labels["Kata 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 = {"Kata 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 = {"Kata majmuk endosentrik"},
}
labels["Kata majmuk sinonim"] = {
description = "kata majmuk bahasa {{{langname}}} yang sebahagiannya bersinonim dengan yang lain.",
parents = {"Kata majmuk dvandva", sort = "sinonim"},
}
labels["Kata majmuk tatpurusa"] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar",
parents = {"Kata majmuk"},
}
labels["Kata 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 = {"Kata majmuk kerja-objek"},
}
labels["Kata 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["Kata 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 = {"Perkataan mengikut 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["Kata majmuk vyadhikarana"] = {
description = "istilah bahasa {{{langname}}} yang terdiri daripada dua atau lebih kata dasar yang apabila kata dasar bukan utama menentukan akhiran kasus.",
parents = {"Kata majmuk tatpurusa"},
}
for _, fixtype in ipairs({"apitan", "sisipan", "jalinan", "awalan", "akhiran",}) do
labels["Perkataan mengikut " .. fixtype] = {
description = "Perkataan bahasa {{{langname}}} yang dikategori berdasarkan " .. fixtype .. ".",
umbrella_parents = "Subkategori perkataan mengikut etimologi mengikut bahasa",
parents = {{name = "Perkataan mengikut etimologi", sort = 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 = "Subkategori perkataan mengikut etimologi mengikut bahasa", sort = " "},
},
}
-----------------------------------------------------------------------------
-- --
-- HANDLERS --
-- --
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
------------------------------ Affix handlers -------------------------------
-----------------------------------------------------------------------------
table.insert(handlers, function(data)
-- First try the old pattern for backwards compatibility
local labelpref, pos, affixtype, term_and_id = data.label:match("^(([a-z -]+) dengan ([a-z]+an) )(.+)$")
-- If that didn't work, try the "bahasa [language]" pattern
if not affixtype then
-- Pattern: "Perkataan dengan [affixtype] [term] bahasa [language]"
labelpref, affixtype, term_and_id = data.label:match("^(Perkataan dengan ([a-z]+an) )(.+)$")
if affixtype and term_and_id then
-- Remove " bahasa [language]" from the end of term_and_id
term_and_id = term_and_id:match("^(.+) bahasa [^%s]+$") or term_and_id
pos = "Perkataan" -- Default to "terms" since there's no specific POS
end
end
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 = {
["awalan"] = "bermula dengan awalan",
["akhiran"] = "berhujung dengan akhiran",
["apitan"] = "dikurung dengan apitan",
["sisipan"] = "dipisah dengan sisipan",
["jalinan"] = "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 = {
["awalan"] = "{{tl|af|{LANG}|{TERM_AND_ID}|{BASE}{POS}}} atau {{tl|affix|{LANG}|{TERM_AND_ID}|{BASE}{POS}}} (atau padanan yang lebih spesifik dan kurang digalakkan {{tl|pre}} atau {{tl|prefix}}), dengan {BASE_EXPL}",
["akhiran"] = "{{tl|af|{LANG}|{BASE}|{TERM_AND_ID}{POS}}} atau {{tl|affix|{LANG}|{BASE}|{TERM_AND_ID}{POS}}} (atau padanan yang lebih spesifik dan kurang digalakkan {{tl|suf}} atau {{tl|suffix}}), dengan {BASE_EXPL}",
["apitan"] = "{{tl|af|{LANG}|{BASE}|{TERM_AND_ID}{POS}}} atau {{tl|affix|{LANG}|{BASE}|{TERM_AND_ID}{POS}}}, dengan {BASE_EXPL}",
["sisipan"] = "{{tl|infix|{LANG}|{BASE}|{TERM_AND_ID}{POS}}}, dengan {BASE_EXPL}",
["jalinan"] = "{{tl|af|{LANG}|{BASE}|{TERM_AND_ID}{POS}|{BASE2}}} atau {{tl|affix|{LANG}|{BASE}|{TERM_AND_ID}|{BASE2}{POS}}}, dengan {BASE_BASE2_EXPL}",
}
local args = require("Module:parameters").process(data.args, {
["alt"] = true,
["sc"] = true,
["sort"] = true,
["tr"] = true,
["ts"] = true,
})
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 == "Perkataan" then
table.insert(parents, {name = labelpref .. term, sort = id, args = args})
else
table.insert(parents, {name = "Perkataan dengan " .. affixtype .. 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 ~= "Perkataan" then
table.insert(parents, {name = "Perkataan dengan " .. affixtype .. term, sort = pos, args = args})
end
table.insert(parents, {name = "Perkataan mengikut " .. 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 = "Perkataan yang diletakkan di bawah kategori ini menggunakan " .. (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 == "Perkataan" and "" or ("|pos=%s"):format(pos)))
:gsub("{BASE}", "<var>base</var>")
:gsub("{BASE2}", "<var>base2</var>")
:gsub("{BASE_EXPL}", "<code><var>base</var></code> merupakan bentuk dasar lema yang menerbitkan perkataan ini")
:gsub("{BASE_BASE2_EXPL}", "<code><var>base</var></code> dan <code><var>base2</var></code> merupakan " ..
"bentuk dasar lema yang menerbitkan perkataan ini")
) .. "."
if additional then
additional = additional .. "\n\n" .. what_categorizes_msg
else
additional = what_categorizes_msg
end
end
return {
description = pos .. " bahasa {{{langname}}} " .. 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 == "Perkataan" and m_script_utilities.tag_text(display_alt or display_term, data.lang, sc, "term") .. id_text or pos,
displaytitle = labelpref .. m_script_utilities.tag_text(term, data.lang, sc, "term") .. id_text .. " bahasa {{{langname}}}",
parents = parents,
umbrella = false,
}, true -- true = args handled
end
end)
return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers}