မဝ်ဂျူ:category tree/poscatboiler/data/non-lemma forms
Introduction
[ပလေဝ်ဒါန်]This is the documentation page for the main data module for Module:category tree/poscatboiler, as well as for its submodules. Collectively, these modules handle generating the descriptions and categorization for almost all category pages. The only current exception is topic pages such as Category:en:Birds and Category:zh:State capitals of Germany, and the corresponding non-language-specific pages such as Category:Birds and Category:State capitals of Germany; these are handled by Module:category tree/topic cat.
Originally, there were a large number of Module:category tree implementations, of which Module:category tree/poscatboiler was only one. It originally handled part-of-speech categories like Category:French nouns and Category:German lemmas (and corresponding "umbrella" categories such as Category:Nouns by language and Category:Lemmas by language); hence the name. However, it has long since been generalized, and the name no longer describes its current use.
The main data module at Module:category tree/poscatboiler/data does not contain data itself, but rather imports the data from its submodules, and applies some post-processing.
- To find which submodule implements a specific category, use the search box on the right.
- To add a new data submodule, copy an existing submodule and modify its contents. Then, add its name to the
subpages
list at the top of Module:category tree/poscatboiler/data.
Concepts
[ပလေဝ်ဒါန်]The poscatboiler system internally distinguishes the following types of categories:
- Language categories. These are of the form
LANG LABEL
(e.g. Category:French lemmas and Category:English learned borrowings from Late Latin). Here,LANG
is the name of a language, andLABEL
can be anything, but should generally describe a topic that can apply to multiple languages. Note that the language mentioned byLANG
must currently be a regular language, not an etymology-only language. (Etymology-only languages include lects such as Provençal, considered a variety of Occitan, and Biblical Hebrew, considered a variety of Hebrew. See here for the list of such lects.) Most language categories have an associated umbrella category; see below. - Umbrella categories. These are normally of the form
LABEL by language
, and group all categories with the same label. Examples are Category:Lemmas by language and Category:Learned borrowings from Late Latin by language. Note that the label appears with an initial lowercase letter in a language category, but with an initial uppercase letter in an umbrella category, consistent with the general principle that category names are capitalized. Some umbrella categories are missing theby language
suffix; an example is Category:Terms borrowed from Latin, which groups categories of the formLANG terms borrowed from Latin
. Umbrella categories themselves are grouped into umbrella metacategories, which group related umbrella categories under a given high-level topic. Examples are Category:Lemmas subcategories by language (which groups umbrella categories describing different types of lemmas, such as Category:Nouns by language and Category:Interrogative adverbs by language) and Category:Terms derived from Proto-Indo-European roots (which groups umbrella categories describing terms derived from particular Proto-Indo-European roots, such as Category:Terms derived from the Proto-Indo-European root *preḱ- and Category:Terms derived from the Proto-Indo-European root *bʰeh₂- (speak)). The names of umbrella metacategories are not standardized (although many end insubcategories by language
), and internally they are handled as raw categories; see below. - Language-specific categories. These are of the same form
LANG LABEL
as regular language categories, but with the difference that the label in question applies only to a single language, rather than to all or a large group of languages. Examples are Category:Belarusian class 4c verbs, Category:Dutch separable verbs with bloot, and Category:Japanese kanji by kan'yōon reading. For these categories, it does not make sense to have a corresponding umbrella category. - Raw categories. These can have any form whatsoever, and may or may not have a language name in them. Examples are Category:Requests for images in Korean entries and Category:Terms with redundant transliterations/ru (which logically are language categories but do not follow the standard format of a language category); Category:Phrasebooks by language/Health (which is logically an umbrella category, but again with a nonstandard name); Category:Terms by etymology subcategories by language (an umbrella metacategory); and Category:Templates (a miscellaneous high-level category).
Under the hood, the poscatboiler system distinguishes two types of implementations for categories: individual labels (or individual raw categories), and handlers. Individual labels describe a single label, such as nouns
or refractory rhymes
. Similarly, an individual raw category describes a single raw category. Handlers, on the other hand, describe a whole class of similar labels or raw categories, e.g. labels of the form learned borrowings from SOURCE
where SOURCE
is any language or etymology language. Handlers are more powerful than individual labels, but require knowledge of Lua to implement.
Adding, removing or modifying categories
[ပလေဝ်ဒါန်]A sample entry is as follows (in this case, found in Module:category tree/poscatboiler/data/lemmas):
labels["adjectives"] = { description = "{{{langname}}} terms that give attributes to nouns, extending their definitions.", parents = {"lemmas"}, umbrella_parents = "Lemmas subcategories by language", }
This generates the description and categorization for all categories of the form "LANG adjectives" (e.g. Category:English adjectives or Category:Norwegian Bokmål adjectives), as well as for the umbrella category Category:Adjectives by language.
The meanings of these fields are as follows:
- The
description
field gives the description text that will appear when a user visits the category page. Here,{{{langname}}}
is automatically replaced with the name of the language in question. The text in this field is also used to generate the description of the umbrella category Category:Adjectives by language, by chopping off the{{{langname}}}
and capitalizing the next letter. - The
parents
field gives the labels of the parent categories. For example, Category:English adjectives will have Category:English lemmas as its parent category, and Category:Norwegian Bokmål adjectives will have Category:Norwegian Bokmål lemmas as its parent category. The umbrella category Category:Adjectives by language will automatically be added as an additional parent. - The
umbrella_parents
field specifies the parent category of the umbrella category Category:Adjectives by language (i.e. the umbrella metacategory which this page belongs to; see #Concepts above).
Category label fields
[ပလေဝ်ဒါန်]The following fields are recognized for the object describing a label:
parents
- A table listing one or more parent labels of this label. This controls the parent categories that the category is contained within, as well as the chain of breadcrumbs appearing across the top of the page (see below).
- An item in the table can be either a single string (the parent label), or a table containing (at least) the two elements
name
andsort
. In the latter case,name
specifies the parent label name, while thesort
value specifies the sort key to use to sort it in that category. The default sort key is the category's label. - If a parent label begins with
Category:
it is interpreted as a raw category name, rather than as a label name. It can still have its own sort key as usual. - The first listed parent controls the category's parent breadcrumb in the chain of breadcrumbs at the top of the page. (The breadcrumb of the category itself is determined by the
breadcrumb
setting, as described below.)
- An item in the table can be either a single string (the parent label), or a table containing (at least) the two elements
description
- A plain English description for the label. This should generally be no longer than one sentence. Place additional, longer explanatory text in the
additional=
field described below, and put{{wikipedia}}
boxes in theintro=
field described below so that they are correctly right-aligned with the description. Template invocations and special template-like references such as{{{langname}}}
and{{{langcode}}}
will be expanded appropriately; see #Template substitutions in field values below. breadcrumb
- The text of the last breadcrumb that appears at the top of the category page.
- By default, it is the same as the category label, with the first letter capitalized.
- The value can be either a string, or a table containing two elements called
name
andnocap
. In the latter case,name
specifies the breadcrumb text, whilenocap
can be used to disable the automatic capitalization of the breadcrumb text that normally happens. - Note that the breadcrumbs collectively are the chain of links that serve as a navigation aid for the hierarchical organization of categories. For example, a category like Category:French adjectives will have a breadcrumb chain similar to "Fundamental » All languages » French » Lemmas » Adjectives", where each breadcrumb is a link to a category at the appropriate level. The last breadcrumb here is "Adjectives", and its text is controlled by this field.
displaytitle
-
- Apply special formatting such as italics to the category page title, as with the
{{DISPLAYTITLE:...}}
magic word (see mw:Help:Magic words). The value of this is either a string (which should be the formatted category title, without the precedingCategory:
) or a Lua function to generate the formatted category title. A Lua function is most useful inside of a handler (see #Handlers below). The Lua function is passed two parameters, the raw category title (without the precedingCategory:
) and the language object of the category's language (ornil
for umbrella categories), and should return the formatted category title (again without the precedingCategory:
). If the value of this field is a string, template invocations and special template-like references such as{{{langname}}}
and{{{langcode}}}
will be expanded appropriately; see below. See Module:category tree/poscatboiler/data/terms by etymology and Module:category tree/poscatboiler/data/lang-specific/nl for examples of usingdisplaytitle=
.
- Apply special formatting such as italics to the category page title, as with the
intro
- Introductory text to display at the very top of the page. This is similar to the
description=
field, but it logically displays before the edit and recent-entries boxes on the right side, while the description displays after. Theintro=
field is mostly useful for right-aligned text such as{{wikipedia}}
boxes, which if placed in theintro=
field will correctly align to the right ofdescription=
text. Template invocations and special template-like references such as{{{langname}}}
and{{{langcode}}}
are expanded appropriately, just as withdescription=
; see #Template substitutions in field values below. additional
- Additional text to display directly after the text in the the
description=
field. The difference between the two is thatdescription=
text will also be shown in the list of children categories shown on the parent category's page, while theadditional=
text will not. For this reason, useadditional=
instead ofdescription=
for long explanatory notes, See also references and the like, and keepdescription=
relatively short. Template invocations and special template-like references such as{{{langname}}}
and{{{langcode}}}
are expanded appropriately, just as withdescription=
; see #Template substitutions in field values below. umbrella
- A table describing the umbrella category that collects all language-specific categories associated with this label, or the special value
false
to indicate that there is no umbrella category. The umbrella category is normally called "LABEL by language". For example, for adjectives, the umbrella category is named Category:Adjectives by language, and is a parent category (in addition to any categories specified usingparents
) of Category:English adjectives, Category:French adjectives, Category:Norwegian Bokmål adjectives, and all other language-specific categories holding adjectives. This table contains the following fields:name
- The name of the umbrella category. It defaults to "LABEL by language". If you change this, you will probably have to modify Module:auto cat to recognize the new name of the umbrella category.
description
- A plain English description for the umbrella category. By default, it is derived from the
description
field of the category itself by removing any{{{langname}}}
,{{{langcode}}}
or{{{langcat}}}
template parameter reference and capitalizing the remainder. Text is automatically added to the end indicating that this category is an umbrella category that only contains other categories, and does not contain pages describing terms. parents
- The parent category or categories of the umbrella category. This can either be a single string specifying a category (with or without the
Category:
prefix), a table with fieldsname
(the category name) andsort
(the sort key, as in the outerparents
field described above), or a list of either type of entity. breadcrumb
- The last breadcrumb in the chain of breadcrumbs at the top of the category page; see above. By default, this is the category label (i.e. the same as the umbrella category name, minus the final "by language" text).
displaytitle
- Apply special formatting such as italics to the umbrella category page title; see above.
intro
- Like the
intro=
field on regular category pages; see above. additional
- Like the
additional=
field on regular category pages; see above. toc_template
,toc_template_full
- Override the table of contents bar used on umbrella pages. See below. It's unlikely you will ever need to set this.
umbrella_parents
- The same as the
parents
subfield of theumbrella
field. This typically specifies a single umbrella metacategory to which the page's corresponding umbrella page belongs; see #Concepts above). A separate field is provided for this because the umbrella's parent or parents always need to be given, whereas other umbrella properties can usually be defaulted. (In practice, you will find that most entries in a subpage of Module:category tree/poscatboiler/data do not explicitly specify the umbrella's parent. This is because a default value is supplied near the end of the "LABELS" section in which the entry is found.) toc_template
- The template or templates to use to display the "table of contents" bar for easier navigation on categories with multiple pages of entries. By default, categories with more than 200 entries or 200 subcategories display a language-appropriate table of contents bar whose contents are held in a template named
CODE-categoryTOC
, whereCODE
is the language code of the category's language. (If no such template exists, no table of contents bar is displayed. If the category has no associated language, as with umbrella pages, the English-language table of contents bar is used.) For example, the category Category:Spanish interjections (and other Spanish-language categories) use Template:es-categoryTOC to display a Spanish-appropriate table of contents bar. (In the case of Spanish, this includes entries for Ñ and for acute-accented vowels such as Á and Ó.) To override this behavior, specify a template or a list of templates intoc_template
. The first template that exists will be used; if none of the specified templates exist, the regular behavior applies, i.e. the language-appropriate table of contents bar is selected.- Special strings such as
{{{langcode}}}
(to specify the language code of the category's language) can be used in the template names; see below. - Use the special value
false
to disable the table of contents bar. - An example of a category that uses this property is "LANG romanizations". For example, the category Category:Gothic romanizations would by default use the Gothic-specific template Template:got-categoryTOC to display a Gothic-script table of contents bar. This is inappropriate for this particular category, which contains Latin-script romanizations of Gothic terms rather than terms written in the Gothic script. To fix this, the "romanizations" label specifies a
toc_template
value of{"{{{langcode}}}-rom-categoryTOC", "en-categoryTOC"
}, which first checks for a special Gothic-romanization-specific template Template:got-rom-categoryTOC (which in this case does exist), and falls back to the English-language table of contents template.
- Special strings such as
toc_template_full
- Similar to
toc_template
but used for categories with large numbers of entries (specifically, more than 2,500 entries or 2,500 subcategories). If none of the specified templates exist, the templates listed intoc_template
are tried, and if none of them exist either, the default behavior applies. In this case, the default behavior is to use a language-appropriate "full" table of contents template namedCODE-categoryTOC/full
, and if that doesn't exist, fall back to the regular table of contents template namedCODE-categoryTOC
. An example of a "full" table of contents template is Template:es-categoryTOC/full, which shows links for all two-letter combinations and appears on pages such as Category:Spanish nouns, with over 50,000 entries. catfix
- Specifies the language code of the language to use when calling the
catfix()
function in Module:utilities on this page. Thecatfix()
function is used to ensure that page names in foreign scripts show up in the correct fonts and are linked to the correct language.- The default value is the category's language, if any (for example, the language
LANG
in pages of the formLANG LABEL
). If the category has no associated language, or if the settingcatfix = false
is used, the catfix mechanism is not applied. - The setting
catfix = false
is used, for example, on theromanizations
label (which holds Latin-script romanizations of foreign-script terms, rather than terms in the language's native script) and theredlinks
labels (which holds pages linking to nonexistent terms in the language in question). If this is omitted, for example, then pages in Category:Manchu romanizations will show up oriented vertically despite being in Latin script, and pages in Category:Cantonese redlinks will show up using a double-width font despite mostly not being Cantonese-language pages. - The setting
catfix = "en"
is used for example on categories of the formRequests for translations into LANG
(see Module:category tree/poscatboiler/data/entry maintenance) because these categories contain English pages need translations into a given language, rather than containing pages of that language. - Note that setting a particular language for
catfix=
will normally cause that language's table of contents page to display in place of the category's normal language, and setting a value offalse
will normally cause the English table of contents page to display. In both cases, this behavior can be overridden by specifying thetoc_template=
ortoc_template_full=
fields.
- The default value is the category's language, if any (for example, the language
|hidden = true
- Specifies that the category is hidden. This should be used for maintenance categories. (Hidden categories do not show up in the list of categories at the bottom of a page, but do show up when searched for in the search box.)
|can_be_empty = true
- Specifies that the category should not be deleted when empty. This should be used for maintenance categories.
Template substitutions in field values
[ပလေဝ်ဒါန်]Template invocations can be inserted in the text of description
, parents
(both name and sort key), breadcrumb
, toc_template
and toc_template_full
values, and will be expanded appropriately. In addition, the following special template-like invocations are recognized and replaced by the equivalent text:
{{PAGENAME}}
- The name of the current page. (Note that two braces are used here instead of three, as with the other parameters described below.)
{{{langname}}}
- The name of the language that the category belongs to. Not recognized in umbrella fields.
{{{langcode}}}
- The code of the language that the category belongs to (e.g.
en
for English,de
for German). Not recognized in umbrella fields. {{{langcat}}}
- The name of the language's main category, which adds "language" to the regular name. Not recognized in umbrella fields.
Raw categories
[ပလေဝ်ဒါန်]Raw categories are treated similarly to regular labels. The main differences are:
Handlers
[ပလေဝ်ဒါန်]It is also possible to have handlers that can handle arbitrarily-formed labels, e.g. "###-syllable words" for any ###; "terms in XXX script" for any XXX; or "learned borrowings from LANG" for any LANG. As an example, the following is the handler for "terms coined by COINER" (such as Category:English terms coined by Lewis Carroll):
table.insert(handlers, function(data) local coiner = data.label:match("^terms coined by (.+)$") if coiner then return { description = "{{{langname}}} terms coined by " .. coiner .. ".", breadcrumb = coiner, umbrella = false, parents = {{ name = "coinages", sort = coiner, }}, } end end)
The handler checks if the passed-in label has a recognized form, and if so, returns an object that follows the same format as described above for directly-specified labels. In this case, the handler disables the umbrella category "Terms coined by COINER by language" because most people coin words in only one language.
The handler is passed a single argument data
, which is an object containing the following fields:
label
: the label;lang
: the language object of the language at the beginning of the category, ornil
for no language (this happens with umbrella categories);sc
: the script code of the script mentioned in the category, if the category is of the form "LANG LABEL in SCRIPT", ornil
otherwise;args
: a table of extra parameters passed to{{auto cat}}
.
If the handler interprets the extra parameters passed as data.args
, it should return two values: a label object (as described above), and the value true
. Otherwise, an error will be thrown if any extra parameters are passed to {{auto cat}}
. An example of a handler that interprets the extra parameters is the affix-cat handler in Module:category tree/poscatboiler/data/terms by etymology, which supports {{auto cat}}
parameters |alt=
, |sort=
, |tr=
and |sc=
. The |alt=
parameter in particular is used to specify extra diacritics to display on the affix that forms part of the category name, as in categories such as Category:Latin words suffixed with -inus (properly -īnus).
For further examples, see Module:category tree/poscatboiler/data/words by number of syllables, Module:category tree/poscatboiler/data/terms by script or Module:category tree/poscatboiler/data/terms by etymology.
Note that if a handler is specified, the module should return a table holding both the label and handler data; see the above modules.
Language-specific labels
[ပလေဝ်ဒါန်]Support exists for labels that are specialized to particular languages. A typical label such as "verbs" applies to many languages, but some categories have labels that are specialized to a particular language, e.g. Category:Belarusian class 4c verbs or Category:Dutch prefixed verbs with ver-. Here, the label "class 4c verbs" is specific to Belarusian with a description and other properties only for this particular language, and similarly for the Dutch-specific label "prefixed verbs with ver-". Yet, it is desirable to integrate these categories into the poscatboiler hierarchy, so that e.g. breadcrumbs and other features are available. This can be done by creating a module such as Module:category tree/poscatboiler/data/lang-specific/be (for Belarusian) or Module:category tree/poscatboiler/data/lang-specific/nl (for Dutch), and specifying labels and/or handlers in the same fashion as is done for language-agnostic categories. See Module:category tree/poscatboiler/data/lang-specific/documentation for more information.
Subpages
[ပလေဝ်ဒါန်]local labels = {}
local raw_categories = {}
-----------------------------------------------------------------------------
-- --
-- LABELS --
-- --
-----------------------------------------------------------------------------
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.
for _, spec in ipairs {
"နာမဝိသေသန",
"ကြိယာဝိသေသန",
{"article", "determiner"},
{"circumfix", "morpheme"},
{"classifier", false},
{"comparative adjective", false},
{"comparative adverb", false},
"conjunction",
"determiner",
{"equative adjective", false},
{"equative adverb", false},
{"exaggerated adjective", false},
{"excessive adjective", false},
{"infinitive", false},
"interjection",
"morpheme",
"နာမ်",
"numeral",
"participle",
"particle",
{"past participle", "participle"},
{"prefix", "morpheme"},
"proper noun",
"postposition",
"preposition",
"သဗ္ဗနာမ်",
{"suffix", "morpheme"},
"ကြိယာ",
{"superlative adjective", false},
{"superlative adverb", false},
} do
local pos, parent_pos
if type(spec) == "table" then
pos, parent_pos = unpack(spec)
else
pos = spec
parent_pos = "non-lemma"
end
local plpos = require("Module:string utilities").pluralize(pos)
local parents = {}
if parent_pos ~= false then
table.insert(parents, parent_pos .. " forms")
end
table.insert(parents, {name = plpos, sort = "**"})
labels[pos .. " forms"] = {
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["comparative adjectives"] = {
description = "{{{langname}}} adjectives that express attributes in a relatively higher degree, or serve to set apart one thing from another.",
parents = {"adjective forms"},
}
labels["elative adjectives"] = {
description = "{{{langname}}} adjectives that express attributes in a relatively higher degree, or in the highest possible degree.",
parents = {"adjective forms"},
}
labels["comparative adverbs"] = {
description = "{{{langname}}} adverbs that express attributes in a relatively higher degree, or serve to set apart one thing from another.",
parents = {"adverb 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["determiner comparative forms"] = {
description = "{{{langname}}} determiners that are inflected to display relative degrees of given qualities between nouns.",
parents = {{name = "determiner forms", sort = "comparative forms"}},
}
labels["diminutive gerunds"] = {
description = "{{{langname}}} diminutives of gerunds.",
parents = {"verb forms"},
}
labels["equative adjectives"] = {
description = "{{{langname}}} adjectives that express similar degrees of given qualities between nouns, i.e. '''A''' is as ''(insert adjective)'' as '''B'''.",
parents = {"adjective forms"},
}
labels["equative adverbs"] = {
description = "{{{langname}}} adverbs that express similar degrees of given qualities between verbs, i.e. '''A''' as ''(insert adverb)'' as '''B'''.",
parents = {"adverb forms"},
}
labels["exaggerated adjectives"] = {
description = "{{{langname}}} adjectives that express attributes in an even more magnified degree than the superlative forms.",
parents = {"adjective forms"},
}
labels["excessive adjectives"] = {
description = "{{{langname}}} adjectives that express attributes in an excessive degree.",
parents = {"adjective forms"},
}
labels["excessive adverbs"] = {
description = "{{{langname}}} adverbs that express attributes in an excessive degree.",
parents = {"adverb 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/poscatboiler/data/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 = {
"နာမဝိသေသန",
"ကြိယာဝိသေသန",
"determiner",
"interjection",
"နာမ်",
"numeral",
"participle",
"particle",
"prefix",
"preposition",
"သဗ္ဗနာမ်",
"နာမ်မကိတ်ညဳ",
"ကြိယာ",
}
for _, pos in ipairs(inflected_pos_for_mutation) do
local plpos = require("Module:string utilities").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["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"},
}
for _, pos in ipairs { "adjective", "adverb", "determiner" } do
local plpos = pos .. "s"
labels["superlative " .. plpos] = {
description = "{{{langname}}} " .. plpos .. " that express attributes in their highest possible degrees.",
parents = {pos .. " forms"},
}
end
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
-----------------------------------------------------------------------------
-- --
-- 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}