Pergi ke kandungan

Modul:category tree/lexical properties

Daripada Wikikamus

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 insert = table.insert
local ucfirst = require("Module:string utilities").ucfirst

-----------------------------------------------------------------------------
--                                                                         --
--                                  LABELS                                 --
--                                                                         --
-----------------------------------------------------------------------------


labels["Perkataan mengikut sifat leksem"] = {
	description = "Istilah {{{langname}}} dikategorikan mengikut properties relating to spelling, pronunciation or meaning.",
	umbrella_parents = "Asas",
	parents = {{name = "{{{langcat}}}", raw = true}}
}

labels["Autohiponim"] = {
	description = "{{{langname}}} terms that have at least two meanings, one of which is a hyponym of the other.",
	parents = {"Perkataan mengikut sifat leksem"},
}

labels["Kontranim"] = {
	description = "{{{langname}}} terms that have two opposite meanings.",
	parents = {"Perkataan mengikut sifat leksem"},
}

labels["Negatif berganda"] = {
	description = "{{{langname}}} terms which include a [[double negative]], either etymologically or in a definition.",
	parents = {"Perkataan mengikut sifat leksem"},
}

labels["Heteronim"] = {
	description = "{{{langname}}} terms that have different meanings depending on their etymology and/or on how they are pronounced.",
	parents = {"Perkataan mengikut sifat leksem"},
}

labels["Bentuk tanpa nuqta"] = {
	description = "{{{langname}}} terms that are spelled without a [[nuqta]].",
	parents = {"Perkataan mengikut sifat ortografi"},
}

labels["Bentuk tidak berhamzah"] = {
	description = "{{{langname}}} terms that are spelled without a [[hamza]].",
	parents = {"Perkataan mengikut sifat ortografi"},
}

labels["Palindrom"] = {
	description = "{{{langname}}} terms whose characters are read equally both from left to right and vice versa, normally ignoring spaces, [[diacritic]]s and punctuation.",
	parents = {"Perkataan mengikut susunan aksara"},
}

labels["Kata majmuk pleonastik"] = {
	description = "{{{langname}}} compound terms where the head is a hyponym of its other part and whose other part is its synonym.",
	parents = {"Perkataan mengikut sifat leksem", "Kata majmuk"},
}

labels["Kata sifat majmuk pleonastik"] = {
	description = "{{{langname}}} compound adjectives where the head is a hyponym of its other part and whose other part is its synonym.",
	breadcrumb = "Kata sifat",
	parents = {{name = "Kata majmuk pleonastik", sort = "Kata sifat"}, "compound adjectives"},
}

labels["Kata nama majmuk pleonastik"] = {
	description = "{{{langname}}} compound nouns where the head is a hyponym of its other part and where the head is the synonym for the whole.",
	breadcrumb = "Kata nama",
	parents = {{name = "Kata majmuk pleonastik", sort = "Kata nama"}, "Kata nama majmuk"},
}

labels["Ejaan sebutan"] = {
	description = "{{{langname}}} terms spelled to represent a pronunciation, often a nonstandard one.",
	parents = {"Perkataan mengikut sifat ortografi"},
}

labels["Tautofrasa"] = {
	description = "{{{langname}}} phrases that repeat the same idea or concept using the same words.",
	parents = {"Perkataan mengikut sifat leksem"},
}

labels["Perkataan mengikut sifat ortografi"] = {
	description = "Istilah {{{langname}}} dikategorikan mengikut properties relating to [[orthography]] or [[spelling]].",
	breadcrumb = "mengikut sifat ortografi",
	parents = {{name = "Perkataan mengikut sifat leksem", sort = "sifat ortografi"}},
}

labels["calculator words"] = {
	description = "{{{langname}}} terms that can be spelled on a [[seven-segment]] display, as found on pocket calculators, by turning numbers upside-down.",
	parents = {"Perkataan mengikut sifat ortografi"},
}

labels["Perkataan dieja tanpa bunyi vokal"] = {
	description = "{{{langname}}} words spelled without vowels.",
	additional = "The letters counted as vowels may differ from language to language but typically include the conventional written vowels (''a'' ''e'' ''i'' ''o'' ''u'' ''y''), and may include other less common letters representing vowels (e.g. ''æ'', ''œ'', ''ø''). Terms in this category may contain vowel sounds in their pronunciation.",
	parents = {"Perkataan mengikut susunan aksara"},
}

labels["Perkataan mengikut bilangan huruf"] = {
	description = "Perkataan {{{langname}}} dikategorikan mengikut number of letters.",
	parents = {"Perkataan mengikut sifat ortografi"},
}

labels["Singkatan mengikut bilangan huruf"] = {
	description = "{{{langname}}} abbreviations categorized by number of letters.",
	parents = {"Perkataan mengikut sifat ortografi"},
}

labels["Akar mengikut bilangan huruf"] = {
	description = "{{{langname}}} {{lg|roots}} categorized by number of letters.",
	breadcrumb = "mengikut bilangan huruf",
	parents = {
		{name = "Akar", sort = "bilangan huruf"},
		"Perkataan mengikut sifat ortografi"
	},
}

labels["Akar mengikut bentuk"] = {
	description = "{{{langname}}} {{lg|roots}} categorized by their shape.",
	breadcrumb = "mengikut bentuk",
	parents = {
		{name = "Akar", sort = "bentuk"},
		"Perkataan mengikut sifat leksem"
	},
}

labels["Perkataan mengikut bilangan suku kata"] = {
	description = "Perkataan bahasa {{{langname}}} dikategorikan mengikut bilangan suku kata.",
	parents = {"Perkataan mengikut sifat fonemik"},
}

labels["Perkataan mengikut aksara individu"] = {
	description = "Istilah bahasa {{{langname}}} dikategorikan mengikut sama ada terdiri daripada aksara individu tertentu atau tidak.",
	breadcrumb = "mengikut aksara individu",
	parents = {{name = "Perkataan mengikut sifat ortografi", sort = "aksara individu"}},
}

labels["Perkataan mengikut susunan aksara"] = {
	description = "Istilah bahasa {{{langname}}} dikategorikan mengikut sama ada terdiri daripada susunan aksara tertentu atau tidak.",
	breadcrumb = "mengikut susunan aksara",
	parents = {{name = "Perkataan mengikut sifat ortografi", sort = "susunan aksara"}},
}

labels["Perkataan dengan kehadiran huruf yang sama berturut-turut"] = {
	description = "Perkataan bahasa {{{langname}}} dikategorikan mengikut bilangan kehadiran huruf yang sama berturut-turut dalam sesuatu kata.",
	breadcrumb = "kehadiran huruf yang sama berturut-turut",
	parents = {{name = "Perkataan mengikut sifat ortografi", sort = "kehadiran huruf yang sama berturut-turut"}},
}

labels["Perkataan mengandungi huruf condong"] = {
	description = "{{{langname}}} terms containing [[italics]].",
	breadcrumb = "mengandungi huruf condong",
	parents = {{name = "Perkataan mengikut sifat ortografi", sort = "mengandungi huruf condong"}},
}

labels["Perkataan mengandungi angka Romawi"] = {
	description = "{{{langname}}} terms containing [[Roman numeral]]s.",
	breadcrumb = "mengandungi angka Romawi",
	parents = {{name = "Perkataan mengikut sifat ortografi", sort = "mengandungi angka Romawi"},
		{name = "Perkataan dieja dengan nombor", sort = "angka Romawi"}},
}

labels["Perkataan dengan penumpuan campuran"] = {
	description = "{{{langname}}} terms where the spelling represents a variant pronunciation that differs from (one of) the current standard pronunciation(s).",
	breadcrumb = "dengan penumpuan campuran",
	parents = {{name = "Perkataan mengikut sifat ortografi", sort = "penumpuan campuran"}, "Perkataan mengikut sifat fonemik"},
}

labels["Perkataan dengan homofon"] = {
	description = "Perkataan bahasa {{{langname}}} dengan satu [[homofon]] atau lebih, iaitu perkataan dengan sebutan serupa tetapi dengan ejaan berbeza.",
	breadcrumb = "dengan homofon",
	parents = {{name = "Perkataan mengikut sifat leksem", sort = "homofon"}},
}

labels["Perkataan dengan transposisi kehormat"] = {
	description = "{{{langname}}} compound terms where the written order of the elements is reversed due to [[honorific transposition]].",
	breadcrumb = "dengan transposisi kehormat",
	parents = {{name = "Perkataan mengikut sifat ortografi", sort = "transposisi kehormat"}},
}

labels["Perkataan dengan kata sifat mengikuti kata nama"] = {
	description = "{{{langname}}} terms where the adjective follows the noun. These adjectives within these terms are sometimes referred to as postpositive or postnominal adjectives.",
	breadcrumb = "kata sifat mengikuti kata nama",
	parents = {{name = "Perkataan mengikut sifat leksem", sort = "kata sifat mengikuti kata nama"}},
}

labels["Perkataan ditulis dengan tulisan asing"] = {
	description = "{{{langname}}} terms that are written in a different, non-native script.",
	breadcrumb = "ditulis dengan tulisan asing",
	parents = {{name = "Perkataan mengikut sifat ortografi", sort = "ditulis dengan tulisan asing"}},
}

labels["Perkataan ditulis dengan berbilang jenis tulisan"] = {
	description = "{{{langname}}} terms that are written using more than one script.",
	breadcrumb = "ditulis dengan berbilang jenis tulisan",
	parents = {{name = "Perkataan mengikut sifat ortografi", sort = "ditulis dengan berbilang jenis tulisan"}},
}

labels["Perkataan mengikut sifat fonemik"] = {
	description = "Istilah {{{langname}}} dikategorikan mengikut properties relating to [[pronunciation]] and [[phonemics]].",
	breadcrumb = "mengikut sifat fonemik",
	parents = {{name = "Perkataan mengikut sifat leksem", sort = "sifat fonemik"}},
}

-- Add 'umbrella_parents' key if not already present.
for _, data in pairs(labels) do
	if not data.umbrella_parents then
		data.umbrella_parents = "Subkategori perkataan mengikut sifat leksem mengikut bahasa"
	end
end


-----------------------------------------------------------------------------
--                                                                         --
--                              RAW CATEGORIES                             --
--                                                                         --
-----------------------------------------------------------------------------


raw_categories["Subkategori perkataan mengikut sifat leksem mengikut bahasa"] = {
	breadcrumb = "Subkategori",
	description = "Umbrella categories covering topics related to terms categorized by their lexical properties, such as palindromes and number of letters or syllables in a word.",
	additional = "{{{umbrella_meta_msg}}}",
	parents = {
		{name = "Perkataan mengikut sifat leksem", is_label = true, sort = " "},
		"Metakategori payung",
	},
}

for _, v in ipairs{
	{"perkataan", "huruf"},
	{"singkatan", "huruf"},
	{"akar", "huruf"},
	{"perkataan", "suku kata"}
} do
	raw_categories[("Subkategori %s mengikut bilangan %s mengikut bahasa"):format(v[1], v[2])] = {
		breadcrumb = "Subkategori",
		description = ("Umbrella categories covering topics related to %s categorized by their number of %s."):format(v[1], v[2]),
		additional = "{{{umbrella_meta_msg}}}",
		parents = {
			{name = ("%s mengikut bilangan %s"):format(ucfirst(v[1]), v[2]), is_label = true, sort = " "},
			"Metakategori payung",
		},
	}
end

raw_categories["Subkategori perkataan mengikut bilangan suku kata mengikut bahasa"] = {
	breadcrumb = "Subkategori",
	description = "Umbrella categories covering topics related to terms categorized by the number of consecutive instances of the same letter they contain.",
	additional = "{{{umbrella_meta_msg}}}",
	parents = {
		{name = "Perkataan dengan kehadiran huruf yang sama berturut-turut", is_label = true, sort = " "},
		"Metakategori payung",
	},
}

raw_categories["Perkataan panjang mengikut bahasa"] = {
	description = "Categories with terms that are longer than a given (per-language) threshold.",
	additional = "{{{umbrella_msg}}}",
	parents = {
		{name = "Perkataan mengikut sifat leksem", is_label = true, sort = " "},
	},
}


-----------------------------------------------------------------------------
--                                                                         --
--                                 HANDLERS                                --
--                                                                         --
-----------------------------------------------------------------------------

for _, v in ipairs{
	{"perkataan", "huruf", "terdiri daripada", function(n)
		local pl = n == "1" and "" or ""
		return ("They have meaning(s) other than their letter%s or the shape of their letter%s which are not abbreviations, numbers or symbols."):format(pl, pl)
	end},
	{"singkatan", "huruf", "terdiri daripada"},
	{"akar", "huruf", "terdiri daripada"},
	{"perkataan", "suku kata", "disebut dengan"}
} do
	insert(handlers, function(data)
		-- Make the pattern case-insensitive by trying both versions
		local n = data.label:match(("^%s ([1-9]%%d*) %s$"):format(ucfirst(v[1]), v[2]))
			or data.label:match(("^%s ([1-9]%%d*) %s$"):format(v[1], v[2]))
		if not n then
			return
		end
		local sortkey = require("Module:category tree").numeral_sortkey(n, 2097152)
		return {
			breadcrumb = n,
			description = ("%s bahasa {{{langname}}} yang %s %d %s%s."):format(ucfirst(v[1]), v[3], n, v[2], n == "1" and "" or ""),
			additional = v[4] and v[4](n) or nil,
			umbrella = {
				breadcrumb = ("%d %s"):format(n, v[2]),
				parents = {{name = ("Subkategori %s mengikut bilangan %s mengikut bahasa"):format(v[1], v[2]), sort = sortkey}},
			},
			parents = {{name = ("%s mengikut bilangan %s"):format(ucfirst(v[1]), v[2]), sort = sortkey}}
		}
	end)
end

insert(handlers, function(data)
	local n = data.label:match("^Perkataan dengan kehadiran ([1-9]%d*) huruf yang sama berturut-turut$")
	if not (n and tonumber(n) > 2) then
		return
	end
	local sortkey = require("Module:category tree").numeral_sortkey(n, 2097152)
	return {
		breadcrumb = n,
		description = ("Perkataan bahasa {{{langname}}} yang mengandungi kehadiran %d huruf yang sama berturut-turut."):format(n),
		umbrella = {
			breadcrumb = ("kehadiran %d huruf yang sama berturut-turut"):format(n),
			parents = {{name = "Subkategori perkataan mengikut bilangan suku kata mengikut bahasa", sort = sortkey}},
		},
		parents = {{name = "Perkataan dengan kehadiran huruf yang sama berturut-turut", sort = sortkey}}
	}
end)


-----------------------------------------------------------------------------
--                                                                         --
--                               RAW HANDLERS                              --
--                                                                         --
-----------------------------------------------------------------------------

insert(raw_handlers, function(data)
	local langname = data.category:match("^Perkataan panjang bahasa (.*)$")
	if langname then
		local lang = require("Module:languages").getByCanonicalName(langname)
		if lang then
			local length_threshold = require("Module:headword/data").long_word_thresholds[lang:getCode()]
			if length_threshold then
				return {
					lang = lang:getCode(),
					description = "Perkataan bahasa {{{langname}}} yang memiliki sama dengan atau lebih daripada " .. length_threshold .. " huruf.",
					parents = {
						{name = "Perkataan mengikut sifat ortografi", lang = lang:getCode(), is_label = true},
						{name = "Perkataan panjang mengikut bahasa"},
					},
				}
			end
		end
	end
end)


return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers, RAW_HANDLERS = raw_handlers}