Module:category tree/poscatboiler/data/templates


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.

The poscatboiler system internally distinguishes the following types of categories:

  1. 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, and LABEL can be anything, but should generally describe a topic that can apply to multiple languages. Note that the language mentioned by LANG 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.
  2. 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. 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 in subcategories by language), and internally they are handled as raw categories; see below.
    • Note that umbrella categories are just a special type of parent category with built-in support in the category-handling system. In particular, some types of categories have what is logically an umbrella category but which has a nonstandard name. These are handled as just another parent category, with a separate raw-category entry for the parent itself. An example is categories of the form LANG phrasebook/AREA (e.g. Category:English phrasebook/Health), whose umbrella category has the nonstandard name Phrasebooks by language/AREA (e.g. Category:Phrasebooks by language/Health). Another example is categories of the form LANG terms borrowed back into LANG, with a nonstandard umbrella category Category:Terms borrowed back into the same language. Both of these examples are handled by disabling the standard umbrella category support and listing the nonstandard umbrella category as an additional parent.
    • Some umbrella categories are missing the by language suffix; an example is Category:Terms borrowed from Latin, which groups categories of the form LANG terms borrowed from Latin. There is special support for umbrella categories of this nature, so they do not need to be handled as described above for umbrella categories with nonstandard names.
  3. 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.
  4. 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:Rhymes:Polish/ajkɛ (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):

{{{1}}}

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:

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 and sort. In the latter case, name specifies the parent label name, while the sort value specifies the sort key to use to sort it in that category. The default sort key is the category's label.
  • 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.)
  • Normally the specified parent label refers to another category of the same type. That is, if the category is a language category, the parent label specifies another language category with the same language, and if the category is a raw category, the parent label specifies another raw category. This can be changed as follows:
    • If the category is a language category:
      • Add the property {{{1}}} to specify that the parent is a raw category.
      • Add the property {{{1}}} to specify that the parent is a language category for the language code code instead of the current language. Note that template substitutions happen in the lang field; see #Template substitutions in field values below.
      • Add the property {{{1}}} to specify that the parent is an umbrella category.
    • If the category is a raw category:
      • Add the properties {{{1}}} and {{{1}}} to specify that the parent is a language category with the specified language code code. Template substitutions happen in the lang field, as above.
      • Add the properties {{{1}}} and {{{1}}} to specify that the parent is an umbrella category.
  • If a parent label begins with Category: it is interpreted as a category outside the poscatboiler system. It can still have its own sort key as usual.
  • Parent items can also have the properties {{{1}}} to specify a script code script_code for script-specific categories (e.g. Category:Pali nouns in Thai script) and/or {{{1}}}} to specify additional arguments, for categories implemented using a handler that accepts or requires additional arguments passed to {{auto cat}} (e.g. a category like Category:Latin terms suffixed with -inus or Category:Okinawan language). Template substitutions happen in the values of both of these properties; see #Template substitutions in field values below.
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 the topright 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 and nocap. In the latter case, name specifies the breadcrumb text, while nocap 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 preceding Category:) 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 preceding Category:) and the language object of the category's language (or nil for umbrella categories), and should return the formatted category title (again without the preceding Category:). 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 using displaytitle.
topright
Introductory text to display right-aligned, before the edit and recent-entries boxes on the right side. This field should be used for {{wikipedia}} and other similar boxes. Template invocations and special template-like references such as {{{langname}}} and {{{langcode}}} are expanded appropriately, just as with description; see #Template substitutions in field values below. Compare the preceding field, which is similar to topright but used for left-aligned text placed above the description.
preceding
Introductory text to display directly before the text in the description field. The difference between the two is that description text will also be shown in the list of children categories shown on the parent category's page, while the preceding text will not. For this reason, use preceding instead of description for {{also}} hatnotes and similar text, and keep description relatively short. Template invocations and special template-like references such as {{{langname}}} and {{{langcode}}} are expanded appropriately, just as with description; see #Template substitutions in field values below. Compare the topright field, which is similar to preceding but is right-aligned, placed above the edit and recent-entries boxes.
additional
Additional text to display directly after the text in the the description field. The difference between the two is that description text will also be shown in the list of children categories shown on the parent category's page, while the additional text will not. For this reason, use additional instead of description for long explanatory notes, See also references and the like, and keep description relatively short. Template invocations and special template-like references such as {{{langname}}} and {{{langcode}}} are expanded appropriately, just as with description; 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 using parents) 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". You should not use this, even if the umbrella category has a nonstandard name, because if you set it, you will have to modify Module:auto cat to recognize the new name of the umbrella category. Instead, set {{{1}}} and list the nonstandard umbrella category as an additional parent (and add a raw-category entry for the umbrella category itself; see the implementation of categories like Category:English terms borrowed back into English for an example).
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 fields name (the category name) and sort (the sort key, as in the outer parents 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.
topright
Like the topright field on regular category pages; see above.
preceding
Like the preceding 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 the umbrella 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, where CODE 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 {{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 in toc_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 {{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 {{got-rom-categoryTOC}} (which in this case does exist), and falls back to the English-language table of contents template.
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 in toc_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 named CODE-categoryTOC/full, and if that doesn't exist, fall back to the regular table of contents template named CODE-categoryTOC. An example of a "full" table of contents template is {{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. The catfix() 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 form LANG LABEL). If the category has no associated language, or if the setting {{{1}}} is used, the catfix mechanism is not applied.
  • The setting {{{1}}} is used, for example, on the romanizations label (which holds Latin-script romanizations of foreign-script terms, rather than terms in the language's native script) and the terms with redundant transliterations labels (which holds pages mentioning terms in the language in question with redundant transliterations). 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 terms with redundant transliterations will show up using a double-width font despite mostly not being Cantonese-language pages.
  • The setting {{{1}}} is used for example on categories of the form Requests 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 of false will normally cause the English table of contents page to display. In both cases, this behavior can be overridden by specifying the toc_template or toc_template_full fields.
|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

සංස්කරණය

Arbitrary 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 are treated similarly to regular labels. The main differences are:

  1. They are stored in a separate raw_categories table. The key is the full category name (rather than the label name, as in the case of language categories), and the value is a structure much like for language categories.
  2. Raw categories have no corresponding umbrella category, so the umbrella and umbrella_parents fields are unnecessary and do nothing. If you want an umbrella category that groups several related raw categories, you should add the umbrella category yourself as an additional parent (and create a separate entry in the raw_categories table for this umbrella category).

See Module:category tree/poscatboiler/data/modules for an example of a module with several labels and raw categories.

It is also possible to have handlers that can handle arbitrarily-formed labels and raw categories. There are two types of handlers:

  1. label handlers handle language categories such as lang ###-syllable words for any lang and ### (e.g. Category:English 3-syllable words), and lang learned borrowings from source for any lang and source (e.g. Category:Spanish learned borrowings from Ancient Greek);
  2. raw handlers handle raw categories such as Rhymes:lang/rhyme for any lang and rhyme (e.g. Category:Rhymes:Polish/ajkɛ).

Note that the difference between the two is that label handlers are used for categories prefixed with the language name (and associated umbrella categories, such as Category:3-syllable words by language and Category:Learned borrowings from Ancient Greek by language), while raw handlers are used for arbitrarily-named raw categories. Raw categories may have a language name or code in them (as in the example above), but it generally does not occur as a prefix.

As an example, the following is the label handler for the label terms coined by coiner (such as Category:English terms coined by Lewis Carroll):

{{{1}}}

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:

  1. label: the label;
  2. lang: the language object of the language at the beginning of the category, or nil for no language (this happens with umbrella categories);
  3. sc: the script code of the script mentioned in the category, if the category is of the form lang label in script, or nil otherwise;
  4. 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 terms suffixed with -inus (properly -īnus).

For further examples, see Module:category tree/poscatboiler/data/terms by lexical property, Module:category tree/poscatboiler/data/terms by script or Module:category tree/poscatboiler/data/terms by etymology.

Raw handlers are similar to label handlers in that they also accept a single argument data, but this object contains only the following fields:

  1. category: the raw category;
  2. args: a table of extra parameters passed to {{auto cat}}.

Here, there is no language or script object passed in. If there is a language in the category name, it needs to be handled inside of the handler. For example, the following is the raw handler for categories of the form Varieties of lang: {{{1}}}

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 and handlers

සංස්කරණය

Support exists for labels and handlers 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. Note that once you create a per-language module, you must add the language code to the langs_with_modules table in Module:category tree/poscatboiler/data/lang-specific listing all the languages with language-specific modules; otherwise, the corresponding categories won't be recognized.


local labels = {}
local raw_categories = {}



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


labels["සැකිලි"] = {
	description = "ප්‍රවේශ නිර්මාණය සහ කළමනාකරණය සඳහා සහාය සලසන, නැවත-නැවත භාවිතයට ගත හැකි විකි කේත අඩංගු, {{{langname}}} [[වික්ෂනරි:සැකිලි|සැකිලි]].",
	umbrella = {
		parents = {{name = "සැකිලි", sort = " "}},
		breadcrumb = "භාෂාව අනුව",
	},
	parents = {{name = "{{{langcat}}}", raw = true}},
}

labels["auto-table templates"] = {
	description = "Templates that contain {{{langname}}} tables generated automatically.",
	additional = "They use the <code>table:</code> prefix. For example, see [[Template:table:chess pieces/en]].",
	parents = {"සැකිලි"},
}

labels["category boilerplate templates"] = {
	description = "Templates used to generate descriptions and categorization for category pages.",
	parents = {"සැකිලි"},
}

labels["අර්ථ දැක්වීම් සැකිලි"] = {
	description = "Templates used in the [[Wiktionary:Glossary#definition line|definition line]] of {{{langname}}} entries to help in creating definitions.",
	parents = {"සැකිලි"},
}

labels["ප්‍රවේශ සැකිලි"] = {
	description = "Templates used to help in the creation of {{{langname}}} entries.",
	umbrella_parents = {"Templates subcategories by language", "ප්‍රවේශ සැකිලි"},
	parents = {"සැකිලි"},
}

labels["නිරුක්ති සැකිලි"] = {
	description = "Templates used in the etymology section of {{{langname}}} entries.",
	parents = {"සැකිලි"},
}

labels["experimental templates"] = {
	description = "Templates used to test possible content for {{{langname}}} entries.",
	parents = {"සැකිලි"},
}

labels["form-of templates"] = {
	description = "Templates used on the definition line of entries for inflected forms of words in {{{langname}}}, to link back to the main form.",
	parents = {"සැකිලි"},
}

labels["යොමු වචන පේළි සැකිලි"] = {
	description = "{{{langname}}} යොමු වචන අඩංගු පේළි පෙන්වීම සඳහා භාවිතා වන සැකිලි.",
	parents = {"සැකිලි"},
}

labels["index templates"] = {
	description = "Templates used to organize {{{langname}}} indexes.",
	parents = {"සැකිලි"},
}

labels["inflection-table templates"] = {
	description = "Templates used to show inflection tables for {{{langname}}} terms.",
	parents = {"සැකිලි"},
}

-- Do particular types of inflection-table templates.
for _, pos in ipairs({
	"adjective",
	"adverb",
	"determiner",
	"nominal",
	"noun",
	"numeral",
	"participle",
	"postposition",
	"particle",
	"preposition",
	"pronoun",
	"verb",
}) do
	labels[pos .. " inflection-table templates"] = {
		description = "Templates used to show declension tables for {{{langname}}} " .. pos .. "s.",
		parents = {"inflection-table templates"},
	}
end

labels["ලැයිස්තු සැකිලි"] = {
	description = "{{{langname}}} ලැයිස්තු අඩංගු වන සැකිලි.",
	additional = "මේවා <code>list:</code> උපසර්ගය භාවිතා කරයි. උදාහරණයක් සඳහා, [[සැකිල්ල:list:Latin script letters/en]] වෙතට යොමු වන්න.",
	parents = {"සැකිලි"},
}

labels["mutation templates"] = {
	description = "Templates used to show mutation of {{{langname}}} words.",
	parents = {"සැකිලි"},
}

labels["උච්චාරණ සැකිලි"] = {
	description = "Templates used to generate IPA pronunciation, rhymes, hyphenation, etc. for {{{langname}}} entries.",
	umbrella_parents = {"Templates subcategories by language", "ප්‍රවර්ගය:Pronunciation templates"},
	parents = {"සැකිලි"},
}

labels["උපුටා දැක්වීම් සැකිලි"] = {
	description = "Templates used to generate quotations for {{{langname}}} entries.",
	umbrella_parents = {"Templates subcategories by language", "ප්‍රවර්ගය:Citation templates"},
	parents = {"සැකිලි"},
}

labels["quotation navigation templates"] = {
	description = "Templates used in the documentation of {{{langname}}} [[Wiktionary:Quotations/Templates|quotation templates]] in order to link to quotation templates for other works by the same author.",
	umbrella_parents = {"Templates subcategories by language", "Category:Navigation templates", "Category:Quotation templates by language"},
	parents = {"උපුටා දැක්වීම් සැකිලි"},
}

labels["මූලාශ්‍ර සැකිලි"] = {
	topright = function(data)
		if data.lang and data.lang:getCode() == "ine-pro" then
			return "{{shortcut|WT:RTINE}}"
		end
	end,
	umbrella = {
		preceding = "{{also|Wiktionary:Reference templates}}\n{{also|Template:refcat}}",
		parents = {"Templates subcategories by language", "ප්‍රවර්ගය:මූලාශ්‍ර සැකිලි"},
		breadcrumb = "භාෂාව අනුව",
	},
	description = "{{{langname}}} ප්‍රවේශ සඳහා මූලාශ්‍ර පාද සටහන් ජනනය පිණිස භාවිතා වන සැකිලි.",
	parents = {"සැකිලි"},
}

labels["supplementary templates"] = {
	description = "Templates used to keep contents for other {{{langname}}} templates.",
	parents = {"සැකිලි"},
}

labels["භාවිතා සැකිලි"] = {
	description = "Templates used to show usage notes in {{{langname}}} entries.",
	parents = {"සැකිලි"},
}


-- Add 'umbrella_parents' key if not already present.
for key, data in pairs(labels) do
	if not data.umbrella and not data.umbrella_parents then
		data.umbrella_parents = "Templates subcategories by language"
	end
	-- Add breadcrumb by chopping off the parent from the end of the label, if possible.
	if #data.parents == 1 and type(data.parents[1]) == "string" then
		local parent_re = " " .. require("Module:string utilities").pattern_escape(data.parents[1]) .. "$"
		if key:find(parent_re) then
			data.breadcrumb = key:gsub(parent_re, "")
		end
	end
end



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


raw_categories["සැකිලි"] = {
	topright = "{{shortcut|WT:T}}",
	description = "An organizing category intended for all templates in use on Wiktionary.",
	additional = "''See also: [[Wiktionary:Templates]], [[meta:Help:Template]]''",
	parents = {"වික්ෂනරිය"},
}

raw_categories["පරිපාලන සැකිලි"] = {
	description = "Templates used in the administration of Wiktionary.",
	additional = "They are only used outside of mainspace and are distinct from [[:Category:Maintenance templates|maintenance templates]], which are used in maintaining entries.",
	parents = {"සැකිලි"},
}

raw_categories["Alternative orthography templates"] = {
	description = "Templates used to generate lists of links to alternative script forms for entries, or alternative forms according to different orthographic systems in general.",
	additional = "Not for templates relating to mere alternative forms within the same orthographic system.",
	parents = {"අක්ෂරක්‍රම සැකිලි", "අභ්‍යන්තර සබැඳි සැකිලි"},
}

raw_categories["ලේඛනාරක්ෂණ සැකිලි"] = {
	description = "Templates used on archived or otherwise inactive pages.",
	parents = {"පරිපාලන සැකිලි"},
}

raw_categories["Checkuser templates"] = {
	description = "Templates related to [[Wiktionary:Requests for checkuser|checkuser requests]].",
	parents = {"පරිපාලන සැකිලි"},
}

raw_categories["Editnotices"] = {
	description = "Templates used to display notices in edit mode.",
	parents = {"පරිපාලන සැකිලි"},
}

raw_categories["උපග්‍රන්ථ සැකිලි"] = {
	description = "Templates used in appendices or to link to appendices.",
	parents = {"සැකිලි", "ප්‍රවර්ගය:උපග්‍රන්ථ"},
}

raw_categories["Swadesh list templates"] = {
	description = "Templates used on pages that contain [[w:Swadesh list]]s.",
	parents = {"උපග්‍රන්ථ සැකිලි"},
}

raw_categories["Astrology templates"] = {
	description = "Templates that display astrology-related diagrams or boxes.",
	parents = {"සැකිලි"},
}

raw_categories["ශ්‍රව්‍ය සහාය සැකිලි"] = {
	description = "Templates used to play or request audio files.",
	parents = {"සැකිලි"},
}

raw_categories["Auto-table templates"] = {
	description = "Templates used to generate word tables (like [[Template:table:seasons]]).",
	additional = "See also [[:Category:Auto-table templates by language]].",
	parents = {"සැකිලි"},
}

raw_categories["Box templates"] = {
	description = "General purpose box templates.",
	additional = "If you're considering making a template that looks like a box, look here first!",
	parents = {"සැකිලි"},
}

raw_categories["ප්‍රවර්ගකරණ සැකිලි"] = {
	preceding = "{{also|:Category:Category modules}}",
	description = "Templates used to categorize terms or entries.",
	additional = "([[:Category:Category templates]], on the other hand, contains templates used in the category namespace.)",
	parents = {"සැකිලි"},
}

raw_categories["ප්‍රවර්ග සැකිලි"] = {
	description = "Templates used in the category namespace.",
	additional = "([[:Category:Categorization templates]], on the other hand, contains templates used to categorize pages.)",
	parents = {"සැකිලි"},
}

raw_categories["Category boilerplate templates"] = {
	description = "Templates used to generate the text of category pages.",
	parents = {"ප්‍රවර්ග සැකිලි"},
}

raw_categories["TOC templates"] = {
	description = "Templates used to generate a list of linked letters to navigate the pages listed in categories.",
	parents = {"ප්‍රවර්ග සැකිලි"},
}

raw_categories["Character info templates"] = {
	description = "Templates that utilize {{temp|character info}}.",
	parents = {"සැකිලි"},
}

raw_categories["Character insertion templates"] = {
	description = "Templates that provide easier ways to type characters that are not found in most keyboard layouts.",
	parents = {"සැකිලි"},
}

raw_categories["Templates for generating characters used in wiki code"] = {
	description = "Templates used to generate characters that are reserved for specific wiki code functions and cannot be directly entered.",
	additional = "An alternative to using these templates is to use an HTML entity such as <code>&amp;#91</code> " ..
	"for a left bracket.<br />" ..
	"Note that the templates below are sorted by the first character of the wikicode that each template generates.",
	parents = {"Character insertion templates"},
}

raw_categories["Chemistry templates"] = {
	description = "Templates that display chemistry-related diagrams or boxes.",
	parents = {"සැකිලි"},
}

raw_categories["Chess templates"] = {
	description = "Templates that display chess diagrams.",
	parents = {"සැකිලි"},
}

raw_categories["උපහරණ සැකිලි"] = {
	preceding = "{{ombox|type=speedy|text=Some templates may be marked '''FOR TESTING ONLY'''. Do not use these in entries, if requested on the template page itself. Take a look at the template page before using it.}}",
	description = "Templates used to generate citations and quotations.",
	additional = [=[
{{citation templates}}

== අමතර අවධානයට ==
* [[Wiktionary:Quotations]]
* [[:Category:Reference templates]] for specific templates to well-known and widely used sources.]=],
	parents = {"සැකිලි"},
}

-- Skipped: Concordance templates

raw_categories["Control flow templates"] = {
	description = "Templates to aid in control-flow constructs, which the template language is normally limited in.",
	parents = {"සැකිලි"},
}

raw_categories["Cross reference templates"] = {
	description = "Templates used to create cross-references between sections.",
	parents = {"සැකිලි"},
}

raw_categories["Dating templates"] = {
	description = "Templates for displaying dates.",
	parents = {"සැකිලි"},
}

raw_categories["අර්ථ දැක්වීම් සැකිලි"] = {
	description = "Templates used in the [[Wiktionary:Glossary#definition line|definition line]] to help in creating definitions.",
	parents = {"සැකිලි"},
}

raw_categories["Form-of templates"] = {
	description = "Templates used in defining inflections or variants of a given lemma.",
	parents = {"අර්ථ දැක්වීම් සැකිලි"},
}

raw_categories["Grammar form-of templates"] = {
	description = "Templates used in defining terms that stand in a particular grammatical relation to a given lemma.",
	parents = {"Form-of templates"},
}

raw_categories["Conjugation form-of templates"] = {
	description = "Templates used in defining terms that represent particular verb forms (e.g. past participle) of given lemma.",
	parents = {"Grammar form-of templates"},
}

raw_categories["Declension form-of templates"] = {
	description = "Templates used in defining terms that represent particular noun or adjective forms (e.g. masculine plural) of given lemma.",
	parents = {"Grammar form-of templates"},
}

raw_categories["Name templates"] = {
	description = "Templates used in the [[Wiktionary:Glossary#definition line|definition line]] to help in creating definitions for names.",
	parents = {"අර්ථ දැක්වීම් සැකිලි"},
}

raw_categories["Object usage templates"] = {
	description = "Templates used in the [[Wiktionary:Glossary#definition line|definition line]] to show case and adposition usage for verb objects and similar constructs.",
	parents = {"අර්ථ දැක්වීම් සැකිලි"},
}

raw_categories["Place name templates"] = {
	description = "Templates used in defining place names or demonyms that refer to place names.",
	parents = {"අර්ථ දැක්වීම් සැකිලි"},
}

raw_categories["ප්‍රවේශ සැකිලි"] = {
	description = "Templates used to help create new entries.",
	parents = {"සැකිලි"},
}

raw_categories["නිරුක්ති සැකිලි"] = {
	description = "Templates used in etymology sections to define the etymology of a term.",
	parents = {"සැකිලි"},
}

raw_categories["Foreign derivation templates"] = {
	description = "Templates used in etymology sections to indicate derivation from a different language than the language of the current entry.",
	parents = {"නිරුක්ති සැකිලි"},
}

raw_categories["Morphology templates"] = {
	description = "Templates used in etymology sections to specify the morphology of a term.",
	parents = {"නිරුක්ති සැකිලි"},
}

raw_categories["Language-specific morphology templates"] = {
	description = "Specialized morphology templates used in the etymology sections of terms in particular languages.",
	parents = {"Morphology templates"},
}

raw_categories["යොමු වචන පේළි සැකිලි"] = {
	preceding = "{{also|Wiktionary:Headword-line templates}}",
	description = "Templates used to define the [[Wiktionary:Glossary#headword line|headword line]] of a term.",
	parents = {"සැකිලි"},
}

raw_categories["සාකච්ඡා සැකිලි"] = {
	description = "Templates intended for use only in discussions and documentation of templates and modules.",
	parents = {"සැකිලි"},
}

raw_categories["Monthly-subpages discussion room infrastructure"] = {
	description = "Templates used in generating and maintaining monthly discussion forums such as the [[Wiktionary:Grease pit|Grease pit]] and [[Wiktionary:Beer parlour|Beer parlour]].",
	parents = {"සාකච්ඡා සැකිලි"},
}

raw_categories["උපදෙස් සැකිලි"] = {
	description = "මෙම ප්‍රවර්ගය සැකිලි සහ මොඩියුල උපදෙස් පිටු සඳහා භාවිතා වන සැකිලි ලැයිස්තු ගත කරයි.",
	parents = {"සැකිලි"},
}

raw_categories["File templates"] = {
	description = "Templates used in the File namespace.",
	parents = {"සැකිලි"},
}

raw_categories["Language attestation warning templates"] = {
	description = "Templates that warn users about the attestation status of entries or senses from a language.",
	parents = {"සැකිලි"},
}

raw_categories["Layout templates"] = {
	description = "Templates used in creating specific layouts within entries.",
	parents = {"සැකිලි"},
}

raw_categories["Collapsible box templates"] = {
	description = "Templates used in creating collapsible boxes.",
	parents = {"Layout templates"},
}

raw_categories["තීරු සැකිලි"] = {
	preceding = "{{also|Wiktionary:Templates#Columns}}",
	description = "Templates used in laying out lists in columns.",
	parents = {"Layout templates"},
}

raw_categories["Table templates"] = {
	description = "Templates used in formatting tables.",
	parents = {"Layout templates"},
}

raw_categories["සබැඳි සැකිලි"] = {
	description = "Templates used to link to other terms, to other MediaWiki projects or to external websites.",
	parents = {"සැකිලි"},
}

raw_categories["බහුරුත්හරණ සැකිලි"] = {
	description = "Templates used to disambiguate multiple similar terms.",
	parents = {"සබැඳි සැකිලි"},
}

raw_categories["භාහිර සබැඳි සැකිලි"] = {
	description = "Templates that link to websites outside of the MediaWiki Foundation purview.",
	additional = "See also [[:Category:Citation templates]] for others.",
	parents = {"සබැඳි සැකිලි"},
}

-- FIXME! This doesn't belong and the templates in it should be deleted (they are in [[WT:RFDO]] currently).
raw_categories["Greek link templates"] = {
	description = "Templates which link between Greek entries.",
	breadcrumb = "Link",
	parents = {
		{name = "සැකිලි", is_label = true, lang = "el", sort = "link"},
		"සබැඳි සැකිලි",
	},
}

raw_categories["අභ්‍යන්තර සබැඳි සැකිලි"] = {
	description = "Templates that link between Wiktionary entries.",
	parents = {"සබැඳි සැකිලි"},
}

raw_categories["Internal link subtemplates"] = {
	description = "Subtemplates of {{tl|l}}.",
	parents = {"අභ්‍යන්තර සබැඳි සැකිලි"},
}

raw_categories["අන්තර්විකි සැකිලි"] = {
	description = "Templates that link to other MediaWiki projects.",
	parents = {"සබැඳි සැකිලි"},
}

raw_categories["ලැයිස්තු සැකිලි"] = {
	description = "ලැයිස්තු ජනනය සඳහා භාවිතා වන සැකිලි.",
	additional = "මෙයත් බලන්න: [[:ප්‍රවර්ගය:භාෂාව අනුව ලැයිස්තු සැකිලි]].",
	parents = {"සැකිලි"},
}

raw_categories["අනුලක්ෂණ ලැයිස්තු සැකිලි"] = {
	description = "අනුලක්ෂණ ලැයිස්තු ජනනය සඳහා භාවිතා වන සැකිලි.",
	parents = {"ලැයිස්තු සැකිලි"},
}

raw_categories["Lua-free templates"] = {
	description = "Lua-free (i.e. \"lite\") versions of templates that use Lua.",
	additional = "Lua-free templates are used on long pages to avoid [[Wiktionary:Lua memory errors|Lua memory errors]].",
	parents = {"සැකිලි"},
}

raw_categories["නඩත්තු කටයුතු සැකිලි"] = {
	preceding = "{{also|Wiktionary:Maintenance templates}}",
	description = "Templates used in the maintenance of Wiktionary entries and other pages.",
	additional = "They are distinct from [[:Category:Administration templates|administration templates]], which are only used outside of mainspace.",
	parents = {"සැකිලි", "ප්‍රවර්ගය:වික්ෂනරි නඩත්තු කටයුතු"},
}

raw_categories["ශුද්ධ පවිත්‍රණ සැකිලි"] = {
	description = "Templates used to request cleanup of entries.",
	additional = "Some of these templates are used when entries are batch-imported from another source.",
	parents = {"නඩත්තු කටයුතු සැකිලි", "ඉල්ලීම් සැකිලි"},
}

raw_categories["මකා දැමීම් සැකිලි"] = {
	description = "Templates used to request deletion of entries.",
	parents = {"නඩත්තු කටයුතු සැකිලි", "ඉල්ලීම් සැකිලි"},
}

raw_categories["සත්‍යාපන සැකිලි"] = {
	description = "Templates used to request verification of entries that may be incorrect.",
	parents = {"නඩත්තු කටයුතු සැකිලි", "ඉල්ලීම් සැකිලි"},
}

raw_categories["Wiktionary templates"] = {
	description = "Templates used in the internal operation of Wiktionary.",
	parents = {"සැකිලි", "වික්ෂනරිය"},
}

raw_categories["මෙටා සැකිලි"] = {
	description = "Templates used in other templates or to create other templates.",
	parents = {"සැකිලි"},
}

raw_categories["String manipulation templates"] = {
	description = "Templates used to manipulate strings.",
	additional = "See also [[Module:string]], which can be invoked from templates to do string manipulation.",
	parents = {"මෙටා සැකිලි"},
}

raw_categories["මං සලකුණු සැකිලි"] = {
	description = "Templates used to create navigation boxes for easily linking to other similar pages.",
	parents = {"සැකිලි"},
}

raw_categories["Number templates"] = {
	description = "Templates used to convert numbers or generate boxes describing numbers in a given language.",
	parents = {"සැකිලි"},
}

raw_categories["Preloaded templates"] = {
	description = "Templates not meant to be transcluded, but instead, whether through URL parameters or modules, have their contents preloaded into edit fields.",
	parents = {"සැකිලි"},
}

raw_categories["උච්චාරණ සැකිලි"] = {
	description = "Templates used to format pronunciation sections and the characters they use.",
	additional = "See also [[:Category:Script templates]] and [[Wiktionary:Pronunciation]].",
	parents = {"සැකිලි"},
}

raw_categories["Rhyme templates"] = {
	description = "Templates used to format [[Wiktionary:Rhymes|rhyme pages]], links to them from pronunciation sections, etc.",
	parents = {"උච්චාරණ සැකිලි"},
}

raw_categories["Sign language templates"] = {
	description = "Templates used to format sign-language pronunciation charts.",
	parents = {"උච්චාරණ සැකිලි"},
}

raw_categories["Qualifier and gloss templates"] = {
	description = "Templates for displaying qualifiers, glosses and the like.",
	parents = {"සැකිලි"},
}

raw_categories["Redirect templates"] = {
	description = "Templates used to format redirect pages.",
	parents = {"සැකිලි"},
}

raw_categories["මූලාශ්‍ර සැකිලි"] = {
	preceding = "{{also|Wiktionary:Reference templates|:Category:Reference templates by language}}",
	description = "Templates used to format references.",
	parents = {"සැකිලි"},
}

raw_categories["Religion templates"] = {
	description = "Templates that display religion-related diagrams or boxes.",
	parents = {"සැකිලි"},
}

raw_categories["ඉල්ලීම් සැකිලි"] = {
	topright = "{{shortcut|WT:RT}}",
	description = "Request templates for dictionary entries in the main namespace.",
	parents = {"සැකිලි", "ඉල්ලීම්"},
}

raw_categories["Sandbox templates"] = {
	description = "Sandbox versions of templates used for testing purposes.",
	additional = "'''NOTE:''' The use of sandbox templates in mainspace is strongly dispreferred. Please place all sandbox templates in your userspace.",
	parents = {"සැකිලි"},
}

raw_categories["අක්ෂරක්‍රම සැකිලි"] = {
	preceding = "{{mainwikt|Scripts}}",
	description = "Templates used for converting between scripts or displaying text in a specific script.",
	parents = {"සැකිලි"},
}

raw_categories["Semantic relation templates"] = {
	description = "Templates that are placed below the [[Wiktionary:Glossary#definition line|definition line]], to indicate other terms semantically related to a particular sense.",
	parents = {"සැකිලි"},
}

raw_categories["Single-page-use templates"] = {
	description = "Templates used only on a single page and unlikely to find re-use elsewhere.",
	parents = {"සැකිලි"},
}

raw_categories["Supplementary templates"] = {
	description = "A grab bag of templates used to assist other templates.",
	additional = "These should be recategorized according to function.",
	parents = {"සැකිලි"},
}

raw_categories["Taxonomy templates"] = {
	description = "Templates used in Translingual taxonomy entries and in reference to those entries.",
	parents = {"සැකිලි"},
}

raw_categories["Taxonomic hypernym templates"] = {
	description = "Templates and subcategories containing such templates. The templates contain text to appear under the Hypernyms header for taxonomic name entries.",
	additional = "Each template has the name of the taxon from which it begins. The templates in this category at present are the many templates that begin with the names of taxonomic families. Others are in subcategories",
	breadcrumb = "Hypernym",
	parents = {"Taxonomy templates"},
}

raw_categories["Taxonomic name templates"] = {
	description = "Templates used for the presentation of taxonomic names on a definition line.",
	breadcrumb = "Name",
	parents = {"Taxonomy templates", "අර්ථ දැක්වීම් සැකිලි"},
}

raw_categories["Taxonomic reference templates"] = {
	description = "Templates used to format references for taxonomic names.",
	breadcrumb = "Reference",
	parents = {"Taxonomy templates", "මූලාශ්‍ර සැකිලි"},
}

raw_categories["Templates that must be substituted"] = {
	description = "Templates that are not intended for transclusion with <code><nowiki>{{ }}</nowiki></code>, " ..
	"and must be substituted with <code><nowiki>{{subst: }}</nowiki></code>wherever they exist.",
	additional = "Some of the members of this category are permanent, as the template was written in such a way that " ..
	"it must be substituted to function properly. There may also be templates in this category that are deprecated, " ..
	"in which case their content has been replaced with the preferred code.",
	parents = {"සැකිලි", "ඉල්ලීම්"},
}

raw_categories["Templates with acceleration"] = {
	description = "Templates can be added to this category by adding {{tl|isAccelerated}} to their documentation pages.",
	additional = "Presence in this category indicates that at least some of the \"form-of\" entries for the word can be generated semi-automatically by users with [[Wiktionary:ACCEL|accelerated]] editing enabled.",
	parents = {"සැකිලි"},
}

raw_categories["Text format templates"] = {
	description = "Templates that provide shortcuts for formatting ordinary text.",
	parents = {"සැකිලි"},
}

raw_categories["Thesaurus templates"] = {
	description = "Templates for linking to or formatting thesaurus entries.",
	parents = {"සැකිලි"},
}

raw_categories["පරිවර්තන සැකිලි"] = {
	description = "Templates used to format entries in and parts of translation tables.",
	parents = {"සැකිලි"},
}

raw_categories["පරිශීලක සැකිලි"] = {
	description = "Templates meant to be used in userspace.",
	parents = {"සැකිලි"},
}

raw_categories["Authority control subtemplates"] = {
	description = "Subtemplates used in conjunction with {{tl|authority control}}.",
	parents = {"පරිශීලක සැකිලි"},
}

raw_categories["User competency templates"] = {
	description = "Templates used for to indicate a user's competency in a given natural language, script or programming language.",
	additional = "These are used in conjunction with {{tl|Babel}}, which invokes these templates as necessary.",
	parents = {"පරිශීලක සැකිලි"},
}

raw_categories["Coder user templates"] = {
	description = "Templates used for to indicate a user's competency in a given programming language.",
	additional = "These are used in conjunction with {{tl|Babel}}, which invokes these templates as necessary.",
	parents = {"User competency templates"},
}

raw_categories["Language user templates"] = {
	description = "Templates used for to indicate a user's competency in speaking a given language.",
	additional = "These are used in conjunction with {{tl|Babel}}, which invokes these templates as necessary.",
	parents = {"User competency templates"},
}

raw_categories["Script user templates"] = {
	description = "Templates used for to indicate a user's competency in reading a given script.",
	additional = "These are used in conjunction with {{tl|Babel}}, which invokes these templates as necessary.",
	parents = {"User competency templates"},
}

raw_categories["WOTD templates"] = {
	description = "Templates used to support the Word of the Day.",
	parents = {"Wiktionary templates"},
}

raw_categories["FWOTD templates"] = {
	description = "Templates used to support the Foreign Word of the Day.",
	parents = {"WOTD templates"},
}

raw_categories["Non-production templates and modules"] = {
	description = "Templates and modules not currently used in production.",
	additional = "{{also|Special:UnusedTemplates|Category:Unused templates}}",
	parents = {"සැකිලි", "මොඩියුල", "ප්‍රවර්ගය:වික්ෂනරි නඩත්තු කටයුතු"},
}

raw_categories["Templates subcategories by language"] = {
	description = "Umbrella categories covering topics related to templates.",
	additional = "{{{umbrella_meta_msg}}}",
	parents = {
		"ඡත්‍ර මෙටා ප්‍රවර්ග",
		{name = "සැකිලි", is_label = true, sort = " "},
	},
}

-- Add breadcrumb by chopping off the parent (or the parent's parent, etc.) from the end of the label, if possible.
for key, data in pairs(raw_categories) do
	if not data.breadcrumb then
		local parent = data.parents[1]
		while true do
			if type(parent) == "string" then
				local parent_re = " " .. require("Module:string utilities").pattern_escape(mw.getContentLanguage():lcfirst(parent)) .. "$"
				if key:find(parent_re) then
					data.breadcrumb = key:gsub(parent_re, "")
					break
				end
				if raw_categories[parent] then
					parent = raw_categories[parent].parents[1]
				else
					break
				end
			else
				break
			end
		end
	end
end


return {LABELS = labels, RAW_CATEGORIES = raw_categories}
"https://si.wiktionary.org/w/index.php?title=Module:category_tree/poscatboiler/data/templates&oldid=198446" වෙතින් සම්ප්‍රවේශනය කෙරිණි