Modul:category tree/etymology
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 = {}
local raw_handlers = {}
local en_utilities_module = "Module:en-utilities"
local m_str_utils = require("Module:string utilities")
local add_indefinite_article = require(en_utilities_module).add_indefinite_article
local full_link = require("Module:links").full_link
local get_lang_by_name = require("Module:languages").getByCanonicalName
local insert = table.insert
local pattern_escape = m_str_utils.pattern_escape
local plain_gsub = m_str_utils.plain_gsub
local pluralize_pos = require("Module:headword").pluralize_pos
local pos_lemma_or_nonlemma = require("Module:headword").pos_lemma_or_nonlemma
local serial_comma_join = require("Module:table").serialCommaJoin
local tag_text = require("Module:script utilities").tag_text
local umatch = mw.ustring.match
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-----------------------------------------------------------------------------
-- --
-- LABELS --
-- --
-----------------------------------------------------------------------------
labels["Perkataan mengikut etimologi"] = {
description = "Istilah bahasa {{{langname}}} yang dikategorikan mengikut etimologinya.",
umbrella_parents = "Asas",
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["AABB-type reduplications"] = {
description = "{{{langname}}} terms that underwent [[reduplication]] in an AABB pattern.",
breadcrumb = "AABB-type",
parents = {"reduplications"},
}
labels["apophonic reduplications"] = {
description = "{{{langname}}} terms that underwent [[reduplication]] with only a change in a vowel sound.",
breadcrumb = "apophonic",
parents = {"reduplications"},
}
labels["back-formations"] = {
description = "{{{langname}}} terms formed by reversing a supposed regular formation, removing part of an older term.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Paduan"] = {
description = "Perkataan bahasa {{{langname}}} yang dibentuk melalui gabungan berbilang perkataan.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Kata pinjaman"] = {
description = "Perkataan bahasa {{{langname}}} yang merupakan kata pinjaman, yakni istilah yang diserapkan secara langsung daripada bahasa lain.",
parents = {"Perkataan mengikut etimologi"},
}
labels["catachreses"] = {
description = "{{{langname}}} terms derived from misuses or misapplications of other terms.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Kata ciptaan"] = {
description = "{{{langname}}} terms coined by an identifiable person, organization or other such entity.",
parents = {"terms attributed to a specific source"},
umbrella_parents = {name = "terms attributed to a specific source", is_label = true, sort = " "},
}
labels["coordinated pairs"] = {
description = "Terms in {{{langname}}} consisting of a pair of terms joined by a [[coordinating conjunction]].",
parents = {"Perkataan mengikut etimologi"},
}
labels["coordinated triples"] = {
description = "Terms in {{{langname}}} consisting of three terms joined by one or more [[coordinating conjunction]]s.",
parents = {"Perkataan mengikut etimologi"},
}
labels["coordinated quadruples"] = {
description = "Terms in {{{langname}}} consisting of four terms joined by one or more [[coordinating conjunction]]s.",
parents = {"Perkataan mengikut etimologi"},
}
labels["coordinated quintuples"] = {
description = "Terms in {{{langname}}} consisting of five terms joined by one or more [[coordinating conjunction]]s.",
parents = {"Perkataan mengikut etimologi"},
}
labels["denominals"] = {
description = "{{{langname}}} terms derived from a noun.",
parents = {"Perkataan mengikut etimologi"},
}
labels["deverbals"] = {
description = "{{{langname}}} terms derived from a verb.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Bentuk kembar"] = {
description = "Juga dikenali sebagai '''dublet''' bahasa {{{langname}}}, yang melibatkan suatu perkataan bahasa {{{langname}}} yang apabila etimologinya dijejaki adalah berasal daripada sumber yang sama seperti perkataan lagi satu yang terdapat dalam bahasa yang sama, tetapi melalui laluan perkembangan yang berbeza, dan selalunya dengan makna yang sama ada halus bezanya ataupun jauh bezanya.",
parents = {"Perkataan mengikut etimologi"},
}
labels["elongated forms"] = {
description = "{{{langname}}} terms where one or more letters or sounds is repeated for emphasis or effect.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Eponim"] = {
description = "Perkataan {{{langname}}} yang diterbitkan daripada nama orang sebenar atau cereka.",
parents = {"Perkataan mengikut etimologi"},
}
labels["genericized trademarks"] = {
description = "{{{langname}}} terms that originate from [[trademark]]s, [[brand]]s and company names which have become [[genericized]]; that is, fallen into common usage in the target market's [[vernacular]], even when referring to other competing brands.",
parents = {"Perkataan mengikut etimologi", "trademarks"},
}
labels["ghost words"] = {
description = "{{{langname}}} terms that were originally erroneous or fictitious, published in a reference work as if they were genuine as a result of typographical error, misreading, or misinterpretation, or as [[:w:Fictitious entry|fictitious entries]], jokes, or hoaxes.",
parents = {"Perkataan mengikut etimologi"},
}
labels["gramograms"] = {
description = "{{{langname}}} [[gramogram]]s – terms that are partially or completely spelled with [[homophone|homophonous]] letters.",
parents = {"rebuses"},
}
labels["haplological words"] = {
description = "{{{langname}}} words that underwent [[haplology]]: thus, their origin involved a loss or omission of a repeated sequence of sounds.",
parents = {"Perkataan mengikut etimologi"},
}
labels["homophonic translations"] = {
description = "{{{langname}}} terms that were borrowed by matching the etymon phonetically, without regard for the sense; compare [[phono-semantic matching]] and [[Hobson-Jobson]].",
parents = {"Perkataan mengikut etimologi"}
}
labels["hybridisms"] = {
description = "{{{langname}}} terms formed by elements of different linguistic origins.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Kata warisan"] = {
description = "Perkataan bahasa {{{langname}}} yang diwariskan daripada tahap perkembangan bahasa tersebut yang lebih awal.",
parents = {"Perkataan mengikut etimologi"},
}
labels["internationalisms"] = {
description = "{{{langname}}} loanwords which also exist in many other languages with the same or similar etymology.",
additional = "Terms should be here preferably only if the immediate source language is not known for certain. Entries are added into this category by [[Template:internationalism]]; see it for more information.",
parents = {"Perkataan mengikut etimologi"},
}
labels["legal doublets"] = {
description = "{{{langname}}} legal [[doublet]]s – a legal doublet is a standardized phrase commonly used in legal documents, proceedings etc. which includes two words that are near synonyms.",
parents = {"coordinated pairs"},
}
labels["legal triplets"] = {
description = "{{{langname}}} legal [[triplet]]s – a legal triplet is a standardized phrase commonly used in legal documents, proceedings etc which includes three words that are near synonyms.",
parents = {"coordinated triples"},
}
labels["LLM coinages"] = {
description = "{{{langname}}} terms that have been coined by {{w|large language models}} rather than humans.",
parents = {"Perkataan mengikut etimologi"},
}
labels["merisms"] = {
description = "{{{langname}}} [[merism]]s – terms that are [[coordinate]]s that, combined, are a synonym for a totality.",
parents = {"coordinated pairs"},
}
labels["Metonim"] = {
description = "Perkataan bahasa {{{langname}}} di mana asal perkataannya terbit daripada nama sesuatu yang terkait dengan benda atau konsep yang dirujuk.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Neologisme"] = {
description = "Istilah bahasa {{{langname}}} yang diiktirad baru-baru ini.",
parents = {"Perkataan mengikut etimologi"},
}
labels["nonce terms"] = {
description = "{{{langname}}} terms that have been invented for a single occasion.",
parents = {"Perkataan mengikut etimologi"},
}
labels["number homophones"] = {
description = "{{{langname}}} terms that are partially or completely spelled with [[homophone|homophonous]] numbers.",
parents = {"rebuses", "terms spelled with numbers"},
}
labels["numerical contractions"] = {
description = "{{{langname}}} numerical contractions. In these, the number either denotes omitted characters ({{m+|en|globalization}} → {{m|en|g11n}}) or duplication ({{m+|kne|Kankanaey}} → {{m|kne|Kan2aey}}).",
parents = {"contractions", "rebuses", "terms spelled with numbers"},
}
labels["Onomatopeia"] = {
description = "Perkataan bahasa {{{langname}}} yang terbit daripada bunyi benda yang diwakilinya.",
parents = {"Perkataan mengikut etimologi"},
}
labels["piecewise doublets"] = {
description = "{{{langname}}} terms that are [[Appendix:Glossary#piecewise doublet|piecewise doublets]].",
parents = {"Perkataan mengikut etimologi"},
}
for _, ism_and_langname in ipairs({
{"anglicisms", "English"},
{"Arabisms", "Arabic"},
{"Gallicisms", "French"},
{"Germanisms", "German"},
{"Hispanisms", "Spanish"},
{"Italianisms", "Italian"},
{"Latinisms", "Latin"},
{"Japonisms", "Japanese"},
}) do
local ism, langname = unpack(ism_and_langname)
labels["pseudo-" .. ism] = {
description = "{{{langname}}} terms that appear to be " .. langname .. ", but are not used or have an unrelated meaning in " .. langname .. " itself.",
parents = {"pseudo-loans"},
umbrella_parents = {name = "pseudo-loans", is_label = true, sort = " "},
}
end
labels["rebracketings"] = {
description = "{{{langname}}} terms that have interacted with another word in such a way that the boundary between the words has been modified.",
parents = {"Perkataan mengikut etimologi"}
}
labels["rebuses"] = {
description = "{{{langname}}} [[rebus]]es – terms that are partially or completely represented by images, symbols or numbers, often as a form of wordplay.",
parents = {"Perkataan mengikut etimologi"},
}
labels["reconstructed terms"] = {
description = "{{{langname}}} terms that are not directly attested, but have been reconstructed through other evidence.",
parents = {"Perkataan mengikut etimologi"}
}
labels["reduplicated coordinated pairs"] = {
description = "{{{langname}}} reduplicated coordinated pairs.",
breadcrumb = "reduplicated",
parents = {"coordinated pairs", "reduplications"},
}
labels["reduplicated coordinated triples"] = {
description = "{{{langname}}} reduplicated coordinated triples.",
breadcrumb = "reduplicated",
parents = {"coordinated triples", "reduplications"},
}
labels["reduplicated coordinated quadruples"] = {
description = "{{{langname}}} reduplicated coordinated quadruples.",
breadcrumb = "reduplicated",
parents = {"coordinated quadruples", "reduplications"},
}
labels["reduplicated coordinated quintuples"] = {
description = "{{{langname}}} reduplicated coordinated quintuples.",
breadcrumb = "reduplicated",
parents = {"coordinated quintuples", "reduplications"},
}
labels["reduplications"] = {
description = "{{{langname}}} terms that underwent [[reduplication]], so their origin involved a repetition of roots or stems.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Retronim"] = {
description = "Perkataan bahasa {{{langname}}} yang berfungsi sebagai nama unik baharu untuk objek atau konsep lama yang nama sebelumnya menjadi samar.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Akar"] = {
description = "Morfem asas yang dari mana terbitnya perkataan-perkataan bahasa {{{langname}}}.",
parents = {"Perkataan mengikut etimologi", "Morfem"},
}
labels["Sanskritic formations"] = {
description = "{{{langname}}} terms coined from [[tatsama]] [[word]]s and/or [[affix]]es.",
parents = {"Perkataan mengikut etimologi", "terms derived from Sanskrit"},
}
labels["sound-symbolic terms"] = {
description = "{{{langname}}} terms that use {{w|sound symbolism}} to express ideas but which are not necessarily strictly speaking [[onomatopoeic]].",
parents = {"Perkataan mengikut etimologi"},
}
labels["spelled-out initialisms"] = {
description = "{{{langname}}} initialisms in which the letter names are spelled out.",
parents = {"Perkataan mengikut etimologi"},
}
labels["spelling pronunciations"] = {
description = "{{{langname}}} terms whose pronunciation was historically or presently affected by their spelling.",
parents = {"Perkataan mengikut etimologi"},
}
labels["spoonerisms"] = {
description = "{{{langname}}} terms in which the initial sounds of component parts have been exchanged, as in \"crook and nanny\" for \"nook and cranny\".",
parents = {"Perkataan mengikut etimologi"},
}
labels["taxonomic eponyms"] = {
description = "{{{langname}}} terms derived from names of real or fictitious people, used for [[taxonomy]].",
parents = {"eponyms"},
}
labels["terms attributed to a specific source"] = {
description = "{{{langname}}} terms coined by an identifiable person or deriving from a known work.",
parents = {"Perkataan mengikut etimologi"},
}
labels["terms coined ex nihilo"] = {
description = "{{{langname}}} terms fabricated ''[[ex nihilo]]'', i.e. made up entirely rather than being derived from an existing source.",
parents = {"Perkataan mengikut etimologi"},
}
labels["terms containing fossilized case endings"] = {
description = "{{{langname}}} terms which preserve case morphology which is no longer analyzable within the contemporary grammatical system or which has been entirely lost from the language.",
parents = {"Perkataan mengikut etimologi"},
}
labels["terms derived from area codes"] = {
description = "{{{langname}}} terms derived from [[area code]]s.",
parents = {"Perkataan mengikut etimologi"},
}
labels["perkataan diterbitkan daripada shape of letters"] = {
description = "{{{langname}}} perkataan diterbitkan daripada shape of letters. This can include perkataan diterbitkan daripada shape of any letter in any alphabet.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Perkataan mengikut akar"] = {
description = "Perkataan bahasa {{{langname}}} yang dikategorikan mengikut akar asalnya.",
parents = {"Perkataan mengikut etimologi", {name = "Akar", sort = " "}},
}
labels["terms derived from fiction"] = {
description = "{{{langname}}} terms that originate from works of [[fiction]].",
breadcrumb = "fiction",
parents = {{name = "terms attributed to a specific source", sort = "fiction"}},
}
for _, data in ipairs {
{source="Dickensian works", desc="the works of [[w:Charles Dickens|Charles Dickens]]", topic_parent="Charles Dickens"},
{source="DC Comics", desc="[[w:DC Comics|DC Comics]]"},
{source="Doraemon", desc="[[w:Fujiko F. Fujio|Fujiko F. Fujio]]'s ''[[w:Doraemon|Doraemon]]''", displaytitle="''Doraemon''"},
{source="Dragon Ball", desc="[[w:Akira Toriyama|Akira Toriyama]]'s ''[[w:Dragon Ball|Dragon Ball]]''", displaytitle="''Dragon Ball''"},
{source="Duckburg and Mouseton", desc="[[w:The Walt Disney Company|Disney]]'s [[w:Duck universe|Duckburg]] and [[w:Mickey Mouse universe|Mouseton]] universe",
topic_parent="Disney"},
{source="Futurama", desc="the animated television series ''{{w|Futurama}}''", displaytitle = "''Futurama''"},
{source="Harry Potter", desc="the ''[[w:Harry Potter|Harry Potter]]'' series", displaytitle="''Harry Potter''",
topic_parent="Harry Potter"},
{source="Looney Tunes and Merrie Melodies", desc="''{{w|Looney Tunes}}'' and/or ''{{w|Merrie Melodies}}'', by {{w|Warner Bros. Animation}}", displaytitle = "''Looney Tunes'' and ''Merrie Melodies''"},
{source="Nineteen Eighty-Four", desc="[[w:George Orwell|George Orwell]]'s ''[[w:Nineteen Eighty-Four|Nineteen Eighty-Four]]''",
displaytitle="''Nineteen Eighty-Four''"},
{source="Seinfeld", desc="the American television sitcom ''{{w|Seinfeld}}'' (1989–1998)", displaytitle="''Seinfeld''"},
{source="Seussian works", desc="the works of [[w:Dr. Seuss|Dr. Seuss]]", topic_parent="Dr. Seuss"},
{source="South Park", desc="the animated television series ''[[w:South Park|South Park]]''", displaytitle="''South Park''"},
{source="Star Trek", desc="''[[w:Star Trek|Star Trek]]''", displaytitle="''Star Trek''", topic_parent="Star Trek"},
{source="Star Wars", desc="''[[w:Star Wars|Star Wars]]''", displaytitle="''Star Wars''", topic_parent="Star Wars"},
{source="The Simpsons", desc="''[[w:The Simpsons|The Simpsons]]''", displaytitle="''The Simpsons''", topic_parent="The Simpsons", sort="Simpsons"},
{source="Tolkien's legendarium", desc="the [[legendarium]] of [[w:J. R. R. Tolkien|J. R. R. Tolkien]]", topic_parent="J. R. R. Tolkien"},
} do
local parents = {{name = "terms derived from fiction", sort = data.sort or data.source}}
local umbrella_parents = {"Subkategori perkataan mengikut etimologi mengikut bahasa"}
if data.topic_parent then
insert(parents, {name = "{{{langcode}}}:" .. data.topic_parent, raw = true})
insert(umbrella_parents, {name = data.topic_parent, raw = true})
end
labels["Perkataan diterbitkan daripada " .. data.source] = {
description = "Istilah bahasa {{{langname}}} yang berasal daripada " .. data.desc .. ".",
breadcrumb = data.displaytitle or data.source,
parents = parents,
umbrella = {
parents = umbrella_parents,
displaytitle = data.displaytitle and "Perkataan diterbitkan daripada " .. data.displaytitle .. " mengikut bahasa" or nil,
breadcrumb = data.displaytitle and "Perkataan diterbitkan daripada " .. data.displaytitle,
},
displaytitle = data.displaytitle and "Perkataan bahasa {{{langname}}} diterbitkan daripada " .. data.displaytitle or nil,
}
end
labels["terms derived from Greek mythology"] = {
description = "{{{langname}}} terms derived from Greek mythology which have acquired an idiomatic meaning.",
breadcrumb = "Greek mythology",
parents = {{name = "terms attributed to a specific source", sort = "Greek mythology"}},
}
labels["terms derived from occupations"] = {
description = "{{{langname}}} terms derived from names of occupations.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Perkataan diterbitkan daripada bahasa lain"] = {
description = "Istilah bahasa {{{langname}}} yang berasal daripada bahasa-bahasa lain.",
lang_position = "mid",
label_before = "Perkataan",
label_after = "diterbitkan daripada bahasa lain",
parents = {"Perkataan mengikut etimologi"},
}
labels["perkataan diterbitkan daripada Bible"] = {
description = "{{{langname}}} terms that originate from the [[Bible]].",
breadcrumb = {name = "the Bible", nocap = true},
parents = {{name = "terms attributed to a specific source", sort = "Bible"}},
}
labels["terms derived from Aesop's Fables"] = {
description = "{{{langname}}} terms that originate from [[Aesop]]'s Fables.",
breadcrumb = "Aesop's Fables",
parents = {{name = "terms attributed to a specific source", sort = "Aesop's Fables"}},
}
labels["terms derived from toponyms"] = {
description = "{{{langname}}} terms derived from names of real or fictitious places.",
parents = {"Perkataan mengikut etimologi"},
}
labels["terms derived through romanized wordplay"] = {
description = "{{{langname}}} terms derived through romanized wordplay.",
parents = {"Perkataan mengikut etimologi"},
}
labels["terms making reference to character shapes"] = {
description = "{{{langname}}} terms making reference to character shapes.",
parents = {"Perkataan mengikut etimologi"},
}
labels["terms derived from sports"] = {
description = "{{{langname}}} terms that originate from sports.",
breadcrumb = "sports",
parents = {{name = "terms attributed to a specific source", sort = "sports"}},
}
labels["terms derived from baseball"] = {
description = "{{{langname}}} terms that originate from baseball.",
breadcrumb = "baseball",
parents = {{name = "terms derived from sports", sort = "baseball"}},
}
labels["terms with Indo-Aryan extensions"] = {
description = "{{{langname}}} terms extended with particular [[Indo-Aryan]] [[pleonastic]] affixes.",
parents = {"Perkataan mengikut etimologi"},
}
labels["terms with lemma and non-lemma form etymologies"] = {
description = "{{{langname}}} terms consisting of both a lemma and non-lemma form, of different origins.",
breadcrumb = "lemma and non-lemma form",
parents = {"terms with multiple etymologies"},
}
labels["terms with multiple etymologies"] = {
description = "{{{langname}}} terms that are derived from multiple origins.",
parents = {"Perkataan mengikut etimologi"},
}
labels["terms with multiple lemma etymologies"] = {
description = "{{{langname}}} lemmas that are derived from multiple origins.",
breadcrumb = "multiple lemmas",
parents = {"terms with multiple etymologies"},
}
labels["terms with multiple non-lemma form etymologies"] = {
description = "{{{langname}}} non-lemma forms that are derived from multiple origins.",
breadcrumb = "multiple non-lemma forms",
parents = {"terms with multiple etymologies"},
}
labels["Perkataan dengan etimologi tidak diketahui"] = {
description = "Perkataan bahasa {{{langname}}} dengan etimologi yang belum disahkan.",
parents = {{name = "Perkataan mengikut etimologi", sort = "tidak diketahui"}},
}
labels["univerbations"] = {
description = "{{{langname}}} terms that result from the agglutination of two or more words.",
parents = {"Perkataan mengikut etimologi"},
}
labels["words derived through corruption"] = {
description = "{{{langname}}} words that result from a non-specific or sporadic change.",
parents = {{name = "Perkataan mengikut etimologi", sort = "corruption"}},
}
labels["words derived through metathesis"] = {
description = "{{{langname}}} words that were created through [[metathesis]] from another word.",
parents = {{name = "Perkataan mengikut etimologi", sort = "metathesis"}},
}
labels["words that have undergone semantic shift"] = {
description = "{{{langname}}} words that show senses explained by [[semantic shift]].",
parents = {{name = "Perkataan mengikut etimologi", sort = "semantic shift"}},
}
labels["words that have undergone semantic broadening"] = {
description = "{{{langname}}} words that show senses explained by [[semantic]] [[broadening]].",
parents = {{name = "words that have undergone semantic shift", sort = "semantic broadening"}},
}
labels["words that have undergone semantic narrowing"] = {
description = "{{{langname}}} words that show senses explained by [[semantic]] [[narrowing]].",
parents = {{name = "words that have undergone semantic shift", sort = "semantic narrowing"}},
}
labels["words that have undergone amelioration"] = {
description = "{{{langname}}} words that have gained a positive [[connotation]] over time.",
parents = {{name = "words that have undergone semantic shift", sort = "amelioration"}},
}
labels["words that have undergone pejoration"] = {
description = "{{{langname}}} words that have gained a negative [[connotation]] over time.",
parents = {{name = "words that have undergone semantic shift", sort = "pejoration"}},
}
labels["terms with origins in folklore"] = {
description = "{{{langname}}} terms that have an etymology rooted in folklore.",
breadcrumb = "Folklore",
parents = {{name = "Perkataan mengikut etimologi", sort = "folklore"}, {name = "{{{langcode}}}:Folklore", raw = true}},
umbrella_parents = {{name = "Subkategori perkataan mengikut etimologi mengikut bahasa", raw = true}, {name = "Folklore", raw = true, sort = " "}}
}
-- Add 'umbrella_parents' key if not already present.
for _, data in pairs(labels) do
-- NOTE: umbrella.parents overrides umbrella_parents if both are given.
if not data.umbrella_parents then
data.umbrella_parents = "Subkategori perkataan mengikut etimologi mengikut bahasa"
end
end
-----------------------------------------------------------------------------
-- --
-- RAW CATEGORIES --
-- --
-----------------------------------------------------------------------------
raw_categories["Subkategori perkataan mengikut etimologi mengikut bahasa"] = {
description = "Metakategori payung yang merangkumi topik berkaitan perkataan yang dikategorikan mengikut etimologinya seperti jenis kata majmuk atau pinjaman.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Metakategori payung",
{name = "Perkataan mengikut etimologi", is_label = true, sort = " "},
},
}
raw_categories["Subkategori kata pinjaman mengikut bahasa"] = {
description = "Kategori payung meliputi topik berkenaan kata pinjaman.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Metakategori payung",
{name = "Kata pinjaman", is_label = true, sort = " "},
{name = "Subkategori perkataan mengikut etimologi mengikut bahasa", sort = " "},
},
}
raw_categories["Subkategori kata warisan mengikut bahasa"] = {
description = "Kategori payung meliputi topik berkenaan kata warisan.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Metakategori payung",
{name = "Kata warisan", is_label = true, sort = " "},
{name = "Subkategori perkataan mengikut etimologi mengikut bahasa", sort = " "},
},
}
raw_categories["Indo-Aryan extensions"] = {
description = "Umbrella categories covering terms extended with particular [[Indo-Aryan]] [[pleonastic]] affixes.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Metakategori payung",
{name = "Subkategori perkataan mengikut etimologi mengikut bahasa", sort = " "},
},
}
raw_categories["Multiple etymology subcategories by language"] = {
description = "Kategori payung meliputi topik berkenaan terms with multiple etymologies.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Metakategori payung",
{name = "Subkategori perkataan mengikut etimologi mengikut bahasa", sort = " "},
},
}
raw_categories["Perkataan dipinjam balik ke dalam bahasa yang sama"] = {
description = "Categories with terms in specific languages that were borrowed from a second language that previously borrowed the term from the first language.",
additional = "A well-known example is {{m+|en|salaryman}}, a term borrowed from Japanese which in turn was borrowed from the English words [[salary]] and [[man]].\n\n{{{umbrella_msg}}}",
parents = "Subkategori perkataan mengikut etimologi mengikut bahasa",
}
-----------------------------------------------------------------------------
-- --
-- HANDLERS --
-- --
-----------------------------------------------------------------------------
local function get_source(source_name, allow_family, name_type)
local source = get_lang_by_name(source_name, nil, true, allow_family)
if source == nil then
return nil
end
local form = source[name_type](source)
if form == source_name or
mw.getContentLanguage():lcfirst(form) == mw.getContentLanguage():lcfirst(source_name) then
return source
end
end
local function get_source_and_type_desc(source, term_type)
if source:getCode() == "ine-pro" and term_type:find("^roots?$") then
return "[[w:Akar bahasa Indo Eropah Purba|" .. term_type .. " bahasa Indo Eropah Purba]]"
end
return "[[w:" .. source:getWikipediaArticle() .. "|" .. source:getCanonicalName() .. "]] " .. term_type
end
local function get_source_and_source_desc(source_name)
local source_desc
if source_name == "taxonomic names" then
source_name = "taxonomic name"
source_desc = "[[w:Tatanama taksonomi|nama taksonomi]]"
end
local source = get_source(source_name, true, "getDisplayForm")
if source == nil then
return
end
source_desc = source_desc or source:makeCategoryLink()
if source:hasType("family") then
source_desc = "yang merupakan salah satu daripada " .. source_desc
end
return source, source_desc
end
local function lang_is_semitic(lang)
return lang:inFamily("sem")
end
-----------------------------------------------------------------------------
------------------------------- Word handlers -------------------------------
-----------------------------------------------------------------------------
insert(handlers, function(data)
local labelpref, word_and_id = data.label:match("^([Pp]erkataan milik perkataan )(.+)$")
if not word_and_id then
return
end
local word, id = word_and_id:match("^(.+) %((.-)%)$")
if not word then
word = word_and_id
end
local is_semitic = lang_is_semitic(data.lang)
local word_desc = is_semitic and "[[w:Semitic word|perkataan]]" or "perkataan"
local parents = {}
if id then
insert(parents, {name = labelpref .. word, sort = id})
end
insert(parents, {name = "Perkataan mengikut perkataan", sort = word_and_id})
local separators = "־ %-"
local separator_c = "[" .. separators .. "]"
local not_separator_c = "[^" .. separators .. "]"
local word_no_prefix_suffix =
mw.ustring.gsub(mw.ustring.gsub(word, separator_c .. "$", ""), "^" .. separator_c, "")
local num_sep = mw.ustring.len(mw.ustring.gsub(word_no_prefix_suffix, not_separator_c, ""))
local linked_word = data.lang and full_link({ term = word, lang = data.lang, gloss = id, id = id }, "term") or word
if num_sep > 0 then
insert(parents, {name = "Perkataan dengan " .. (num_sep + 1) .. " huruf", sort = word_and_id})
end
local function displaytitle(title, lang)
return plain_gsub(title, word, tag_text(word, lang, nil, "term"))
end
local breadcrumb = tag_text(word, data.lang, nil, "term") .. (id and " (" .. id .. ")" or "")
return {
description = "{{{langname}}} perkataan yang tergolong dalam " .. word_desc .. " " .. linked_word .. ".",
displaytitle = displaytitle,
breadcrumb = breadcrumb,
lang_position = "mid",
label_before = "Perkataan",
label_after = "milik perkataan " .. word_and_id,
parents = parents,
umbrella = false,
}
end)
insert(handlers, function(data)
local source_name = data.label:match("^[Pp]erkataan mengikut perkataan bahasa (.+)$")
if not source_name then
return
end
local source = get_source(source_name, false, "getCanonicalName")
if not source then
return
end
local parents = {"Perkataan mengikut etimologi"}
if not data.lang or data.lang:getCode() ~= source:getCode() then
insert(parents, "Perkataan diterbitkan daripada bahasa " .. source_name)
end
return {
description = "Istilah bahasa {{{langname}}} yang dikategorikan berdasarkan asal " .. get_source_and_type_desc(source, "perkataan") .. ".",
lang_position = "mid",
label_before = "Perkataan",
label_after = "mengikut perkataan bahasa " .. source_name,
parents = parents,
umbrella_parents = "Subkategori perkataan mengikut etimologi mengikut bahasa",
}
end)
-----------------------------------------------------------------------------
------------------------------- Root handlers -------------------------------
-----------------------------------------------------------------------------
-- Handler for e.g. [[:Category:Yola perkataan diterbitkan daripada akar bahasa Proto-Indo-European *h₂el- (grow)]]
-- and corresponding umbrella categories.
insert(handlers, function(data)
local source_name, term_type, term_and_id
for _, tt in ipairs{"akar", "word", "perkataan"} do
source_name, term_and_id = data.label:match("^[Pp]erkataan diterbitkan daripada " .. tt .. " bahasa (.+) (.+)$")
if source_name then
term_type = tt
break
end
end
if not source_name then
return
end
local term, id = term_and_id:match("^(.+) %((.-)%)$")
if not term then
term = term_and_id
end
local source = get_source(source_name, false, "getCanonicalName")
if not source then
return
end
local parents = {
{
name = "Perkataan mengikut " .. term_type .. " bahasa " .. source_name,
sort = (source:makeSortKey(term)),
}
}
local umbrella_parents = {
{
name = "Perkataan diterbitkan daripada " .. term_type .. " bahasa " .. source_name,
sort = (source:makeSortKey(term)),
}
}
if id then
insert(parents, {
name = "Perkataan diterbitkan daripada " .. term_type .. " bahasa " .. source_name .. " " .. term,
sort = " "
})
insert(umbrella_parents, {
name = "Perkataan diterbitkan daripada " .. term_type .. " bahasa " .. source_name .. " " .. term,
is_label = true,
sort = " "
})
end
local function displaytitle(title, lang)
return plain_gsub(title, term, tag_text(term, source, nil, "term"))
end
local breadcrumb = tag_text(term, source, nil, "term") .. (id and " (" .. id .. ")" or "")
local term_page, alt_form
if term_type == "akar" and lang_is_semitic(source) then
term_page = ("Lampiran:Akar %s/%s"):format(source:getCanonicalName(), term)
alt_form = term
else
term_page = term
end
return {
description = "{{{langname}}} perkataan yang berasal akhirnya daripada " .. get_source_and_type_desc(source, term_type) .. " " .. full_link({
term = term_page,
alt = alt_form,
lang = source,
gloss = id,
id = id
}, "term") .. ".",
displaytitle = displaytitle,
breadcrumb = breadcrumb,
lang_position = "mid",
label_before = "Perkataan",
label_after = "diterbitkan daripada " .. term_type .. " bahasa " .. source_name .. " " .. term_and_id,
parents = parents,
umbrella = {
no_by_language = true,
displaytitle = displaytitle,
breadcrumb = breadcrumb,
parents = umbrella_parents,
}
}
end)
insert(handlers, function(data)
local labelpref, root_and_id = data.label:match("^([Pp]erkataan milik akar )(.+)$")
if not root_and_id then
return
end
local root, id = root_and_id:match("^(.+) %((.-)%)$")
if not root then
root = root_and_id
end
local is_semitic = lang_is_semitic(data.lang)
local root_desc = is_semitic and "[[w:Semitic root|akar]]" or "akar"
local parents = {}
if id then
insert(parents, {name = labelpref .. root, sort = id})
end
insert(parents, {name = "Perkataan mengikut akar", sort = root_and_id})
local separators = "־ %-"
local separator_c = "[" .. separators .. "]"
local not_separator_c = "[^" .. separators .. "]"
local root_no_prefix_suffix =
mw.ustring.gsub(mw.ustring.gsub(root, separator_c .. "$", ""), "^" .. separator_c, "")
local num_sep = mw.ustring.len(mw.ustring.gsub(root_no_prefix_suffix, not_separator_c, ""))
local root_page, alt_form
if is_semitic then
root_page = ("Lampiran:Akar bahasa %s/%s"):format(data.lang:getCanonicalName(), root)
alt_form = root
else
root_page = root
end
local linked_root = data.lang and full_link(
{ term = root_page, alt = alt_form, lang = data.lang, gloss = id, id = id }, "term") or root_page
if num_sep > 0 then
insert(parents, {name = "Akar " .. (num_sep + 1) .. " huruf", sort = root_and_id})
end
local function displaytitle(title, lang)
return plain_gsub(title, root, tag_text(root, lang, nil, "term"))
end
local breadcrumb = tag_text(root, data.lang, nil, "term") .. (id and " (" .. id .. ")" or "")
return {
description = "Perkataan bahasa {{{langname}}} dalam " .. root_desc .. " " .. linked_root .. ".",
displaytitle = displaytitle,
breadcrumb = breadcrumb,
lang_position = "mid",
label_before = "Perkataan",
label_after = "akar " .. root_and_id,
parents = parents,
umbrella = false,
}
end)
insert(handlers, function(data)
local source_name = data.label:match("^[Pp]erkataan mengikut akar bahasa (.+)$")
or data.label:match("^[Pp]erkataan mengikut akar (.+)$")
if not source_name then
return
end
local source = get_source(source_name, false, "getCanonicalName")
if not source then
return
end
local parents = {"Perkataan mengikut etimologi"}
if not data.lang or data.lang:getCode() ~= source:getCode() then
insert(parents, "Perkataan diterbitkan daripada bahasa " .. source_name)
end
return {
description = "Istilah bahasa {{{langname}}} yang dikategorikan berdasarkan " .. get_source_and_type_desc(source, "akar") .. " asalnya.",
lang_position = "mid",
label_before = "Perkataan",
label_after = "mengikut akar bahasa " .. source_name,
parents = parents,
umbrella_parents = "Subkategori perkataan mengikut etimologi mengikut bahasa",
}
end)
insert(handlers, function(data)
local root_shape, post, additional = data.label:match("^(.+)([ -])shaped roots$")
if not root_shape then
return
elseif data.lang and data.lang:getCode() == "ine-pro" then
additional = [=[
* '''e''' stands for the vowel of the root.
* '''C''' stands for any stop or ''s''.
* '''R''' stands for any resonant.
* '''H''' stands for any laryngeal.
* '''M''' stands for ''m'' or ''w'', when followed by a resonant.
* '''s''' stands for ''s'', when next to a stop.]=]
end
if root_shape == "irregularly" and post == " " then
return {
breadcrumb = "tidak teratur",
description = "Akar bahasa {{{langname}}} yang berbentuk melanggar [[w:Proto-Indo-European root#Shape of a root|peraturan bentuk akar yang diketahui]].",
additional = additional,
lang_position = "mid",
label_before = "Perkataan",
label_after = "akar berbentuk tidak teratur",
parents = {{name = "Akar mengikut bentuk", sort = "*"}},
umbrella = false,
}
elseif post == " " then
return
end
return {
breadcrumb = root_shape,
description = "Akar bahasa {{{langname}}} yang berbentuk ''" .. root_shape .. "''.",
additional = additional,
lang_position = "mid",
label_before = "Perkataan",
label_after = "akar berbentuk " .. root_shape,
parents = {{name = "Akar mengikut bentuk", sort = root_shape}},
umbrella = false,
}
end)
-----------------------------------------------------------------------------
-------------------- Derived/inherited/borrowed handlers --------------------
-----------------------------------------------------------------------------
-- Handler for categories of the form "LANG perkataan diterbitkan daripada bahasa SOURCE".
insert(handlers, function(data)
local source_name = data.label:match("^[Pp]erkataan diterbitkan daripada bahasa (.+)$")
or data.label:match("^[Pp]erkataan diterbitkan daripada (bahasa%-bahasa .+)$")
if not source_name then
return
end
local source, source_desc = get_source_and_source_desc(source_name)
if not source then
return
end
local desc = "Perkataan bahasa {{{langname}}} yang diterbitkan daripada bahasa " .. source_desc .. "."
local additional
if source:hasType("family") then
additional = "Kategori ini sepatutnya hanya mengandungi kategori lain. Entri boleh dikategorikan di sini juga apabila subkategori yang sesuai tidak jelas. " ..
"Jika anda mengetahui bahasa tepat yang menjadi asal sesuatu entri yang dikategorikan di sini, sila sunting entrinya."
end
local derived_from_variety_of_self = false
local parent
local sortkey = source:getDisplayForm()
if source:hasType("etymology-only") then
parent = source:getParent()
if data.lang and source:hasParent(data.lang) then
derived_from_variety_of_self = true
end
if data.lang and (parent:getCode() == data.lang:getCode() or parent:getCode() == "und") then
parent = source:getFamily()
end
else
local fam = source:getFamily()
if fam then
parent = fam
end
end
if (not parent) or parent:getCode() == source:getCode() or parent:getCode() == "qfa-iso" or parent:getCode() == "qfa-not" then
parent = nil
derived_from_variety_of_self = false
else
parent = parent:getDisplayForm()
end
parent = parent and "Perkataan diterbitkan daripada bahasa " .. parent or "Perkataan diterbitkan daripada bahasa lain"
local parents = {{name = parent, sort = sortkey}}
if derived_from_variety_of_self then
insert(parents, "Kategori:Kategori untuk istilah sesuatu bahasa yang diterbitkan daripada istilah ragam bahasa tersebut")
end
local cat_name = source:getCategoryName()
if source:hasType("etymology-only") then
require("Module:category tree/lects").export.register_likely_lect_parent_cat(cat_name)
end
local umbrella_parents = {
source:hasType("family") and {name = cat_name, raw = true, sort = " "} or
{name = cat_name, raw = true, sort = "perkataan diterbitkan daripada"}
}
local breadcrumb = source_name
if source:hasType("family") and breadcrumb:find("^Bahasa-bahasa ") then
local truncated_breadcrumb = breadcrumb:gsub("^Bahasa-bahasa ", "")
if not get_lang_by_name(truncated_breadcrumb, nil, "allow etym") then
breadcrumb = truncated_breadcrumb
end
end
return {
description = desc,
additional = additional,
breadcrumb = breadcrumb,
lang_position = "mid",
label_before = "Perkataan",
label_after = source:hasType("family") and "diterbitkan daripada " ..
mw.getContentLanguage():lcfirst(source:getDisplayForm())
or "diterbitkan daripada bahasa " .. source_name,
parents = parents,
umbrella = {
description = "Kategori dengan perkataan yang berasal daripada bahasa " .. source_desc .. ".",
parents = umbrella_parents,
},
}
end)
-- Handler for categories of the form "LANG perkataan dipinjam/diwariskan daripada bahasa SOURCE".
local function inherited_borrowed_handler(etymtype)
local malay_verb, malay_label
if etymtype == "dipinjam" then
malay_verb = "dipinjam"
malay_label = "Kata pinjaman"
elseif etymtype == "diwariskan" then
malay_verb = "diwariskan"
malay_label = "Kata warisan"
else
malay_verb = etymtype
malay_label = "Perkataan " .. etymtype
end
return function(data)
local source_name =
data.label:match("^[Pp]erkataan " .. malay_verb .. " daripada bahasa (.+)$") or
data.label:match("^[Pp]erkataan " .. malay_verb .. " daripada (.+)$")
if not source_name then
return
end
local source, source_desc = get_source_and_source_desc(source_name)
if not source then
return
end
local derived_label = "Perkataan diterbitkan daripada bahasa " .. source_name
return {
description = "Perkataan bahasa {{{langname}}} yang " .. malay_verb .. " daripada bahasa " .. source_desc .. ".",
breadcrumb = source_name,
lang_position = "mid",
label_before = "Perkataan",
label_after = malay_verb .. " daripada bahasa " .. source_name,
parents = {
{name = malay_label, sort = source_name},
{name = derived_label, sort = " "},
},
umbrella = {
parents = {
{ name = derived_label, is_label = true, sort = " " },
malay_verb == "dipinjam"
and { name = "Subkategori kata pinjaman mengikut bahasa", sort = source_name }
or { name = "Subkategori kata warisan mengikut bahasa", sort = source_name },
}
},
}
end
end
insert(handlers, inherited_borrowed_handler("dipinjam"))
insert(handlers, inherited_borrowed_handler("diwariskan"))
-----------------------------------------------------------------------------
------------------------ Borrowing subtype handlers -------------------------
-----------------------------------------------------------------------------
local function borrowing_subtype_handler(dest, source_name, parent_cat, spec)
local source, source_desc = get_source_and_source_desc(source_name)
if not source then
return
end
local dest_name = dest and dest:getCanonicalName() or "UNKNOWN"
local additional, umbrella_additional
if spec.additional then
if dest then
additional = spec.additional(source, dest)
else
umbrella_additional = spec.umbrella_additional(source)
end
else
if not spec.categorizing_templates then
error("Internal error: Must specify either `categorizing_templates` or the combination of `additional` and `umbrella_additional` in each borrowing subtype spec")
end
local extra_templates = {}
local extra_template_text
for i, template in ipairs(spec.categorizing_templates) do
if i > 1 then
insert(extra_templates, ("{{tl|%s|...}}"):format(template))
end
end
if #extra_templates > 0 then
extra_template_text = (" (atau %s, menggunakan sintaks yang sama)"):format(
serial_comma_join(extra_templates, {conj = "atau"}))
else
extra_template_text = ""
end
if dest then
additional = ("Untuk mengkategorikan istilah ke dalam kategori ini, gunakan {{tl|%s|%s|%s|<var>istilah_sumber</var>}}%s, " ..
"di mana <code><var>istilah_sumber</var></code> ialah istilah %s yang menjadi sumber peminjaman istilah berkenaan."):format(
spec.categorizing_templates[1], dest:getCode(), source:getCode(), extra_template_text, source_name)
else
umbrella_additional = ("Untuk mengkategorikan istilah ke dalam subkategori khusus bahasa, gunakan " ..
"{{tl|%s|<var>kod_dest</var>|%s|<var>istilah_sumber</var>}}%s, di mana <code><var>kod_dest</var></code> " ..
"ialah kod bahasa yang berkaitan (lihat [[Wiktionary:List of languages]]), dan " ..
"<code><var>istilah_sumber</var></code> ialah istilah %s yang menjadi sumber peminjaman."):format(
spec.categorizing_templates[1], source:getCode(), extra_template_text, source_name)
end
end
return {
description = "{{{langname}}} " .. spec.from_source_desc:gsub("SOURCE", source_desc):gsub("DEST", dest_name),
additional = additional,
breadcrumb = source_name,
lang_position = "mid",
label_before = "Perkataan",
label_after = (spec.malay_label_after or parent_cat) .. " daripada bahasa " .. source_name,
parents = {
{ name = parent_cat, sort = source_name },
{ name = "Perkataan dipinjam daripada bahasa " .. source_name, sort = " " },
},
umbrella = {
additional = umbrella_additional,
parents = {
{ name = "Perkataan dipinjam daripada bahasa " .. source_name, is_label = true, sort = " " },
"Subkategori kata pinjaman mengikut bahasa",
}
},
}
end
-- `from_source_desc` describes the category for "LANGUAGE BORTYPE from SOURCE".
-- `umbrella_desc` describes the umbrella category for "LANGUAGE BORTYPE".
-- `uses_subtype_handler` means the catch-all borrowing handler at the bottom covers this type.
-- `umbrella_parent` overrides the default parent ("Kata pinjaman") for the umbrella label.
-- `label_pattern` is the Lua pattern (with one capture = source language) matching the Malay label.
-- `malay_label_after` is the Malay label fragment used in `label_after` for mid-lang categories.
-- `categorizing_templates` lists templates that categorize into this type (first = preferred alias).
-- `additional`/`umbrella_additional` are functions generating the additional text (alternative to
-- `categorizing_templates` for more complex cases like adapted borrowings).
local borrowing_specs = {
["pinjaman terpelajar"] = {
malay_label_after = "dengan pinjaman terpelajar",
from_source_desc = "terms that are learned [[loanword]]s from SOURCE, that is, terms that were directly incorporated from SOURCE instead of through normal language contact.",
umbrella_desc = "terms that are learned [[loanword]]s, that is, terms that were directly incorporated from another language instead of through normal language contact.",
uses_subtype_handler = true,
categorizing_templates = {"lbor", "learned borrowing"},
},
["pinjaman terpelajar separa"] = {
malay_label_after = "dengan pinjaman terpelajar separa",
from_source_desc = "terms that are [[semi-learned borrowing|semi-learned]] [[loanword]]s from SOURCE, that is, terms borrowed from SOURCE (a [[classical language]]) into DEST (a modern language) and partly reshaped based on later [[sound change]]s or by analogy with [[inherit]]ed terms in the language.",
umbrella_desc = "terms that are [[semi-learned borrowing|semi-learned]] [[loanword]]s, that is, terms borrowed from a [[classical language]] into a modern language and partly reshaped based on later [[sound change]]s or by analogy with [[inherit]]ed terms in the language.",
uses_subtype_handler = true,
categorizing_templates = {"slbor", "semi-learned borrowing"},
},
["pinjaman ortografi"] = {
malay_label_after = "dengan pinjaman ortografi",
from_source_desc = "orthographic loans from SOURCE, i.e. terms that were borrowed from SOURCE in their script forms, not their pronunciations.",
umbrella_desc = "orthographic loans, i.e. terms that were borrowed in their script forms, not their pronunciations.",
uses_subtype_handler = true,
categorizing_templates = {"obor", "orthographic borrowing"},
},
["pinjaman tidak tersuai"] = {
malay_label_after = "dengan pinjaman tidak tersuai",
from_source_desc = "[[loanword]]s from SOURCE that have not been conformed to the morpho-syntactic, phonological and/or phonotactical rules of DEST.",
umbrella_desc = "[[loanword]]s that have not been conformed to the morpho-syntactic, phonological and/or phonotactical rules of the target language.",
uses_subtype_handler = true,
categorizing_templates = {"ubor", "unadapted borrowing"},
},
["pinjaman tersuai"] = {
malay_label_after = "dengan pinjaman tersuai",
from_source_desc = "[[loanwords]] from SOURCE formed with the addition of an affix to conform the term to the normal morphology of DEST.",
umbrella_desc = "[[loanword]]s formed with the addition of an affix to conform the term to the normal morphology of the target language.",
uses_subtype_handler = true,
additional = function(source, dest)
return ("Untuk mengkategorikan istilah ke dalam kategori ini, gunakan {{tl|af|%s|3=type=adap|4=%s:<var>istilah_sumber</var>|5=-<var>imbuhan</var>}} " ..
"(atau {{tl|af|%s|3=type=abor|4=...}}, menggunakan sintaks yang sama), di mana <code><var>istilah_sumber</var></code> ialah " ..
"istilah %s yang menjadi sumber peminjaman dan <code><var>imbuhan</var></code> " ..
"ialah imbuhan %s yang digunakan untuk menyesuaikan istilah %s tersebut."):format(
dest:getCode(), source:getCode(), dest:getCode(), source:getCanonicalName(),
dest:getCanonicalName(), source:getCanonicalName())
end,
umbrella_additional = function(source)
return ("Untuk mengkategorikan istilah ke dalam subkategori khusus bahasa, gunakan {{tl|af|<var>kod_dest</var>|3=type=adap|4=%s:<var>istilah_sumber</var>|5=-<var>imbuhan</var>}} " ..
"(atau {{tl|af|<var>kod_dest</var>|3=type=abor|4=...}}, menggunakan sintaks yang sama), di mana " ..
"<code><var>kod_dest</var></code> ialah kod bahasa sasaran (lihat " ..
"[[Wiktionary:List of languages]]); <code><var>istilah_sumber</var></code> ialah istilah %s " ..
"yang menjadi sumber peminjaman; dan <code><var>imbuhan</var></code> ialah imbuhan bahasa sasaran " ..
"yang digunakan untuk menyesuaikan istilah %s tersebut."):format(
source:getCode(), source:getCanonicalName(), source:getCanonicalName())
end,
},
["pinjaman semantik"] = {
malay_label_after = "dengan pinjaman semantik",
from_source_desc = "[[Appendix:Glossary#semantic loan|semantic loans]] from SOURCE, i.e. terms one or more of whose definitions was borrowed from a term in SOURCE.",
umbrella_desc = "[[Appendix:Glossary#semantic loan|semantic loans]], i.e. terms one or more of whose definitions was borrowed from a term in another language.",
umbrella_parent = "Perkataan mengikut etimologi",
categorizing_templates = {"sl", "semantic loan"},
},
["pinjam terjemah separa"] = {
malay_label_after = "dipinjam terjemah separa",
from_source_desc = "terms that were [[Appendix:Glossary#partial calque|partially calqued]] from SOURCE, i.e. terms formed partly by piece-by-piece translations of SOURCE terms and partly by direct borrowing.",
umbrella_desc = "[[Appendix:Glossary#partial calque|partial calques]], i.e. terms formed partly by piece-by-piece translations of terms from other languages and partly by direct borrowing.",
umbrella_parent = "Perkataan mengikut etimologi",
label_pattern = "^[Pp]erkataan dipinjam terjemah separa daripada bahasa (.+)$",
categorizing_templates = {"pcal", "pclq", "partial calque"},
},
["pinjam terjemah"] = {
malay_label_after = "dipinjam terjemah",
from_source_desc = "terms that were [[Appendix:Glossary#calque|calqued]] from SOURCE, i.e. terms formed by piece-by-piece translations of SOURCE terms.",
umbrella_desc = "[[Appendix:Glossary#calque|calques]], i.e. terms formed by piece-by-piece translations of terms from other languages.",
umbrella_parent = "Perkataan mengikut etimologi",
label_pattern = "^[Pp]erkataan dipinjam terjemah daripada bahasa (.+)$",
categorizing_templates = {"cal", "clq", "calque"},
},
["padanan fonosemantik"] = {
malay_label_after = "dengan padanan fonosemantik",
from_source_desc = "[[Appendix:Glossary#phono-semantic matching|phono-semantic matchings]] from SOURCE, i.e. terms that were borrowed by matching the etymon phonetically and semantically.",
umbrella_desc = "[[Appendix:Glossary#phono-semantic matching|phono-semantic matchings]], i.e. terms that were borrowed by matching the etymon phonetically and semantically.",
categorizing_templates = {"psm", "phono-semantic matching"},
},
["pinjaman palsu"] = {
malay_label_after = "dengan pinjaman palsu",
from_source_desc = "[[Appendix:Glossary#pseudo-loan|pseudo-loans]] from SOURCE, i.e. terms that appear to be SOURCE, but are not used or have an unrelated meaning in SOURCE itself.",
umbrella_desc = "[[Appendix:Glossary#pseudo-loan|pseudo-loans]], i.e. terms that appear to be derived from another language, but are not used or have an unrelated meaning in that language itself.",
categorizing_templates = {"pl", "pseudo-loan"},
},
}
for bortype, spec in pairs(borrowing_specs) do
labels[bortype] = {
description = "{{{langname}}} " .. spec.umbrella_desc,
parents = {spec.umbrella_parent or "Kata pinjaman"},
umbrella_parents = "Subkategori perkataan mengikut etimologi mengikut bahasa",
}
if not spec.uses_subtype_handler then
local label_pattern = spec.label_pattern or "^[Pp]erkataan " .. pattern_escape(spec.malay_label_after or bortype) .. " daripada bahasa (.+)$"
insert(handlers, function(data)
local source_name = data.label:match(label_pattern)
if source_name then
return borrowing_subtype_handler(data.lang, source_name, bortype, spec)
end
end)
end
end
insert(handlers, function(data)
-- Match Malay mid-lang format for uses_subtype_handler borrowing types.
-- The label (after mid-lang unpacking) looks like:
-- "Perkataan pinjaman terpelajar daripada bahasa SOURCE"
-- We match against each spec's malay_label_after value.
local matched_type, matched_source
for borrowing_type, spec in pairs(borrowing_specs) do
if spec.uses_subtype_handler and spec.malay_label_after then
local source_name = data.label:match(
"^[Pp]erkataan " .. pattern_escape(spec.malay_label_after) .. " daripada bahasa (.+)$")
if source_name then
matched_type = borrowing_type
matched_source = source_name
break
end
end
end
if matched_type then
return borrowing_subtype_handler(data.lang, matched_source, matched_type, borrowing_specs[matched_type])
end
end)
-----------------------------------------------------------------------------
---------------------- Indo-Aryan extension handlers ------------------------
-----------------------------------------------------------------------------
-- FIXME: Put this in a family-specific module.
insert(handlers, function(data)
local labelpref, extension = data.label:match("^([Pp]erkataan dilanjutkan dengan bahasa%-bahasa Indo%-Arya )(.+)$")
if not extension then
return
end
local lang_inc_ash = require("Module:languages").getByCode("inc-ash")
local linked_term = full_link({lang = lang_inc_ash, term = extension}, "term")
local tagged_term = tag_text(extension, lang_inc_ash, nil, "term")
return {
description = "{{{langname}}} perkataan yang dilanjutkan dengan imbuhan [[Indo-Aryan]] [[pleonastic|pleonastik]] " .. linked_term .. ".",
displaytitle = "{{{langname}}} " .. labelpref .. tagged_term,
breadcrumb = tagged_term,
lang_position = "mid",
label_before = "Perkataan",
label_after = "dilanjutkan dengan Indo-Aryan " .. extension,
parents = {{name = "Perkataan dengan lanjutan Indo-Aryan", sort = extension}},
umbrella = {
no_by_language = true,
parents = "Indo-Aryan extensions",
displaytitle = "Perkataan dilanjutkan dengan Indo-Aryan " .. tagged_term,
}
}
end)
-----------------------------------------------------------------------------
---------------------------- Coined-by handlers -----------------------------
-----------------------------------------------------------------------------
insert(handlers, function(data)
local coiner = data.label:match("^[Pp]erkataan dicipta oleh (.+)$")
if not coiner then
return
end
-- Sort by last name per request from [[User:Metaknowledge]]
local last_name = umatch(coiner, ".-%s(%S+)$")
return {
description = "{{{langname}}} perkataan yang dicipta oleh " .. coiner .. ".",
breadcrumb = coiner,
lang_position = "mid",
label_before = "Perkataan",
label_after = "dicipta oleh " .. coiner,
parents = {{
name = "Kata ciptaan",
sort = last_name and last_name .. ", " .. coiner or coiner,
}},
umbrella = false,
}
end)
-----------------------------------------------------------------------------
------------------------ Multiple etymology handlers ------------------------
-----------------------------------------------------------------------------
insert(handlers, function(data)
local pos = data.label:match("^[Pp]erkataan dengan pelbagai etimologi (.+)$")
if not pos then
return
end
local plpos = pluralize_pos(pos)
local postype = pos_lemma_or_nonlemma(plpos)
if not postype then
return
end
return {
description = "{{{langname}}} " .. plpos .. " yang berasal daripada pelbagai asal usul.",
umbrella_parents = "Subkategori pelbagai etimologi mengikut bahasa",
breadcrumb = "pelbagai " .. plpos,
lang_position = "mid",
label_before = "Perkataan",
label_after = "dengan pelbagai etimologi " .. plpos,
parents = {{
name = "perkataan dengan pelbagai etimologi " .. postype,
sort = pos,
}},
}
end)
insert(handlers, function(data)
local pos1, pos2 = data.label:match("^[Pp]erkataan dengan etimologi (.+) dan (.+)$")
if not pos1 then
return
end
local pos1type = pos_lemma_or_nonlemma(pluralize_pos(pos1))
local pos2type = pos_lemma_or_nonlemma(pluralize_pos(pos2))
if not (pos1type and pos2type) then
return
end
return {
description = "{{{langname}}} perkataan yang terdiri daripada " .. add_indefinite_article(pos1) .. " dari satu asal dan " ..
add_indefinite_article(pos2) .. " dari asal yang berbeza.",
umbrella_parents = "Subkategori pelbagai etimologi mengikut bahasa",
breadcrumb = pos1 .. " dan " .. pos2,
lang_position = "mid",
label_before = "Perkataan",
label_after = "dengan etimologi " .. pos1 .. " dan " .. pos2,
parents = {{
name = pos1type == pos2type and "perkataan dengan pelbagai etimologi " .. pos1type or
"terms with lemma and non-lemma form etymologies",
sort = pos1 .. " dan " .. pos2,
}},
}
end)
-----------------------------------------------------------------------------
--------------------------- Borrowed-back handlers --------------------------
-----------------------------------------------------------------------------
-- Handler for categories of the form e.g. [[:Category:Perkataan bahasa Inggeris dipinjam balik ke dalam bahasa Inggeris]].
-- The umbrella category has the nonstandard name "Perkataan dipinjam balik ke dalam bahasa yang sama", so we handle it
-- as a regular parent and disable the built-in umbrella mechanism.
insert(handlers, function(data)
local lang = data.lang
if not lang then
return
end
local source_name = data.label:match("^[Pp]erkataan dipinjam balik ke dalam bahasa (.+)$")
if not (source_name and source_name == lang:getDisplayForm()) then
return
end
return {
description = "{{{langname}}} perkataan yang dipinjam daripada bahasa lain yang pada asalnya meminjam istilah tersebut daripada bahasa " .. source_name .. ".",
lang_position = "mid",
label_before = "Perkataan",
label_after = "dipinjam balik ke dalam bahasa " .. source_name,
parents = {"Perkataan mengikut etimologi", "Kata pinjaman", {
name = "Perkataan dipinjam balik ke dalam bahasa yang sama",
raw = true,
sort = "{{{langname}}}"
}},
umbrella = false, -- Umbrella has a nonstandard name so we treat it as a raw category
}
end)
-----------------------------------------------------------------------------
-- --
-- RAW HANDLERS --
-- --
-----------------------------------------------------------------------------
-- Handler for umbrella metacategories of the form e.g. [[:Category:Perkataan diterbitkan daripada akar bahasa Proto-Indo-Iranian]]
-- and [[:Category:Perkataan diterbitkan daripada perkataan bahasa Proto-Indo-European]].
insert(raw_handlers, function(data)
local source_name, terms_type
for _, tt in ipairs{"akar", "words", "perkataan"} do
source_name = data.category:match("^[Pp]erkataan diterbitkan daripada " .. tt .. " bahasa (.+)$")
if source_name then
terms_type = tt
break
end
end
if not source_name then
return
end
local source = get_source(source_name, false, "getCanonicalName")
if not source then
return
end
return {
description = "Kategori payung meliputi perkataan yang berasal daripada " .. get_source_and_type_desc(source, terms_type) .. " tertentu.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Metakategori payung",
{ name = terms_type == "akar" and "Akar" or "lema", is_label = true, lang = source:getCode(), sort = " " },
{ name = "Perkataan diterbitkan daripada bahasa " .. source_name, is_label = true, sort = " " .. terms_type },
},
}
end)
return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers, RAW_HANDLERS = raw_handlers}