Pergi ke kandungan

Modul:category tree/poscatboiler/data/terms by grammatical category

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/poscatboiler/data/doc.


local labels = {}
local raw_categories = {}
local handlers = {}



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


labels["terms by grammatical category"] = {
	description = "{{{langname}}} terms categorized by their grammatical category.",
	umbrella_parents = "Asas",
	parents = {{name = "{{{langcat}}}", raw = true}},
}

------- GENDER -------

for _, pos in ipairs { "nouns", "proper nouns", "pronouns", "suffixes" } do
	labels[pos .. " by gender"] = {
		description = "{{{langname}}} " .. pos .. " organized by the gender they belong to.",
		parents = {{name = pos, sort = "gender"}},
	}

	labels[pos .. " with multiple genders"] = {
		description = "{{{langname}}} " .. pos .. " that belong to more than one gender.",
		parents = {{name = pos .. " by gender", sort = "multiple genders"}},
	}

	labels["common-gender " .. pos] = {
		description = "{{{langname}}} " .. pos .. " of [[Appendix:Glossary#common gender|common gender]], i.e. belonging to a gender category that combines the function of [[Appendix:Glossary#masculine|masculine]] and [[Appendix:Glossary#feminine|feminine]] and is opposed to the [[Appendix:Glossary#neuter|neuter]] gender.",
		parents = {pos .. " by gender"},
	}

	labels["feminine " .. pos] = {
		description = "{{{langname}}} " .. pos .. " of [[Appendix:Glossary#feminine|feminine]] gender, i.e. belonging to a gender category that contains (among other things) female beings.",
		parents = {pos .. " by gender"},
	}

	labels["masculine " .. pos] = {
		description = "{{{langname}}} " .. pos .. " of [[Appendix:Glossary#masculine|masculine]] gender, i.e. belonging to a gender category that contains (among other things) male beings.",
		parents = {pos .. " by gender"},
	}

	labels["masculine and feminine " .. pos .. " by sense"] = {
		description = "{{{langname}}} " .. pos .. " that may be either [[Appendix:Glossary#masculine|masculine]] or [[Appendix:Glossary#feminine|feminine]] depending on whether they refer to male or female beings.",
		parents = {pos .. " by gender"},
	}

	labels["neuter " .. pos] = {
		description = "{{{langname}}} " .. pos .. " of [[Appendix:Glossary#neuter|neuter]] gender, i.e. belonging to a gender category that does not usually contain male or female beings.",
		parents = {pos .. " by gender"},
	}
end


------- NOUN CLASSES -------

labels["nouns by class"] = {
	description = "{{{langname}}} nouns organized by the class they belong to.",
	parents = {{name = "nouns", sort = "class"}},
}


------- ANIMACY -------

-- This category should be used particularly in languages that have
-- grammatical distinctions related to animals, such as Ukrainian.
labels["animal nouns"] = {
	description = "{{{langname}}} nouns that refer to animals.",
	parents = {"animate nouns"},
}

labels["animate nouns"] = {
	description = "{{{langname}}} nouns that refer to humans or animals.",
	parents = {"nouns"},
}

labels["animate verbs"] = {
	description = "{{{langname}}} verbs that refer to humans or animals.",
	parents = {"verbs"},
}

labels["inanimate nouns"] = {
	description = "{{{langname}}} nouns that refer to inanimate objects (not humans or animals).",
	parents = {"nouns"},
}

labels["inanimate verbs"] = {
	description = "{{{langname}}} verbs that refer to inanimate objects (not humans or animals).",
	parents = {"verbs"},
}

-- This category should be used particularly in languages that have
-- grammatical distinctions related to men, such as Polish.
labels["nonvirile nouns"] = {
	description = "{{{langname}}} plural nouns that refer to a group without male humans.",
	parents = {"nouns", "pluralia tantum"},
}

labels["personal nouns"] = {
	description = "{{{langname}}} nouns that refer to humans.",
	parents = {"animate nouns"},
}

-- This category should be used particularly in languages that have
-- grammatical distinctions related to men, such as Polish.
labels["virile nouns"] = {
	description = "{{{langname}}} plural nouns that refer to a group with at least one male human.",
	parents = {"nouns", "pluralia tantum"},
}

labels["nouns with multiple animacies"] = {
	description = "{{{langname}}} nouns that belong to more than one animacy.",
	parents = {{name = "nouns", sort = "multiple animacies"}},
}


------- INFLECTED PARTS OF SPEECH -------

-- Add "POS by inflection type", "irregular POS" and "POS by tone"
-- categories for (potentially) inflected parts of speech.

local inflected_poses = {
	"adjectives",
	"adverbs",
	"determiners",
	"nouns",
	"numerals",
	"participles",
	"pronouns",
	"proper nouns",
	"suffixes",
	"verbs",
}

for _, pos in ipairs(inflected_poses) do
	labels[pos .. " by inflection type"] = {
		description = "{{{langname}}} " .. pos .. " organized by the type of inflection they follow.",
		parents = {{name = pos, sort = "inflection"}},
	}

	labels["irregular " .. pos] = {
		description = "{{{langname}}} " .. pos .. " that follow non-standard patterns of inflection.",
		parents = {pos .. " by inflection type"},
	}

	labels["defective " .. pos] = {
		description = "{{{langname}}} " .. pos .. " that lack one or more forms in their inflections.",
		parents = {pos, "irregular " .. pos},
	}

	labels["suppletive " .. pos] = {
		description = "{{{langname}}} " .. pos .. " that have inflected forms from different roots.",
		parents = {"irregular " .. pos},
	}
	
	if pos ~= "verbs" and pos ~= "adverbs" then
		labels["indeclinable " .. pos] = {
			description = "{{{langname}}} " .. pos .. " that do not display additional grammatical relations by means of declension.",
			parents = {pos .. " by inflection type"},
		}

		labels[pos .. " with multiple declensions"] = {
			description = "{{{langname}}} " .. pos .. " that follow more than one type of inflection.",
			parents = {{name = pos .. " by inflection type", sort = "multiple declensions"}},
		}
	end

	labels[pos .. " by tone"] = {
		description = "{{{langname}}} " .. pos .. " organized by the tone they follow.",
		parents = {{name = pos .. " by inflection type", sort = "tone"}},
	}
end

-- FIXME: Only used currently for Arabic; probably should be removed as a general category.
labels["irregular elative adjectives"] = {
	description = "{{{langname}}} elative adjectives that follow non-standard patterns of inflection.",
	parents = {"adjectives by inflection type"},
}

for _, pos in ipairs { "nouns", "proper nouns", "pronouns" } do
	labels[pos .. " with unattested plurals"] = {
		description = "{{{langname}}} " .. pos .. " with unattested plurals.",
		parents = {{name = pos, sort = "unattested plurals"}},
	}
	labels["definite " .. pos] = {
		description = "{{{langname}}} " .. pos .. " that are inherently definite and have definite concord.",
		parents = {pos .. " by inflection type"},
	}
end


------- GERMANIC VERB CLASSES -------

-- FIXME: Not clear this belongs among the general categories.

labels["strong verbs"] = {
	description = "{{{langname}}} verbs that present different stem vowels in their typically regular conjugated forms.",
	parents = {"verbs by inflection type"},
}

labels["weak verbs"] = {
	description = "{{{langname}}} verbs that display dental suffixes in their past tense conjugated forms.",
	parents = {"verbs by inflection type"},
}

labels["preterite-present verbs"] = {
	description = "{{{langname}}} verbs that inflect in the present tense like the past tense of strong verbs.",
	parents = {"irregular verbs"},
}

labels["class 1 strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was followed by ''-y-'' in Proto-Indo-European.",
	parents = {{name = "strong verbs", sort = "1"}},
}

labels["class 1 weak verbs"] = {
	description = "Weak verbs of the first class.",
	parents = {{name = "weak verbs", sort = "1"}},
}

labels["class 2 strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was followed by ''-w-'' in Proto-Indo-European.",
	parents = {{name = "strong verbs", sort = "2"}},
}

labels["class 2a strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was *eu in Proto-Germanic.",
	parents = {{name = "class 2 strong verbs", sort = "1"}},
}

labels["class 2b strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was *ū in Proto-Germanic.",
	parents = {{name = "class 2 strong verbs", sort = "2"}},
}

labels["class 2 weak verbs"] = {
	description = "Weak verbs of the second class.",
	parents = {{name = "weak verbs", sort = "2"}},
}

labels["class 3 weak verbs"] = {
	description = "Weak verbs of the third class.",
	parents = {{name = "weak verbs", sort = "3"}},
}

labels["class 3 strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was followed by a [[consonant cluster]] in Proto-Indo-European.",
	parents = {{name = "strong verbs", sort = "3"}},
}

labels["class 3a strong verbs"] = {
	description = "Verbs where the [[consonant cluster]] begins with a nasal consonant.",
	parents = {{name = "class 3 strong verbs", sort = "1"}},
}

labels["class 3b strong verbs"] = {
	description = "Verbs where the [[consonant cluster]] begins with a lateral consonant or velar fricative.",
	parents = {{name = "class 3 strong verbs", sort = "2"}},
}

labels["class 3c strong verbs"] = {
	description = "Verbs where the [[consonant cluster]] begins with a rhotic consonant.",
	parents = {{name = "class 3 strong verbs", sort = "3"}},
}

labels["class 4 strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was followed by a [[sonorant]] (''m'', ''n'', ''l'', ''r'') but no other consonant in Proto-Indo-European.",
	parents = {{name = "strong verbs", sort = "4"}},
}

labels["class 4 weak verbs"] = {
	description = "Weak verbs of the fourth class.",
	parents = {{name = "weak verbs", sort = "4"}},
}

labels["class 5 strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was followed by [[consonant]] other than a [[sonorant]] in Proto-Indo-European.",
	parents = {{name = "strong verbs", sort = "5"}},
}

labels["class 6 strong verbs"] = {
	description = "The Proto-Indo-European origin of this class is not securely known. It contains verbs with the stem vowel ''-a-'', except those where it is followed by a sonorant and another consonant (this combination was considered a diphthong in PIE and therefore belonged to class 7).",
	parents = {{name = "strong verbs", sort = "6"}},
}

labels["class 7 strong verbs"] = {
	description = "Verbs that retained their reduplication in the past tense in Proto-Germanic.",
	parents = {{name = "strong verbs", sort = "7"}},
}

labels["class 7a strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*ai'' in Proto-Germanic, analogous to class 1.",
	parents = {{name = "class 7 strong verbs", sort = "a"}},
}

labels["class 7b strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*au'' in Proto-Germanic, analogous to class 2.",
	parents = {{name = "class 7 strong verbs", sort = "b"}},
}

labels["class 7c strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*a'' followed by a [[consonant cluster]] in Proto-Germanic, analogous to class 3.",
	parents = {{name = "class 7 strong verbs", sort = "c"}},
}

labels["class 7d strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*ē'' in Proto-Germanic.",
	parents = {{name = "class 7 strong verbs", sort = "d"}},
}

labels["class 7e strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*ō'' in Proto-Germanic.",
	parents = {{name = "class 7 strong verbs", sort = "e"}},
}



local labels2 = {}

-- Add 'umbrella_parents' key if not already present.
for key, data in pairs(labels) do
	labels2[key] = data
	if not data.umbrella_parents then
		data.umbrella_parents = "Terms by grammatical category subcategories by language"
	end
end



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


raw_categories["Terms by grammatical category subcategories by language"] = {
	description = "Umbrella categories covering topics related to grammatical categories, such as gender, animacy and noun and verb classes.",
	additional = "{{{umbrella_meta_msg}}}",
	parents = {
		"Umbrella metacategories",
		{name = "terms by grammatical category", is_label = true, sort = " "},
	},
}



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


table.insert(handlers, function(data)
	local class = data.label:match("^class ([0-9a-z]+) nouns$")
	if class then
		local classnum, suffix = class:match("^([0-9]+)([a-z]*)$")
		return {
			description =
				"{{{langname}}} nouns that belong to class " .. class .. ".",
			breadcrumb = class,
			umbrella = false,
			parents = {{
				name = "nouns by class",
				sort = classnum and ("#%02d"):format(classnum) .. suffix or class,
			}},
		}
	end
end)

table.insert(handlers, function(data)
	local pos, tone = data.label:match("^(.+) with tone ([^ ]+)$")
	if pos then
		return {
			description = "{{{langname}}} " .. pos .. " with tone " .. tone .. ".",
			breadcrumb = tone,
			-- FIXME, should there be an umbrella category e.g. 'Adjectives with tone H by language'?
			umbrella = false,
			parents = {{
				name = pos .. " by tone",
				sort = "" .. tone:len() .. tone,
			}},
		}
	end
end)

table.insert(handlers, function(data)
	local pos, classifier = data.label:match("^(nouns) classified by (.+)$")
	if pos then
		local linktext
		if data.lang then
			if data.lang:getCode() == "zh" then
				linktext = require("Module:zh").link(nil, nil, { classifier, tr = "-" }, classifier)
			else
				linktext = require("Module:links").full_link { term = classifier, lang = data.lang }
			end
		else
			linktext = classifier
		end
		return {
			description = "{{{langname}}} " .. pos .. " using " .. linktext .. " as their classifier.",
			breadcrumb = classifier,
			umbrella = false,
			parents = {{
				name = pos .. " by classifier",
				sort = data.lang and data.lang:getCode() == "zh" and require("Module:zh-sortkey").makeSortKey(classifier) or classifier,
			}},
		}
	end
end)


return {LABELS = labels2, RAW_CATEGORIES = raw_categories, HANDLERS = handlers}