Module:category tree/non-lemma forms
Jump to navigation
Jump to search
Documentation for this module may be created at Module:category tree/non-lemma forms/doc
local labels = {}
local raw_categories = {}
local en_utilities_module = "Module:en-utilities"
local insert = table.insert
local pluralize = require(en_utilities_module).pluralize
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-----------------------------------------------------------------------------
-- --
-- LABELS --
-- --
-----------------------------------------------------------------------------
local degrees = {
comparative = "that express a higher degree of an attribute when comparing one thing to another, or serve to set that thing apart from another",
superlative = "that express the highest possible degree of an attribute",
elative = "that, depending on the context, express either the comparative degree (a higher degree of an attribute when comparing one thing to another) or the superlative degree (the highest possible degree of an attribute)",
exaggerated = "that express the highest possible degree of an attribute (like the superlative degree), but with an additional level of emphasis",
excessive = "that express an excessive degree of some attribute",
equative = "that express the same or a similar degree of an attribute when comparing one thing to another",
}
local degree_pos = { "adjective", "adverb", "determiner", "pronoun" }
for _, pos in ipairs(degree_pos) do
local plpos = pluralize(pos)
for degree, desc in pairs(degrees) do
labels[degree .. " " .. plpos] = {
breadcrumb = degree,
description = "{{{langname}}} " .. plpos .. " " .. desc .. ".",
parents = {pos .. " forms"},
}
end
end
labels["non-lemma forms"] = {
description = "{{{langname}}} inflected forms of other [[Wiktionary:Lemmas|lemmas]], categorized by their part of speech.",
umbrella_parents = "Fundamental",
parents = {{name = "{{{langcat}}}", raw = true}},
}
-- Handle specific types of non-lemma forms. Each spec is of the form {POS, PARENT_POS} where POS is the singular form
-- of a part of speech for which non-lemma forms exist (e.g. 'determiner' is listed because 'determiner forms' exist),
-- and PARENT_POS is the singular form of the parent category to add the category to. For example, the spec
-- {"circumfix", "morpheme"} means that 'circumfix forms' categories have the corresponding 'morpheme forms' categories
-- as their first parent. The second parent is the POS itself; e.g. 'morpheme forms' has 'morphemes' as its second
-- parent, with a sort key that places 'morpheme forms' at the beginning of the child categories. If PARENT_POS is
-- 'false', only the second parent appears as the parent. If a spec is a single string POS, the PARENT_POS defaults to
-- "non-lemma"; e.g. if the spec is "adjective", then 'adjective forms' categories have the corresponding
-- 'non-lemma forms' category as their first parent.
local specs = {
"adjective",
"adverb",
{"article", "determiner"},
{"circumfix", "morpheme"},
"classifier",
"clitic",
"conjunction",
"determiner",
{"infinitive", false},
"interjection",
"morpheme",
"noun",
"numeral",
"participle",
"particle",
{"past participle", "participle"},
"predicative",
{"prefix", "morpheme"},
"proper noun",
"postposition",
"preposition",
"pronoun",
{"suffix", "morpheme"},
"verb",
}
for degree in pairs(degrees) do
for _, pos in ipairs(degree_pos) do
insert(specs, {degree .. " " .. pos, false})
end
end
for _, spec in ipairs(specs) do
local pos, parent_pos
if type(spec) == "table" then
pos, parent_pos = unpack(spec)
else
pos = spec
end
if parent_pos == nil then
parent_pos = "non-lemma"
end
local plpos, parents, breadcrumb = pluralize(pos), {}
if parent_pos == false then -- parent is the POS ([POS] » Forms)
breadcrumb = "Forms"
else
insert(parents, parent_pos .. " forms")
end
insert(parents, {name = plpos, sort = "**"})
labels[pos .. " forms"] = {
breadcrumb = breadcrumb,
description = ("{{{langname}}} %s that are inflected to display grammatical relations other than the main form."):format(plpos),
parents = parents,
}
end
labels["active participles"] = {
description = "{{{langname}}} participles that express an agent actively performing an action.",
parents = {"participles"},
}
labels["active adjectival participles"] = {
description = "{{{langname}}} participles that function as adjectives and express an agent actively performing an action.",
parents = {"participles", "adjectives"},
}
labels["adjectival participles"] = {
description = "{{{langname}}} participles that function as adjectives.",
parents = {"participles", "adjectives"},
}
labels["adjective construct forms"] = {
description = "{{{langname}}} adjectives that are inflected to modify a noun in a genitive construction.",
parents = {{name = "adjective forms", sort = "construct"}},
}
labels["adjective definite forms"] = {
description = "{{{langname}}} adjectives that are inflected to give attributes to specific and identifiable nouns.",
parents = {{name = "adjective forms", sort = "definite forms"}},
}
labels["adjective dual forms"] = {
description = "{{{langname}}} adjectives that are inflected to be quantified as two.",
parents = {{name = "adjective forms", sort = "dual forms"}},
}
labels["adjective feminine forms"] = {
description = "{{{langname}}} adjectives that are inflected to give attributes to nouns associated to female beings.",
parents = {{name = "adjective forms", sort = "feminine forms"}},
}
labels["adverbial participles"] = {
description = "{{{langname}}} participles that function as adverbs.",
parents = {"participles", "adverbs"},
}
labels["agent participles"] = {
description = "{{{langname}}} participles that express an agent by who something is done.",
parents = {"participles"},
}
labels["anterior adverbial participles"] = {
description = "{{{langname}}} participles that function as adverbs and express an action completed before the one expressed by the primary verb.",
parents = {"participles", "adverbs"},
}
labels["classifier singular forms"] = {
description = "{{{langname}}} classifiers that are inflected for singular number.",
parents = {"classifier forms"},
}
labels["collective plurals"] = {
description = "{{{langname}}} nominal plural forms with specifically collective semantics.",
parents = {"noun forms"},
}
labels["contemporary adverbial participles"] = {
description = "{{{langname}}} participles that function as adverbs and express an action occuring simultaneously with the one expressed by the primary verb.",
parents = {"participles", "adverbs"},
}
labels["converbs"] = {
description = "{{{langname}}} verb forms that build clauses which function as adverbials.",
parents = {"verb forms"},
}
labels["diminutive gerunds"] = {
description = "{{{langname}}} diminutives of gerunds.",
parents = {"verb forms"},
}
labels["extended adjective forms"] = {
parents = {"adjective forms"},
}
labels["future active participles"] = {
description = "{{{langname}}} participles that express an agent actively performing an action in future time.",
parents = {"participles"},
}
labels["future participles"] = {
description = "{{{langname}}} participles that indicate future events.",
parents = {"participles"},
}
labels["future passive participles"] = {
description = "{{{langname}}} participles that express a patient having an action performed on it in future time.",
parents = {"participles"},
}
local function gerund_description(data)
local default_text = "{{{langname}}} verbs that are conjugated to indicate ongoing events at unspecified moments."
if not data.lang then
-- This happens e.g. in [[:Category:Gerunds by language]].
return default_text
else
local langcode = data.lang:getCode()
if langcode == "sq" or langcode == "kmr" or langcode == "liv" or data.lang:inFamily("gem", "itc") then
return "{{{langname}}} forms that generally act as an action noun for the verb that they are formed from."
elseif langcode == "sa" or langcode == "pi" then
return "{{{langname}}} verb forms used in a clause to indicate a prior action by the subject of the sentence."
else
return default_text
end
end
end
labels["gerunds"] = {
description = gerund_description,
additional = "{{small|[Edit function gerund_description() in [[Module:category tree/non-lemma forms]] to change this description.]}}",
parents = {"verb forms"},
}
labels["imperfect participles"] = {
description = "{{{langname}}} participles that express an ongoing or continuous action.",
parents = {"participles"},
}
labels["infinitives"] = {
description = "{{{langname}}} non-finite verb forms of various kinds.",
parents = {"verb forms"},
}
labels["intensive adjectives"] = {
description = "{{{langname}}} adjectives that are derived from a base word to express a stronger concept than the base word.",
parents = {"adjective forms"},
}
labels["manuscript forms"] = {
description = "{{{langname}}} words as they appear in original manuscripts.",
parents = {"non-lemma forms"},
}
labels["mutated forms"] = {
description = "{{{langname}}} terms whose initial consonant is mutated due to the effect of the preceding word.",
parents = {"non-lemma forms"},
}
local inflected_pos_for_mutation = {
"adjective",
"adverb",
"determiner",
"interjection",
"noun",
"numeral",
"participle",
"particle",
"prefix",
"preposition",
"pronoun",
"proper noun",
"verb",
}
for _, pos in ipairs(inflected_pos_for_mutation) do
local plpos = pluralize(pos)
labels["mutated " .. plpos] = {
description = "{{{langname}}} " .. plpos .. " whose initial consonant is mutated due to the effect of the preceding word.",
parents = {pos .. " forms", {name = "mutated forms", sort = pos}},
}
end
local mutation_types = {
-- FIXME, we should add these terms to [[Appendix:Glossary]] and link to them.
["eclipsed"] = "[[Appendix:Irish mutations#Eclipsis|eclipsis]]",
["lenited"] = "[[Appendix:Irish mutations#Lenition|lenition]]",
["h-prothesized"] = "[[h-prothesis]]",
["t-prothesized"] = "[[t-prothesis]]",
["aspirate-mutation"] = "[[aspirate mutation]]",
["hard-mutation"] = "[[hard mutation]]",
["mixed-mutation"] = "[[mixed mutation]]",
["nasal-mutation"] = "[[nasal mutation]]",
["soft-mutation"] = "[[soft mutation]]",
}
for muttype, desc in pairs(mutation_types) do
labels[muttype .. " forms"] = {
description = "{{{langname}}} terms whose initial consonant is mutated through " .. desc .. ", due to the effect of the preceding word.",
parents = {"mutated forms"},
}
end
labels["negative participles"] = {
description = "{{{langname}}} participles that express lack of an action being performed.",
parents = {"participles"},
}
labels["nominal participles"] = {
description = "{{{langname}}} participles that function as nouns.",
parents = {"participles", "nouns"},
}
labels["noun construct forms"] = {
description = "{{{langname}}} nouns that are inflected to modify a noun in a genitive construction.",
parents = {{name = "noun forms", sort = "construct"}},
}
labels["noun definite forms"] = {
description = "{{{langname}}} nouns that are inflected to designate an identified object.",
parents = {{name = "noun forms", sort = "definite"}},
}
labels["noun feminine forms"] = {
description = "{{{langname}}} nouns that are inflected to be associated to female beings.",
parents = {{name = "noun forms", sort = "feminine"}},
}
labels["noun indefinite forms"] = {
description = "{{{langname}}} nouns that are inflected to designate an unidentified object.",
parents = {{name = "noun forms", sort = "indefinite"}},
}
labels["noun masculine forms"] = {
description = "{{{langname}}} nouns that are inflected to be associated to male beings.",
parents = {{name = "noun forms", sort = "masculine"}},
}
labels["noun paucal forms"] = {
description = "{{{langname}}} nouns that are inflected to be quantified as between two (or three in some languages with dual number) and ten.",
parents = {{name = "noun forms", sort = "paucal"}},
}
labels["noun possessive forms"] = {
description = "{{{langname}}} nouns that are inflected to indicate possession.",
parents = {{name = "noun forms", sort = "possessive"}},
}
labels["participles"] = {
description = "{{{langname}}} verbal forms that behave syntactically like adjectives (or sometimes adverbs), and in some languages are often used in compound conjugations and/or reduced relative clauses.",
parents = {"verb forms"},
}
labels["passive participles"] = {
description = "{{{langname}}} participles that express a patient having an action performed on it.",
parents = {"participles"},
}
labels["passive adjectival participles"] = {
description = "{{{langname}}} participles that function as adjectives and express a patient having an action performed on it.",
parents = {"participles", "adjectives"},
}
labels["past active aorist participles"] = {
description = "{{{langname}}} participles that express completed events in past time.",
parents = {"participles"},
}
labels["past active imperfect participles"] = {
description = "{{{langname}}} participles that express ongoing events in past time.",
parents = {"participles"},
}
labels["past active participles"] = {
description = "{{{langname}}} participles that express an agent actively performing an action in past time.",
parents = {"participles"},
}
labels["past adverbial participles"] = {
description = "{{{langname}}} participles that function as adverbs and express actions in past time.",
parents = {"adverbial participles", "adverbs"},
}
labels["past participles"] = {
description = "{{{langname}}} participles that express actions in past time.",
parents = {"participles"},
}
labels["past passive participles"] = {
description = "{{{langname}}} participles that express a patient having an action performed on it in past time.",
parents = {"participles"},
}
labels["perfect participles"] = {
description = "{{{langname}}} participles that express having completed or undergone an action.",
parents = {"participles"},
}
labels["perfect active participles"] = {
description = "{{{langname}}} participles that express an agent having completed an action.",
parents = {"participles"},
}
labels["prepositional pronouns"] = {
description = "{{{langname}}} pronouns that are combined with a preposition.",
umbrella_parents = "Lemmas subcategories by language",
parents = {"pronoun forms", {name = "prepositions", sort = "pronouns"}},
}
labels["present active participles"] = {
description = "{{{langname}}} participles that express an agent actively performing an action in present time.",
parents = {"participles"},
}
labels["present adverbial participles"] = {
description = "{{{langname}}} participles that function as adverbs and express actions in present time.",
parents = {"adverbial participles", "adverbs"},
}
labels["present middle participles"] = {
description = "{{{langname}}} participles that express an agent performing an action in present time in middle voice.",
parents = {"participles"},
}
labels["present participles"] = {
description = "{{{langname}}} participles that express actions occurring in the present time.",
parents = {"participles"},
}
labels["present passive participles"] = {
description = "{{{langname}}} participles that express a patient having an action performed on it in present time.",
parents = {"participles"},
}
labels["pronoun possessive forms"] = {
description = "{{{langname}}} pronouns that are inflected to indicate possession.",
parents = {{name = "pronoun forms", sort = "possessive"}},
}
labels["pronunciation variants"] = {
description = "{{{langname}}} words that have alternative pronunciation-based spellings.",
parents = {"non-lemma forms"},
}
labels["singulatives"] = {
description = "{{{langname}}} plural nouns that are inflected for singular number.",
parents = {"noun forms"},
}
labels["verb causative forms"] = {
description = "{{{langname}}} verbs that are conjugated to express actions caused by external conditions.",
parents = {{name = "verb forms", sort = "causative"}},
}
labels["verb irregular forms"] = {
description = "{{{langname}}} verb forms that don't follow standard patterns of conjugation.",
parents = {{name = "verb forms", sort = "irregular"}},
}
labels["verb negative forms"] = {
description = "{{{langname}}} verbs that are conjugated to express negation.",
parents = {{name = "verb forms", sort = "negative"}},
}
labels["verb passive forms"] = {
description = "{{{langname}}} verbs that are conjugated to direct the action to the grammatical subject, by means of passive voice.",
parents = {{name = "verb forms", sort = "passive"}},
}
labels["verb simple past forms"] = {
description = "{{{langname}}} verbs that are conjugated to indicate events before the current moment.",
parents = {{name = "verb forms", sort = "simple past"}},
}
local labels2 = {}
-- Add "reconstructed" subcategories; 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 = "Non-lemma forms subcategories by language"
end
labels2["reconstructed " .. key] = {
description = "{{{langname}}} " .. key .. " that have been linguistically [[Wiktionary:Reconstructed terms|reconstructed]].",
umbrella_parents = "Non-lemma forms subcategories by language",
parents = {key, {name = "reconstructed terms", sort = key}}
}
end
-- These are top-level; don't (for the moment at least) add 'reconstructed alternative forms'.
-- These are created by setting the altform= parameter to {{head}} or full_headword() in [[Module:headword]]. See
-- [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]] for discussion.
labels2["alternative forms"] = {
description = "{{{langname}}} alternative forms of [[Wiktionary:Lemmas|lemmas]], i.e. variant forms or spellings that are attested but secondary, and typically not in common use.",
additional = "Such terms may be uncommon spelling variants; dialectal forms; historical, archaic or obsolete spellings; spellings in less-used scripts; or the like. " ..
"They are kept out of the lemma category to avoid cluttering it. Commonly used variants should not be placed in this category, but should be treated as lemmas.",
umbrella_parents = "Fundamental",
parents = {{name = "{{{langcat}}}", raw = true}},
}
-----------------------------------------------------------------------------
-- --
-- RAW CATEGORIES --
-- --
-----------------------------------------------------------------------------
raw_categories["Non-lemma forms subcategories by language"] = {
description = "Umbrella categories covering topics related to non-lemma forms.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Umbrella metacategories",
{name = "non-lemma forms", is_label = true, sort = " "},
},
}
return {LABELS = labels2, RAW_CATEGORIES = raw_categories}