<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ACategory_tree%2Fposcatboiler</id>
	<title>Module:Category tree/poscatboiler - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ACategory_tree%2Fposcatboiler"/>
	<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler&amp;action=history"/>
	<updated>2026-04-10T17:37:45Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler&amp;diff=65&amp;oldid=prev</id>
		<title>Jsrs701: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler&amp;diff=65&amp;oldid=prev"/>
		<updated>2026-04-10T07:25:51Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:25, 10 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawikidb:diff:1.41:old-64:rev-65 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jsrs701</name></author>
	</entry>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler&amp;diff=64&amp;oldid=prev</id>
		<title>bob&gt;Djpwikiadmin at 20:57, 3 September 2023</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler&amp;diff=64&amp;oldid=prev"/>
		<updated>2023-09-03T20:57:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&lt;br /&gt;
&lt;br /&gt;
local lang_independent_data = require(&amp;quot;Module:category tree/poscatboiler/data&amp;quot;)&lt;br /&gt;
local lang_specific_module = &amp;quot;Module:category tree/poscatboiler/data/lang-specific&amp;quot;&lt;br /&gt;
local lang_specific_module_prefix = lang_specific_module .. &amp;quot;/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Category object&lt;br /&gt;
&lt;br /&gt;
local Category = {}&lt;br /&gt;
Category.__index = Category&lt;br /&gt;
&lt;br /&gt;
function Category.new_main(frame)&lt;br /&gt;
	local self = setmetatable({}, Category)&lt;br /&gt;
&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {},&lt;br /&gt;
		[2] = {required = true},&lt;br /&gt;
		[3] = {},&lt;br /&gt;
		[&amp;quot;raw&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local args, remaining_args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params, true, &amp;quot;category tree/poscatboiler&amp;quot;)&lt;br /&gt;
	self._info = {code = args[1], label = args[2], sc = args[3], raw = args.raw, args = remaining_args}&lt;br /&gt;
&lt;br /&gt;
	self:initCommon()&lt;br /&gt;
&lt;br /&gt;
	if not self._data then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:get_originating_info()&lt;br /&gt;
	local originating_info = &amp;quot;&amp;quot;&lt;br /&gt;
	if self._info.originating_label then&lt;br /&gt;
		originating_info = &amp;quot; (originating from label \&amp;quot;&amp;quot; .. self._info.originating_label .. &amp;quot;\&amp;quot; in module [[&amp;quot; .. self._info.originating_module .. &amp;quot;]])&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return originating_info&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
function Category.new(info)&lt;br /&gt;
	for key, val in pairs(info) do&lt;br /&gt;
		if not (key == &amp;quot;code&amp;quot; or key == &amp;quot;label&amp;quot; or key == &amp;quot;sc&amp;quot; or key == &amp;quot;raw&amp;quot; or key == &amp;quot;args&amp;quot;&lt;br /&gt;
			or key == &amp;quot;called_from_inside&amp;quot; or key == &amp;quot;originating_label&amp;quot; or key == &amp;quot;originating_module&amp;quot;) then&lt;br /&gt;
			error(&amp;quot;The parameter \&amp;quot;&amp;quot; .. key .. &amp;quot;\&amp;quot; was not recognized.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local self = setmetatable({}, Category)&lt;br /&gt;
	self._info = info&lt;br /&gt;
&lt;br /&gt;
	if not self._info.label then&lt;br /&gt;
		error(&amp;quot;No label was specified.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	self:initCommon()&lt;br /&gt;
&lt;br /&gt;
	if not self._data then&lt;br /&gt;
		error(&amp;quot;The &amp;quot; .. (self._info.raw and &amp;quot;raw &amp;quot; or &amp;quot;&amp;quot;) .. &amp;quot;label \&amp;quot;&amp;quot; .. self._info.label .. &amp;quot;\&amp;quot; does not exist&amp;quot; .. self:get_originating_info() .. &amp;quot;.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
export.new = Category.new&lt;br /&gt;
export.new_main = Category.new_main&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:initCommon()&lt;br /&gt;
	local args_handled = false&lt;br /&gt;
	if self._info.raw then&lt;br /&gt;
		-- Check if the category exists&lt;br /&gt;
		local raw_categories = lang_independent_data[&amp;quot;RAW_CATEGORIES&amp;quot;]&lt;br /&gt;
		self._data = raw_categories[self._info.label]&lt;br /&gt;
&lt;br /&gt;
		if self._data then&lt;br /&gt;
			if self._data.lang then&lt;br /&gt;
				self._lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self._data.lang, true, nil, nil, true)&lt;br /&gt;
				self._info.code = self._lang:getCode()&lt;br /&gt;
			end&lt;br /&gt;
			if self._data.sc then&lt;br /&gt;
				self._sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(self._data.sc, true, nil, true)&lt;br /&gt;
				self._info.sc = self._sc:getCode()&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- Go through raw handlers&lt;br /&gt;
			local data = {&lt;br /&gt;
				category = self._info.label,&lt;br /&gt;
				args = self._info.args or {},&lt;br /&gt;
				called_from_inside = self._info.called_from_inside,&lt;br /&gt;
			}&lt;br /&gt;
			for _, handler in ipairs(lang_independent_data[&amp;quot;RAW_HANDLERS&amp;quot;]) do&lt;br /&gt;
				self._data, args_handled = handler.handler(data)&lt;br /&gt;
				if self._data then&lt;br /&gt;
					self._data.module = self._data.module or handler.module&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if self._data then	&lt;br /&gt;
				if self._data.lang then&lt;br /&gt;
					if type(self._data.lang) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
						error(&amp;quot;Received non-string value &amp;quot; .. mw.dumpObject(self._data.lang) .. &amp;quot; for self._data.lang, label \&amp;quot;&amp;quot; .. self._info.label .. &amp;quot;\&amp;quot;&amp;quot; .. self:get_originating_info() .. &amp;quot;.&amp;quot;)&lt;br /&gt;
					end&lt;br /&gt;
					self._lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self._data.lang, true, nil, nil, true)&lt;br /&gt;
					self._info.code = self._lang:getCode()&lt;br /&gt;
				end&lt;br /&gt;
				if self._data.sc then&lt;br /&gt;
					if type(self._data.sc) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
						error(&amp;quot;Received non-string value &amp;quot; .. mw.dumpObject(self._data.sc) .. &amp;quot; for self._data.sc, label \&amp;quot;&amp;quot; .. self._info.label .. &amp;quot;\&amp;quot;&amp;quot; .. self:get_originating_info() .. &amp;quot;.&amp;quot;)&lt;br /&gt;
					end&lt;br /&gt;
					self._sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(self._data.sc, true, nil, true)&lt;br /&gt;
					self._info.sc = self._sc:getCode()&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Already parsed into language + label&lt;br /&gt;
		if self._info.code then&lt;br /&gt;
			self._lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self._info.code, 1, nil, nil, true)&lt;br /&gt;
		else&lt;br /&gt;
			self._lang = nil&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if self._info.sc then&lt;br /&gt;
			self._sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(self._info.sc, true, nil, true) or error(&amp;quot;The script code \&amp;quot;&amp;quot; .. self._info.sc .. &amp;quot;\&amp;quot; is not valid.&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			self._sc = nil&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- First, check lang-specific labels and handlers if this is not an umbrella category.&lt;br /&gt;
		if self._lang then&lt;br /&gt;
			local langcode = self._lang:getCode()&lt;br /&gt;
			local langs_with_modules = mw.loadData(lang_specific_module)&lt;br /&gt;
			if langs_with_modules[langcode] then&lt;br /&gt;
				local module = lang_specific_module_prefix .. self._lang:getCode()&lt;br /&gt;
				local labels_and_handlers = require(module)&lt;br /&gt;
				if labels_and_handlers.LABELS then&lt;br /&gt;
					self._data = labels_and_handlers.LABELS[self._info.label]&lt;br /&gt;
					if self._data then&lt;br /&gt;
						if self._data.umbrella == nil and self._data.umbrella_parents == nil then&lt;br /&gt;
							self._data.umbrella = false&lt;br /&gt;
						end&lt;br /&gt;
						self._data.module = self._data.module or module&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if not self._data and labels_and_handlers.HANDLERS then&lt;br /&gt;
					for _, handler in ipairs(labels_and_handlers.HANDLERS) do&lt;br /&gt;
						local data = {&lt;br /&gt;
							label = self._info.label,&lt;br /&gt;
							lang = self._lang,&lt;br /&gt;
							sc = self._sc,&lt;br /&gt;
							args = self._info.args or {},&lt;br /&gt;
							called_from_inside = self._info.called_from_inside,&lt;br /&gt;
						}&lt;br /&gt;
						self._data, args_handled = handler(data)&lt;br /&gt;
						if self._data then&lt;br /&gt;
							if self._data.umbrella == nil and self._data.umbrella_parents == nil then&lt;br /&gt;
								self._data.umbrella = false&lt;br /&gt;
							end&lt;br /&gt;
							self._data.module = self._data.module or module&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Then check lang-independent labels.&lt;br /&gt;
		if not self._data then&lt;br /&gt;
			local labels = lang_independent_data[&amp;quot;LABELS&amp;quot;]&lt;br /&gt;
			self._data = labels[self._info.label]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Then check lang-independent handlers.&lt;br /&gt;
		if not self._data then&lt;br /&gt;
			local data = {&lt;br /&gt;
				label = self._info.label,&lt;br /&gt;
				lang = self._lang,&lt;br /&gt;
				sc = self._sc,&lt;br /&gt;
				args = self._info.args or {},&lt;br /&gt;
				called_from_inside = self._info.called_from_inside,&lt;br /&gt;
			}&lt;br /&gt;
			for _, handler in ipairs(lang_independent_data[&amp;quot;HANDLERS&amp;quot;]) do&lt;br /&gt;
				self._data, args_handled = handler.handler(data)&lt;br /&gt;
				if self._data then&lt;br /&gt;
					self._data.module = self._data.module or handler.module&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args_handled and self._data and self._info.args and next(self._info.args) then&lt;br /&gt;
		local module_text = &amp;quot; (handled in [[&amp;quot; .. (self._data.module or &amp;quot;UNKNOWN&amp;quot;).. &amp;quot;]])&amp;quot;&lt;br /&gt;
		local args_text = {}&lt;br /&gt;
		for k, v in pairs(self._info.args) do&lt;br /&gt;
			table.insert(args_text, k .. &amp;quot;=&amp;quot; .. ((type(v) == &amp;quot;string&amp;quot; or type(v) == &amp;quot;number&amp;quot;) and v or mw.dumpObject(v)))&lt;br /&gt;
		end&lt;br /&gt;
		error(&amp;quot;poscatboiler label &amp;#039;&amp;quot; .. self._info.label .. &amp;quot;&amp;#039; &amp;quot; .. module_text .. &amp;quot; doesn&amp;#039;t accept extra args &amp;quot; ..&lt;br /&gt;
			table.concat(args_text, &amp;quot;, &amp;quot;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if self._sc and not self._lang then&lt;br /&gt;
		error(&amp;quot;Umbrella categories cannot have a script specified.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:convert_spec_to_string(desc)&lt;br /&gt;
	if not desc then&lt;br /&gt;
		return desc&lt;br /&gt;
	end&lt;br /&gt;
	if type(desc) == &amp;quot;number&amp;quot; then&lt;br /&gt;
		desc = tostring(desc)&lt;br /&gt;
	end&lt;br /&gt;
	if type(desc) == &amp;quot;function&amp;quot; then&lt;br /&gt;
		local data = {&lt;br /&gt;
			lang = self._lang,&lt;br /&gt;
			sc = self._sc,&lt;br /&gt;
			label = self._info.label,&lt;br /&gt;
			raw = self._info.raw,&lt;br /&gt;
		}&lt;br /&gt;
		desc = desc(data)&lt;br /&gt;
	end&lt;br /&gt;
	return desc&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:substitute_template_specs(desc)&lt;br /&gt;
	if not desc then&lt;br /&gt;
		return desc&lt;br /&gt;
	end&lt;br /&gt;
	-- This may end up happening twice but that&amp;#039;s OK as the function is idempotent.&lt;br /&gt;
	desc = self:convert_spec_to_string(desc)&lt;br /&gt;
&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{PAGENAME}}&amp;quot;, mw.title.getCurrentTitle().text)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{umbrella_msg}}}&amp;quot;, &amp;quot;This is an umbrella category. It contains no dictionary entries, but only other, language-specific categories, which in turn contain relevant terms in a given language.&amp;quot;)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{umbrella_meta_msg}}}&amp;quot;, &amp;#039;This is an umbrella metacategory, covering a general area such as &amp;quot;lemmas&amp;quot;, &amp;quot;names&amp;quot; or &amp;quot;terms by etymology&amp;quot;. It contains no dictionary entries, but holds only umbrella (&amp;quot;by language&amp;quot;) categories covering specific subtopics, which in turn contain language-specific categories holding terms in a given language for that same topic.&amp;#039;)&lt;br /&gt;
	if self._lang then&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{langname}}}&amp;quot;, self._lang:getCanonicalName())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{langcode}}}&amp;quot;, self._lang:getCode())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{langcat}}}&amp;quot;, self._lang:getCategoryName())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{langlink}}}&amp;quot;, self._lang:makeCategoryLink())&lt;br /&gt;
	end&lt;br /&gt;
	if self._sc then&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{scname}}}&amp;quot;, self._sc:getCanonicalName())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{sccode}}}&amp;quot;, self._sc:getCode())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{sccat}}}&amp;quot;, self._sc:getCategoryName())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{scdisp}}}&amp;quot;, self._sc:getDisplayForm())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{sclink}}}&amp;quot;, self._sc:makeCategoryLink())&lt;br /&gt;
	end&lt;br /&gt;
	if desc:find(&amp;quot;{&amp;quot;) then&lt;br /&gt;
		desc = mw.getCurrentFrame():preprocess(desc)&lt;br /&gt;
	end&lt;br /&gt;
	return desc&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:substitute_template_specs_in_args(args)&lt;br /&gt;
	if not args then&lt;br /&gt;
		return args&lt;br /&gt;
	end&lt;br /&gt;
	local pinfo = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = self:substitute_template_specs(k)&lt;br /&gt;
		v = self:substitute_template_specs(v)&lt;br /&gt;
		pinfo[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return pinfo&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:make_new(info)&lt;br /&gt;
	info.originating_label = self._info.label&lt;br /&gt;
	info.originating_module = self._data.module&lt;br /&gt;
	info.called_from_inside = true&lt;br /&gt;
	return Category.new(info)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getBreadcrumbName()&lt;br /&gt;
	local ret&lt;br /&gt;
&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		ret = self._data.breadcrumb&lt;br /&gt;
	else&lt;br /&gt;
		ret = self._data.umbrella and self._data.umbrella.breadcrumb&lt;br /&gt;
	end&lt;br /&gt;
	if not ret then&lt;br /&gt;
		ret = self._info.label&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if type(ret) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
		ret = {name = ret}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local name = self:substitute_template_specs(ret.name)&lt;br /&gt;
	local nocap = ret.nocap&lt;br /&gt;
&lt;br /&gt;
	if self._sc then&lt;br /&gt;
		name = name .. &amp;quot; in &amp;quot; .. self._sc:getDisplayForm()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return name, nocap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getTOC(toc_type)&lt;br /&gt;
	local ret&lt;br /&gt;
&lt;br /&gt;
	-- type &amp;quot;none&amp;quot; means everything fits on a single page; fall back to normal behavior (display nothing)&lt;br /&gt;
	if toc_type == &amp;quot;none&amp;quot; then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Return the textual expansion of the first existing template among the given templates, first performing&lt;br /&gt;
	-- substitutions on the template name such as replacing {{{langcode}}} with the current language&amp;#039;s code (if any).&lt;br /&gt;
	-- If no templates exist after expansion, or if nil is passed in, return nil. If a single string is passed in,&lt;br /&gt;
	-- treat it like a one-element list consisting of that string.&lt;br /&gt;
	local function get_template_text(templates)&lt;br /&gt;
		if templates == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		if type(templates) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
			templates = {templates}&lt;br /&gt;
		end&lt;br /&gt;
		for _, template in ipairs(templates) do&lt;br /&gt;
			if template == false then&lt;br /&gt;
				return false&lt;br /&gt;
			end&lt;br /&gt;
			template = self:substitute_template_specs(template)&lt;br /&gt;
			local template_obj = mw.title.new(&amp;quot;Template:&amp;quot; .. template)&lt;br /&gt;
			if template_obj.exists then&lt;br /&gt;
				return mw.getCurrentFrame():expandTemplate{title = template_obj.text, args = {}}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local templates, fallback_templates&lt;br /&gt;
&lt;br /&gt;
	-- If TOC type is &amp;quot;full&amp;quot; (more than 2500 entries), do the following, in order:&lt;br /&gt;
	-- 1. look up and expand the `toc_template_full` templates (normal or umbrella, depending on whether there is&lt;br /&gt;
	--    a current language);&lt;br /&gt;
	-- 2. look up and expand the `toc_template` templates (normal or umbrella, as above);&lt;br /&gt;
	-- 3. do the default behavior, which is as follows:&lt;br /&gt;
	-- 3a. look up a language-specific &amp;quot;full&amp;quot; template according to the current language (using English if there&lt;br /&gt;
	--     is no current language);&lt;br /&gt;
	-- 3b. look up a language-specific &amp;quot;normal&amp;quot; template according to the current language (using English if there&lt;br /&gt;
	--     is no current language);&lt;br /&gt;
	-- 3c. display nothing.&lt;br /&gt;
	--&lt;br /&gt;
	-- If TOC type is &amp;quot;normal&amp;quot; (between 200 and 2500 entries), do the following, in order:&lt;br /&gt;
	-- 1. look up and expand the `toc_template` templates (normal or umbrella, depending on whether there is&lt;br /&gt;
	--    a current language);&lt;br /&gt;
	-- 2. do the default behavior, which is as follows:&lt;br /&gt;
	-- 2a. look up a language-specific &amp;quot;normal&amp;quot; template according to the current language (using English if there&lt;br /&gt;
	--     is no current language);&lt;br /&gt;
	-- 2b. display nothing.&lt;br /&gt;
&lt;br /&gt;
	local data_source&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		data_source = self._data&lt;br /&gt;
	else&lt;br /&gt;
		data_source = self._data.umbrella&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if data_source then&lt;br /&gt;
		if toc_type == &amp;quot;full&amp;quot; then&lt;br /&gt;
			templates = data_source.toc_template_full&lt;br /&gt;
			fallback_templates = data_source.toc_template&lt;br /&gt;
		else&lt;br /&gt;
			templates = data_source.toc_template&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local text = get_template_text(templates)&lt;br /&gt;
	if text then&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
	if text == false then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	text = get_template_text(fallback_templates)&lt;br /&gt;
	if text then&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
	if text == false then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getInfo()&lt;br /&gt;
	return self._info&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getDataModule()&lt;br /&gt;
	return self._data.module&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:canBeEmpty()&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		return self._data.can_be_empty&lt;br /&gt;
	else&lt;br /&gt;
		return self._data.umbrella and self._data.umbrella.can_be_empty&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:isHidden()&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		return self._data.hidden&lt;br /&gt;
	else&lt;br /&gt;
		return self._data.umbrella and self._data.umbrella.hidden&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getCategoryName()&lt;br /&gt;
	if self._info.raw then&lt;br /&gt;
		return self._info.label&lt;br /&gt;
	elseif self._lang then&lt;br /&gt;
		local ret = self._lang:getCanonicalName() .. &amp;quot; &amp;quot; .. self._info.label&lt;br /&gt;
&lt;br /&gt;
		if self._sc then&lt;br /&gt;
			ret = ret .. &amp;quot; in &amp;quot; .. self._sc:getDisplayForm()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return mw.getContentLanguage():ucfirst(ret)&lt;br /&gt;
	else&lt;br /&gt;
		local ret = mw.getContentLanguage():ucfirst(self._info.label)&lt;br /&gt;
		if not (self._data.umbrella and self._data.umbrella.no_by_language) then&lt;br /&gt;
			ret = ret .. &amp;quot; by language&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getIntro()&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		return self:substitute_template_specs(self._data.intro)&lt;br /&gt;
	else&lt;br /&gt;
		return self._data.umbrella and self:substitute_template_specs(self._data.umbrella.intro)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function remove_lang_params(desc)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{langname}}} &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{langcode}}} &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{langcat}}} &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	return desc&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Category:getDescription(isChild)&lt;br /&gt;
	-- Allows different text in the list of a category&amp;#039;s children&lt;br /&gt;
	local isChild = isChild == &amp;quot;child&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local function display_title(displaytitle, lang)&lt;br /&gt;
		if type(displaytitle) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			displaytitle = self:substitute_template_specs(displaytitle)&lt;br /&gt;
		else&lt;br /&gt;
			displaytitle = displaytitle(self:getCategoryName(), lang)&lt;br /&gt;
		end&lt;br /&gt;
		mw.getCurrentFrame():callParserFunction(&amp;quot;DISPLAYTITLE&amp;quot;, &amp;quot;Category:&amp;quot; .. displaytitle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		if not isChild and self._data.displaytitle then&lt;br /&gt;
			display_title(self._data.displaytitle, self._lang)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if self._sc then&lt;br /&gt;
			return self:getCategoryName() .. &amp;quot;.&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			local desc = self:convert_spec_to_string(self._data.description)&lt;br /&gt;
&lt;br /&gt;
			if not isChild and desc and self._data.additional then&lt;br /&gt;
				desc = desc .. &amp;quot;\n\n&amp;quot; .. self._data.additional&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			return self:substitute_template_specs(desc)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if not isChild and self._data.umbrella and self._data.umbrella.displaytitle then&lt;br /&gt;
			display_title(self._data.umbrella.displaytitle, nil)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local desc = self:convert_spec_to_string(self._data.umbrella and self._data.umbrella.description)&lt;br /&gt;
		local has_umbrella_desc = not not desc&lt;br /&gt;
		if not desc then&lt;br /&gt;
			desc = self:convert_spec_to_string(self._data.description)&lt;br /&gt;
			if desc then&lt;br /&gt;
				desc = remove_lang_params(desc)&lt;br /&gt;
				desc = mw.getContentLanguage():lcfirst(desc)&lt;br /&gt;
				desc = desc:gsub(&amp;quot;%.$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
				desc = &amp;quot;Categories with &amp;quot; .. desc .. &amp;quot;.&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not desc then&lt;br /&gt;
			desc = &amp;quot;Categories with &amp;quot; .. self._info.label .. &amp;quot; in various specific languages.&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if not isChild then&lt;br /&gt;
			local additional = self:convert_spec_to_string(&lt;br /&gt;
				self._data.umbrella and self._data.umbrella.additional or not has_umbrella_desc and self._data.additional&lt;br /&gt;
			)&lt;br /&gt;
			if additional then&lt;br /&gt;
				desc = desc .. &amp;quot;\n\n&amp;quot; .. remove_lang_params(additional)&lt;br /&gt;
			end&lt;br /&gt;
			desc = desc .. &amp;quot;\n\n{{{umbrella_msg}}}&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		desc = self:substitute_template_specs(desc)&lt;br /&gt;
		return desc&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:canonicalize_parents_children(cats, is_children)&lt;br /&gt;
	if not cats then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if type(cats) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
		cats = {cats}&lt;br /&gt;
	end&lt;br /&gt;
	if cats.name or cats.module then&lt;br /&gt;
		cats = {cats}&lt;br /&gt;
	end&lt;br /&gt;
	if #cats == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret = {}&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(cats) do&lt;br /&gt;
		if type(cat) ~= &amp;quot;table&amp;quot; or not cat.name and not cat.module then&lt;br /&gt;
			cat = {name = cat}&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(ret, cat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local is_umbrella = not self._lang and not self._info.raw&lt;br /&gt;
	local table_type = is_children and &amp;quot;extra_children&amp;quot; or &amp;quot;parents&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	for i, cat in ipairs(ret) do&lt;br /&gt;
		local sort_key = self:substitute_template_specs(cat.sort)&lt;br /&gt;
&lt;br /&gt;
		local name = cat.name&lt;br /&gt;
&lt;br /&gt;
		if cat.module then&lt;br /&gt;
			-- A reference to a category using another category tree module.&lt;br /&gt;
			if not cat.args then&lt;br /&gt;
				error(&amp;quot;Missing .args in &amp;#039;&amp;quot; .. table_type .. &amp;quot;&amp;#039; table with module=\&amp;quot;&amp;quot; .. cat.module .. &amp;quot;\&amp;quot; for &amp;#039;&amp;quot; ..&lt;br /&gt;
					self._info.label .. &amp;quot;&amp;#039; category entry in module &amp;#039;&amp;quot; .. (self._data.module or &amp;quot;unknown&amp;quot;) .. &amp;quot;&amp;#039;&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			name = require(&amp;quot;Module:category tree/&amp;quot; .. cat.module).new(self:substitute_template_specs_in_args(cat.args))&lt;br /&gt;
		else&lt;br /&gt;
			if not name then&lt;br /&gt;
				error(&amp;quot;Missing .name in &amp;quot; .. (is_umbrella and &amp;quot;umbrella &amp;quot; or &amp;quot;&amp;quot;) .. &amp;quot;&amp;#039;&amp;quot; .. table_type .. &amp;quot;&amp;#039; table for &amp;#039;&amp;quot; ..&lt;br /&gt;
					self._info.label .. &amp;quot;&amp;#039; category entry in module &amp;#039;&amp;quot; .. (self._data.module or &amp;quot;unknown&amp;quot;) .. &amp;quot;&amp;#039;&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			if type(name) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
				-- assume it&amp;#039;s a category object and use it directly&lt;br /&gt;
			else&lt;br /&gt;
				name = self:substitute_template_specs(name)&lt;br /&gt;
				if name:find(&amp;quot;^Category:&amp;quot;) then&lt;br /&gt;
					-- It&amp;#039;s a non-poscatboiler category name.&lt;br /&gt;
					sort_key = sort_key or is_children and name:gsub(&amp;quot;^Category:&amp;quot;, &amp;quot;&amp;quot;) or self:getCategoryName()&lt;br /&gt;
				else&lt;br /&gt;
					-- It&amp;#039;s a label.&lt;br /&gt;
					local raw&lt;br /&gt;
					if self._info.raw or is_umbrella then&lt;br /&gt;
						raw = not cat.is_label&lt;br /&gt;
					else&lt;br /&gt;
						raw = cat.raw&lt;br /&gt;
					end&lt;br /&gt;
					local cat_code&lt;br /&gt;
					if cat.lang == false then&lt;br /&gt;
						cat_code = nil&lt;br /&gt;
					elseif cat.lang then&lt;br /&gt;
						cat_code = self:substitute_template_specs(cat.lang)&lt;br /&gt;
					elseif not raw then&lt;br /&gt;
						cat_code = self._info.code&lt;br /&gt;
					end&lt;br /&gt;
					sort_key = sort_key or is_children and name or self._info.label&lt;br /&gt;
					name = self:make_new({&lt;br /&gt;
						label = name, code = cat_code, sc = self:substitute_template_specs(cat.sc),&lt;br /&gt;
						raw = raw, args = self:substitute_template_specs_in_args(cat.args)&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		sort_key = mw.ustring.upper(sort_key or is_children and &amp;quot; &amp;quot; or self._info.label)&lt;br /&gt;
		local description = is_children and self:substitute_template_specs(cat.description) or nil&lt;br /&gt;
		ret[i] = {name = name, description = description, sort = sort_key}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getParents()&lt;br /&gt;
	local is_umbrella = not self._lang and not self._info.raw&lt;br /&gt;
	local retval&lt;br /&gt;
	if self._sc then&lt;br /&gt;
		local parent1 = self:make_new({code = self._info.code, label = &amp;quot;terms in &amp;quot; .. self._sc:getCanonicalName() .. &amp;quot; script&amp;quot;})&lt;br /&gt;
		local parent2 = self:make_new({code = self._info.code, label = self._info.label, raw = self._info.raw, args = self._info.args})&lt;br /&gt;
&lt;br /&gt;
		retval = {&lt;br /&gt;
			{name = parent1, sort = self._sc:getCanonicalName()},&lt;br /&gt;
			{name = parent2, sort = self._sc:getCanonicalName()},&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		local parents&lt;br /&gt;
		if is_umbrella then&lt;br /&gt;
			parents = self._data.umbrella and self._data.umbrella.parents or self._data.umbrella_parents&lt;br /&gt;
		else&lt;br /&gt;
			parents = self._data.parents&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		retval = self:canonicalize_parents_children(parents)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not retval then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local self_cat = self:getCategoryName()&lt;br /&gt;
	for _, parent in ipairs(retval) do&lt;br /&gt;
		local parent_cat = parent.name.getCategoryName and parent.name:getCategoryName()&lt;br /&gt;
		if self_cat == parent_cat then&lt;br /&gt;
			error((&amp;quot;Internal error: Infinite loop would occur, as parent category &amp;#039;%s&amp;#039; is the same as the child category&amp;quot;):&lt;br /&gt;
				format(self_cat))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getTopicParents()&lt;br /&gt;
	if self._data[&amp;quot;topic_parents&amp;quot;] then&lt;br /&gt;
		local topic_parents = {}&lt;br /&gt;
		for _, topic_parent in ipairs(self._data[&amp;quot;topic_parents&amp;quot;]) do&lt;br /&gt;
			if self._lang then&lt;br /&gt;
				table.insert(topic_parents, self._lang:getCode() .. &amp;quot;:&amp;quot; .. topic_parent)&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(topic_parents, topic_parent)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return topic_parents&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getChildren()&lt;br /&gt;
	local is_umbrella = not self._lang and not self._info.raw&lt;br /&gt;
	local children = self._data.children&lt;br /&gt;
&lt;br /&gt;
	local ret = {}&lt;br /&gt;
&lt;br /&gt;
	if not is_umbrella and children then&lt;br /&gt;
		for _, child in ipairs(children) do&lt;br /&gt;
			child = mw.clone(child)&lt;br /&gt;
&lt;br /&gt;
			if type(child) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
				child = {name = child}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if not child.sort then&lt;br /&gt;
				child.sort = child.name&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- FIXME, is preserving the script correct?&lt;br /&gt;
			child.name = self:make_new({code = self._info.code, label = child.name, raw = child.raw, sc = self._info.sc})&lt;br /&gt;
&lt;br /&gt;
			table.insert(ret, child)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local extra_children&lt;br /&gt;
	if is_umbrella then&lt;br /&gt;
		extra_children = self._data.umbrella and self._data.umbrella.extra_children&lt;br /&gt;
	else&lt;br /&gt;
		extra_children = self._data.extra_children&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	extra_children = self:canonicalize_parents_children(extra_children, &amp;quot;children&amp;quot;)&lt;br /&gt;
	if extra_children then&lt;br /&gt;
		for _, child in ipairs(extra_children) do&lt;br /&gt;
			table.insert(ret, child)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #ret == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getUmbrella()&lt;br /&gt;
	if self._info.raw or not self._lang or self._sc or self._data.umbrella == false then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return self:make_new({label = self._info.label})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getAppendix()&lt;br /&gt;
	-- FIXME, this should be customizable.&lt;br /&gt;
	if not self._info.raw and self._info.label and self._lang then&lt;br /&gt;
		local appendixName = &amp;quot;Appendix:&amp;quot; .. self._lang:getCanonicalName() .. &amp;quot; &amp;quot; .. self._info.label&lt;br /&gt;
		local appendix = mw.title.new(appendixName).exists&lt;br /&gt;
		if appendix then&lt;br /&gt;
			return appendixName&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getCatfixInfo()&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		if self._data.catfix == false then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local lang, sc&lt;br /&gt;
		if self._data.catfix then&lt;br /&gt;
			lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self:substitute_template_specs(self._data.catfix), true, nil, nil, true)&lt;br /&gt;
		else&lt;br /&gt;
			lang = self._lang&lt;br /&gt;
		end&lt;br /&gt;
		if self._data.catfix_sc then&lt;br /&gt;
			sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(self:substitute_template_specs(self._data.catfix_sc), true, nil, true)&lt;br /&gt;
		else&lt;br /&gt;
			sc = self._sc&lt;br /&gt;
		end&lt;br /&gt;
		return lang, sc&lt;br /&gt;
	else -- umbrella&lt;br /&gt;
		if not self._data.umbrella or not self._data.umbrella.catfix then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self:substitute_template_specs(self._data.umbrella.catfix), true, nil, nil, true)&lt;br /&gt;
		local sc = self:substitute_template_specs(self._data.umbrella.catfix_sc)&lt;br /&gt;
		if sc then&lt;br /&gt;
			sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(sc, true, nil, true)&lt;br /&gt;
		end&lt;br /&gt;
		return lang, sc&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getTOCTemplateName()&lt;br /&gt;
	local lang, sc = self:getCatfixInfo()&lt;br /&gt;
	local code = lang and lang:getCode() or &amp;quot;en&amp;quot;&lt;br /&gt;
	return &amp;quot;Template:&amp;quot; .. code .. &amp;quot;-&amp;quot; .. (self._data.toctemplateprefix or &amp;quot;&amp;quot;) .. &amp;quot;categoryTOC&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getDisplay()&lt;br /&gt;
	if self._data[&amp;quot;display&amp;quot;] then&lt;br /&gt;
		if self._lang then&lt;br /&gt;
			return self._lang:getCanonicalName() .. &amp;quot; &amp;quot; .. self._data[&amp;quot;display&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			return mw.getContentLanguage():ucfirst(self._data[&amp;quot;display&amp;quot;]) .. &amp;quot; by language&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Category:getDisplay2()&lt;br /&gt;
	if self._data[&amp;quot;display&amp;quot;] then&lt;br /&gt;
		if self._lang then&lt;br /&gt;
			return mw.getContentLanguage():ucfirst(self._data[&amp;quot;display&amp;quot;])&lt;br /&gt;
		else&lt;br /&gt;
			return mw.getContentLanguage():ucfirst(self._data[&amp;quot;display&amp;quot;]) .. &amp;quot; by language&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Category:getSort()&lt;br /&gt;
	return self._data[&amp;quot;sort&amp;quot;]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>bob&gt;Djpwikiadmin</name></author>
	</entry>
</feed>