<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://station14.ru/history/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Disambig?feed=atom</id>
	<title>Модуль:Disambig - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://station14.ru/history/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Disambig?feed=atom"/>
	<link rel="alternate" type="text/html" href="https://station14.ru/history/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Disambig"/>
	<updated>2026-04-06T05:42:48Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://station14.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Disambig&amp;diff=108242&amp;oldid=prev</id>
		<title>Pok: Защитил страницу Модуль:Disambig ([Редактирование=Разрешено только инженерам] (бессрочно) [Переименование=Разрешено только инженерам] (бессрочно))</title>
		<link rel="alternate" type="text/html" href="https://station14.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Disambig&amp;diff=108242&amp;oldid=prev"/>
		<updated>2025-10-27T14:53:48Z</updated>

		<summary type="html">&lt;p&gt;Защитил страницу &lt;a href=&quot;/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Disambig&quot; title=&quot;Модуль:Disambig&quot;&gt;Модуль:Disambig&lt;/a&gt; ([Редактирование=Разрешено только инженерам] (бессрочно) [Переименование=Разрешено только инженерам] (бессрочно))&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;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 17:53, 27 октября 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key ss14_wiki:diff:1.41:old-101503:rev-108242 --&gt;
&lt;/table&gt;</summary>
		<author><name>Pok</name></author>
	</entry>
	<entry>
		<id>https://station14.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Disambig&amp;diff=101503&amp;oldid=prev</id>
		<title>Pok: Новая страница: «require( &#039;strict&#039; ) local p = {}  local getArgs = require( &#039;Module:Arguments&#039; ).getArgs local escapePattern = require( &#039;Module:String&#039; )._escapePattern local nestedQuotes  local currentTitle = mw.title.getCurrentTitle()  -- source: https://ru.wikipedia.org/wiki/Модуль:Disambig -- license: CC BY-SA 4.0   -- Module:Disambig/styles.css local templateStylesPage = &#039;Module:Disambig/styles.css&#039; local data = mw.loadJsonData( &#039;Module:Disambig/data.json&#039; )...»</title>
		<link rel="alternate" type="text/html" href="https://station14.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Disambig&amp;diff=101503&amp;oldid=prev"/>
		<updated>2025-06-13T05:04:13Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «require( &amp;#039;strict&amp;#039; ) local p = {}  local getArgs = require( &amp;#039;Module:Arguments&amp;#039; ).getArgs local escapePattern = require( &amp;#039;Module:String&amp;#039; )._escapePattern local nestedQuotes  local currentTitle = mw.title.getCurrentTitle()  -- source: https://ru.wikipedia.org/wiki/Модуль:Disambig -- license: CC BY-SA 4.0   -- &lt;a href=&quot;/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Disambig/styles.css&quot; title=&quot;Модуль:Disambig/styles.css&quot;&gt;Module:Disambig/styles.css&lt;/a&gt; local templateStylesPage = &amp;#039;Module:Disambig/styles.css&amp;#039; local data = mw.loadJsonData( &amp;#039;Module:Disambig/data.json&amp;#039; )...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require( &amp;#039;strict&amp;#039; )&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs = require( &amp;#039;Module:Arguments&amp;#039; ).getArgs&lt;br /&gt;
local escapePattern = require( &amp;#039;Module:String&amp;#039; )._escapePattern&lt;br /&gt;
local nestedQuotes&lt;br /&gt;
&lt;br /&gt;
local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
-- source: https://ru.wikipedia.org/wiki/Модуль:Disambig&lt;br /&gt;
-- license: CC BY-SA 4.0 &lt;br /&gt;
&lt;br /&gt;
-- [[Module:Disambig/styles.css]]&lt;br /&gt;
local templateStylesPage = &amp;#039;Module:Disambig/styles.css&amp;#039;&lt;br /&gt;
local data = mw.loadJsonData( &amp;#039;Module:Disambig/data.json&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local configData = data[ &amp;#039;--config&amp;#039; ]&lt;br /&gt;
local defaultData = data[ &amp;#039;--disambig&amp;#039; ]&lt;br /&gt;
local errorData = data[ &amp;#039;--error&amp;#039; ]&lt;br /&gt;
&lt;br /&gt;
local function getAliases()&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for key, val in pairs( data ) do&lt;br /&gt;
		if val[ &amp;#039;aliases&amp;#039; ] then&lt;br /&gt;
			for i, alias in ipairs( val[ &amp;#039;aliases&amp;#039; ] ) do&lt;br /&gt;
				result[ alias ] = key&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local aliases = getAliases()&lt;br /&gt;
&lt;br /&gt;
local function isEmpty( str )&lt;br /&gt;
	return str == nil or str == &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function escapeRepl( text )&lt;br /&gt;
	-- Replace % to %% to avoid %1, %2, %3 being treated as groups&lt;br /&gt;
	return ( mw.ustring.gsub( text, &amp;#039;%%&amp;#039;, &amp;#039;%%%&amp;#039; ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getConfig( key, isRequired )&lt;br /&gt;
	if configData == nil then&lt;br /&gt;
		return error( &amp;#039;getConfig: config is missing in Module:Disambig/data.json&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if isRequired ~= false and isEmpty( configData[ key ] ) then&lt;br /&gt;
		return error( string.format( &amp;#039;getConfig: &amp;quot;%s&amp;quot; key is missing in Module:Disambig/data.json&amp;#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return configData[ key ] or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isNotOther( dtype )&lt;br /&gt;
	local aliasesOther = data[ &amp;#039;--other&amp;#039; ][ &amp;#039;aliases&amp;#039; ]&lt;br /&gt;
	for i, alias in ipairs( aliasesOther ) do&lt;br /&gt;
		if dtype == alias then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function pageNameBase( page )&lt;br /&gt;
	return ( mw.ustring.gsub( page, &amp;#039;^%s*(.+)%s+%b()%s*$&amp;#039;, &amp;#039;%1&amp;#039; ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function setCategory( title, key )&lt;br /&gt;
	if isEmpty( title ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if not isEmpty( key ) then&lt;br /&gt;
		title = title .. &amp;#039;|&amp;#039; .. key&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return string.format( &amp;#039;[[Category:%s]]&amp;#039;, title )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatText( str, params, frame )&lt;br /&gt;
	if isEmpty( str ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Replace spaces after specified patterns to non-breaking spaces&lt;br /&gt;
	local nbspPatterns = getConfig( &amp;#039;nbspPatterns&amp;#039;, false )&lt;br /&gt;
	if type( nbspPatterns ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		nbspPatterns = {}&lt;br /&gt;
	end&lt;br /&gt;
	for i, val in ipairs( nbspPatterns ) do&lt;br /&gt;
		-- last symbol is Unicode &amp;amp;nbsp; to allow replacements near &amp;amp;nbsp; itself&lt;br /&gt;
		str = mw.ustring.gsub( str, &amp;#039;(%s)(&amp;#039; .. val .. &amp;#039;) &amp;#039;, &amp;#039;%1%2 &amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Replace provided parameters in form of {param}&lt;br /&gt;
	if params ~= nil and type( params ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		for key, val in pairs( params ) do&lt;br /&gt;
			str = mw.ustring.gsub( str, &amp;#039;%{&amp;#039; .. key .. &amp;#039;%}&amp;#039;, escapeRepl( val ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Preprocess if frame was provided&lt;br /&gt;
	if frame ~= nil then&lt;br /&gt;
		return frame:preprocess( str )&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatNestedQuotes( str )&lt;br /&gt;
	if str:find( &amp;#039;«&amp;#039; ) ~= nil then&lt;br /&gt;
		nestedQuotes = nestedQuotes or require( &amp;#039;Модуль:Вложенные кавычки&amp;#039; )._main&lt;br /&gt;
		return nestedQuotes( str )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getFixMessage( about )&lt;br /&gt;
	local aboutStr = getConfig( &amp;#039;aboutDefault&amp;#039; )&lt;br /&gt;
	if not isEmpty( about ) then&lt;br /&gt;
		aboutStr = formatText( getConfig( &amp;#039;about&amp;#039; ), {&lt;br /&gt;
			about = about,&lt;br /&gt;
		} )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = currentTitle.fullText&lt;br /&gt;
	local wlh = mw.title.new( &amp;#039;Special:WhatLinksHere/&amp;#039; .. page )&lt;br /&gt;
	return formatText( getConfig( &amp;#039;fixLinks&amp;#039; ), {&lt;br /&gt;
		about = aboutStr,&lt;br /&gt;
		url = wlh:fullUrl( &amp;#039;namespace=0&amp;amp;hidetrans=1&amp;#039; ),&lt;br /&gt;
	} )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getPseudoBlock( text, class )&lt;br /&gt;
	local result = mw.html.create( &amp;#039;div&amp;#039; )&lt;br /&gt;
	result:addClass( &amp;#039;ts-disambig-block &amp;#039; .. ( class or &amp;#039;&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	result:tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	result:tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig-text&amp;#039; )&lt;br /&gt;
		:wikitext( text )&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getProjectLink( node )&lt;br /&gt;
	if node == nil then&lt;br /&gt;
		return error( &amp;#039;getProjectLink: no node&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local projectPage = getConfig( &amp;#039;projectPage&amp;#039;, false )&lt;br /&gt;
	local projectIcon = getConfig( &amp;#039;projectIcon&amp;#039;, false )&lt;br /&gt;
	local projectLabel = getConfig( &amp;#039;projectLabel&amp;#039;, false )&lt;br /&gt;
	if isEmpty( projectPage ) or isEmpty( projectIcon ) or isEmpty( projectLabel ) then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local projTitle = mw.title.new( projectPage )&lt;br /&gt;
	node:tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig-projectLink plainlinks group-user-show&amp;#039; )&lt;br /&gt;
		:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
			:wikitext( string.format(&lt;br /&gt;
				&amp;#039;[[File:%s|20x20px|link=|alt=]][%s %s]&amp;#039;,&lt;br /&gt;
				projectIcon,&lt;br /&gt;
				projTitle:fullUrl(),&lt;br /&gt;
				projectLabel&lt;br /&gt;
			) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local seeAlsoLinks = {}&lt;br /&gt;
local function getSeeAlso( category, isSingle )&lt;br /&gt;
	local page = pageNameBase( currentTitle.fullText )&lt;br /&gt;
	local seeAlso = formatText( getConfig( &amp;#039;seeAlso&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	-- Get search link with intitle: with titles with words&lt;br /&gt;
	local intitleLink = &amp;#039;.&amp;#039;&lt;br /&gt;
	if isSingle and mw.ustring.find( page, &amp;#039;%a&amp;#039; ) ~= nil then&lt;br /&gt;
		local pageParts = mw.text.split( mw.ustring.gsub( page, &amp;#039;[,«»?!—%%]&amp;#039;, &amp;#039;&amp;#039; ), &amp;#039; &amp;#039; )&lt;br /&gt;
		if not isEmpty( pageParts[ 1 ] ) then&lt;br /&gt;
			local intitle = mw.uri.encode( &amp;#039;intitle:&amp;quot;&amp;#039; .. table.concat( pageParts, &amp;#039;&amp;quot; intitle:&amp;quot;&amp;#039; ) .. &amp;#039;&amp;quot;&amp;#039; )&lt;br /&gt;
			local intitleLabel = formatText( getConfig( &amp;#039;seeAlsoIntitle&amp;#039; ) )&lt;br /&gt;
			intitleLink = string.format(&lt;br /&gt;
				&amp;#039;, [%s %s].&amp;#039;,&lt;br /&gt;
				mw.title.new( &amp;#039;Special:Search&amp;#039; ):fullUrl(&lt;br /&gt;
					string.format( &amp;#039;search=%s&amp;amp;sort=create_timestamp_desc&amp;#039;, intitle )&lt;br /&gt;
				),&lt;br /&gt;
				intitleLabel&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not isEmpty( category ) then&lt;br /&gt;
		if seeAlsoLinks[ category ] == true then&lt;br /&gt;
			return &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		seeAlsoLinks[ category ] = true&lt;br /&gt;
		&lt;br /&gt;
		local cat = mw.title.new( &amp;#039;Category:&amp;#039; .. category )&lt;br /&gt;
		local catLabel = formatText( getConfig( &amp;#039;seeAlsoCategory&amp;#039; ) )&lt;br /&gt;
		return string.format(&lt;br /&gt;
			&amp;#039;%s [%s &amp;lt;span title=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;]&amp;#039;,&lt;br /&gt;
			seeAlso,&lt;br /&gt;
			cat:fullUrl( &amp;#039;from=&amp;#039; .. mw.uri.encode( page ) ),&lt;br /&gt;
			cat.fullText,&lt;br /&gt;
			catLabel&lt;br /&gt;
		) .. intitleLink&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local pageText = formatNestedQuotes( page )&lt;br /&gt;
	local prefixIndexLabel = formatText( getConfig( &amp;#039;seeAlsoPrefixIndex&amp;#039; ), {&lt;br /&gt;
		prefix = pageText,&lt;br /&gt;
	} )&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&amp;#039;%s [[Special:PrefixIndex/%s|%s]]&amp;#039;,&lt;br /&gt;
		seeAlso,&lt;br /&gt;
		page,&lt;br /&gt;
		prefixIndexLabel&lt;br /&gt;
	) .. intitleLink&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWrapper( node )&lt;br /&gt;
	return node:tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:attr( &amp;#039;id&amp;#039;, &amp;#039;disambig&amp;#039; )&lt;br /&gt;
		:attr( &amp;#039;role&amp;#039;, &amp;#039;note&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig-mbox metadata plainlinks&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Renders a single disambiguation type message&lt;br /&gt;
function p._renderPart( frame, data, isSingle, dtype )&lt;br /&gt;
	if frame == nil then&lt;br /&gt;
		frame = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if type( data ) ~= &amp;#039;table&amp;#039; or isEmpty( data[ &amp;#039;desc&amp;#039; ] ) or isEmpty( data[ &amp;#039;image&amp;#039; ] ) then&lt;br /&gt;
		return p._renderPart( frame, errorData, isSingle, dtype )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local node = mw.html.create( &amp;#039;&amp;#039; )&lt;br /&gt;
	local result = node:tag( isSingle and &amp;#039;div&amp;#039; or &amp;#039;li&amp;#039; )&lt;br /&gt;
	result:addClass( &amp;#039;ts-disambig-block&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local imageSize = isSingle and &amp;#039;30x40px&amp;#039; or &amp;#039;20x20px&amp;#039;&lt;br /&gt;
	result:tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig-image&amp;#039; )&lt;br /&gt;
		:wikitext(&lt;br /&gt;
			string.format( &amp;#039;[[File:%s|%s|class=noresize|link=|alt=]]&amp;#039;, data.image, imageSize )&lt;br /&gt;
		)&lt;br /&gt;
	&lt;br /&gt;
	local seeAlsoCat = data[ &amp;#039;seeAlsoCategory&amp;#039; ]&lt;br /&gt;
	&lt;br /&gt;
	local text = formatText( data[ &amp;#039;desc&amp;#039; ] )&lt;br /&gt;
	local textDiv = result:tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig-text&amp;#039; )&lt;br /&gt;
	if isSingle then&lt;br /&gt;
		if text:find( &amp;#039;class=&amp;quot;error&amp;quot;&amp;#039; ) ~= nil then&lt;br /&gt;
			text = formatText( text, {&lt;br /&gt;
				type = dtype,&lt;br /&gt;
			}, frame )&lt;br /&gt;
		else&lt;br /&gt;
			local fullStop = text:find( &amp;#039;%.$&amp;#039; ) == nil and &amp;#039;.&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
			text = string.format( &amp;#039;[[%s|%s%s]]&amp;#039;, getConfig( &amp;#039;helpPage&amp;#039; ), text, fullStop )&lt;br /&gt;
		end&lt;br /&gt;
		textDiv:tag( &amp;#039;div&amp;#039; ):wikitext( text )&lt;br /&gt;
		&lt;br /&gt;
		if dtype == &amp;#039;--category&amp;#039; then&lt;br /&gt;
			textDiv:tag( &amp;#039;div&amp;#039; ):wikitext( formatText( data[ &amp;#039;about&amp;#039; ] ) )&lt;br /&gt;
		else&lt;br /&gt;
			textDiv:tag( &amp;#039;div&amp;#039; ):wikitext( getFixMessage( data[ &amp;#039;about&amp;#039; ] ) )&lt;br /&gt;
		&lt;br /&gt;
			node:node( getPseudoBlock( getSeeAlso( seeAlsoCat, isSingle ) ) )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if data[ &amp;#039;short&amp;#039; ] then&lt;br /&gt;
			text = formatText( data[ &amp;#039;short&amp;#039; ], nil, frame )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if text:find( &amp;#039;class=&amp;quot;error&amp;quot;&amp;#039; ) ~= nil then&lt;br /&gt;
			text = formatText( text, {&lt;br /&gt;
				type = dtype,&lt;br /&gt;
			}, frame )&lt;br /&gt;
		else&lt;br /&gt;
			text = formatText( text ) .. &amp;#039;.&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if data[ &amp;#039;short&amp;#039; ] == &amp;#039;&amp;#039; then&lt;br /&gt;
			text = &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local addendum = not isEmpty( seeAlsoCat ) and getSeeAlso( seeAlsoCat, isSingle ) or &amp;#039;&amp;#039;&lt;br /&gt;
		textDiv:wikitext( text .. addendum )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local defaultNs = data[ &amp;#039;categoryNs&amp;#039; ] or 0&lt;br /&gt;
	if currentTitle.namespace == defaultNs then&lt;br /&gt;
		-- Assign default category here since it won’t be otherwise&lt;br /&gt;
		if isSingle and currentTitle.namespace == 0 then&lt;br /&gt;
			textDiv:wikitext( setCategory( defaultData[ &amp;#039;category&amp;#039; ] ) )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Assign a default sort key if title matches a prefix in config&lt;br /&gt;
		local defaultSortPrefixes = data[ &amp;#039;categorySortPrefixes&amp;#039; ]&lt;br /&gt;
		if isEmpty( defaultSortPrefixes ) ~= nil and type( defaultSortPrefixes ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			local cleanTitle = mw.ustring.gsub( pageNameBase( currentTitle.text ), &amp;#039;[«»„“&amp;quot;\&amp;#039;]&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
			for i, prefix in ipairs( defaultSortPrefixes ) do&lt;br /&gt;
				local pMatch = mw.ustring.match( cleanTitle, &amp;#039;^&amp;#039; .. escapePattern( prefix ) .. &amp;#039; &amp;#039; )&lt;br /&gt;
				if pMatch ~= nil then&lt;br /&gt;
					local sortKey = mw.ustring.gsub( cleanTitle, pMatch, &amp;#039;&amp;#039; )&lt;br /&gt;
					sortKey = mw.text.trim( sortKey )&lt;br /&gt;
					if sortKey ~= &amp;quot;&amp;quot; then&lt;br /&gt;
						textDiv:wikitext( frame:preprocess(&lt;br /&gt;
							string.format( &amp;#039;{{DEFAULTSORT:%s, %s}}&amp;#039;, sortKey, pMatch )&lt;br /&gt;
						) )&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;
		-- Assign the category&lt;br /&gt;
		textDiv:wikitext( setCategory( data[ &amp;#039;category&amp;#039; ] ) )&lt;br /&gt;
		&lt;br /&gt;
		if not isEmpty( data[ &amp;#039;add&amp;#039; ] ) then&lt;br /&gt;
			textDiv:wikitext( formatText( data[ &amp;#039;add&amp;#039; ], nil, frame ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return node&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Chooses which disambiguation type message to show&lt;br /&gt;
function p._getPart( frame, dtype, isSingle )&lt;br /&gt;
	if isEmpty( dtype ) then&lt;br /&gt;
		return p._renderPart( frame, errorData, isSingle, &amp;#039;*&amp;#039; ), dtype&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	dtype = mw.ustring.lower( dtype )&lt;br /&gt;
	if dtype:find( &amp;#039;/&amp;#039; ) then&lt;br /&gt;
		dtype = mw.text.split( dtype, &amp;#039;/&amp;#039; )[ 1 ]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local alias = aliases[ dtype ]&lt;br /&gt;
	if data[ dtype ] == nil and alias == nil then&lt;br /&gt;
		return p._renderPart( frame, errorData, isSingle, dtype ), dtype&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if data[ dtype ] ~= nil then&lt;br /&gt;
		return p._renderPart( frame, data[ dtype ], isSingle, dtype ), dtype&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._renderPart( frame, data[ alias ], isSingle, dtype ), alias&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Documentation for [[Template:Disambig]]&lt;br /&gt;
function p._doc( frame )&lt;br /&gt;
	if frame == nil then&lt;br /&gt;
		frame = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	local result = mw.html.create( &amp;#039;table&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;wikitable sortable plainlinks&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	result&lt;br /&gt;
		:tag( &amp;#039;caption&amp;#039; )&lt;br /&gt;
		:wikitext( getConfig( &amp;#039;docTable&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	result:tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
		:tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
			:attr( &amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039; )&lt;br /&gt;
			:wikitext( getConfig( &amp;#039;docColumnCode&amp;#039; ) )&lt;br /&gt;
		:tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
			:attr( &amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039; )&lt;br /&gt;
			:wikitext( getConfig( &amp;#039;docColumnOutput&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	for dtype, val in pairs( data ) do&lt;br /&gt;
		local als = val[ &amp;#039;aliases&amp;#039; ]&lt;br /&gt;
		if dtype:find( &amp;#039;^%-%-&amp;#039; ) == nil or dtype == &amp;#039;--other&amp;#039; then&lt;br /&gt;
			local displayedType = dtype&lt;br /&gt;
			local aliases = &amp;#039;&amp;#039;&lt;br /&gt;
			if dtype == &amp;#039;--other&amp;#039; then&lt;br /&gt;
				displayedType = als[ 1 ]&lt;br /&gt;
			end&lt;br /&gt;
			if als then&lt;br /&gt;
				for i, alias in ipairs( als ) do&lt;br /&gt;
					if dtype ~= &amp;#039;--other&amp;#039; or i ~= 1 then&lt;br /&gt;
						aliases = string.format( &amp;#039;%s, &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;#039;, aliases, alias )&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				aliases = aliases:gsub( &amp;#039;, &amp;#039;, &amp;#039;&amp;#039;, 1 )&lt;br /&gt;
				aliases = string.format( &amp;#039;&amp;lt;br&amp;gt;&amp;lt;i style=&amp;quot;opacity:0.85&amp;quot;&amp;gt;%s&amp;lt;/i&amp;gt;&amp;#039;, aliases )&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- Replace &amp;lt;li&amp;gt; to &amp;lt;div&amp;gt; here&lt;br /&gt;
			local template = tostring( p._getPart( frame, dtype, false ) )&lt;br /&gt;
			template = mw.ustring.gsub( template, &amp;#039;&amp;lt;(/?)li&amp;#039;, &amp;#039;&amp;lt;%1div&amp;#039; )&lt;br /&gt;
			&lt;br /&gt;
			result:tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
				:tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
					:attr( &amp;#039;style&amp;#039;, &amp;#039;font-size:85%&amp;#039; )&lt;br /&gt;
					:wikitext( string.format( &amp;#039;&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;%s&amp;#039;, displayedType, aliases ) )&lt;br /&gt;
				:tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
					:attr( &amp;#039;style&amp;#039;, &amp;#039;font-style:italic&amp;#039; )&lt;br /&gt;
					:wikitext( template )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( result )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.doc( frame )&lt;br /&gt;
	return p._doc( frame )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Generate suggested values in TemplateData blocks&lt;br /&gt;
function p._templateData( frame, content )&lt;br /&gt;
	if isEmpty( content ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if frame == nil then&lt;br /&gt;
		frame = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	local typeCount = 1&lt;br /&gt;
	local suggestedValues = {}&lt;br /&gt;
	for dtype, val in pairs( data ) do&lt;br /&gt;
		if dtype:find( &amp;#039;^%-%-&amp;#039; ) == nil or dtype == &amp;#039;--other&amp;#039; then&lt;br /&gt;
			if dtype == &amp;#039;--other&amp;#039; then&lt;br /&gt;
				suggestedValues[ typeCount ] = val[ &amp;#039;aliases&amp;#039; ][ 1 ]&lt;br /&gt;
			else&lt;br /&gt;
				suggestedValues[ typeCount ] = dtype&lt;br /&gt;
			end&lt;br /&gt;
			typeCount = typeCount + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	suggestedValues = table.concat( suggestedValues, &amp;#039;&amp;quot;, &amp;quot;&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	content = mw.ustring.gsub(&lt;br /&gt;
		content,&lt;br /&gt;
		&amp;#039;&amp;quot;suggestedvalues&amp;quot;: %[%]&amp;#039;,&lt;br /&gt;
		string.format( &amp;#039;&amp;quot;suggestedvalues&amp;quot;: [&amp;quot;%s&amp;quot;]&amp;#039;, suggestedValues )&lt;br /&gt;
	)&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatedata&amp;#039;,&lt;br /&gt;
		content = content,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.templateData( frame )&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local content = args[ 1 ]&lt;br /&gt;
	&lt;br /&gt;
	return p._templateData( frame, content )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Checks for errors in page code&lt;br /&gt;
local function checkErrors( frame, args )&lt;br /&gt;
	if currentTitle.namespace ~= 0 then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Check if current page is a redirect&lt;br /&gt;
	if currentTitle.isRedirect then&lt;br /&gt;
		return setCategory( errorData[ &amp;#039;category&amp;#039; ], &amp;#039;*&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local content = currentTitle:getContent()&lt;br /&gt;
	if isEmpty( content ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	content = mw.text.trim( content )&lt;br /&gt;
&lt;br /&gt;
	-- Case-insensitive template name&lt;br /&gt;
	local template = frame:getParent():getTitle()&lt;br /&gt;
	local mwTitle = mw.title.new( template )&lt;br /&gt;
	local templatePattern = string.format(&lt;br /&gt;
		&amp;quot;[%s%s]%s&amp;quot;,&lt;br /&gt;
		mw.ustring.upper( mw.ustring.sub( mwTitle.text, 1, 1 ) ),&lt;br /&gt;
		mw.ustring.lower( mw.ustring.sub( mwTitle.text, 1, 1 ) ),&lt;br /&gt;
		mw.ustring.gsub( escapePattern( mwTitle.text ), &amp;#039;^.&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	-- Check if it is at the start&lt;br /&gt;
	if mw.ustring.find( content, &amp;#039;{{&amp;#039; .. templatePattern ) == 1 then&lt;br /&gt;
		return setCategory( errorData[ &amp;#039;category&amp;#039; ], &amp;#039;↓&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Check if it is not the last template&lt;br /&gt;
	if mw.ustring.find( content, &amp;#039;{{&amp;#039; .. templatePattern .. &amp;#039;[^%}]-}}.-{{&amp;#039; ) ~= nil then&lt;br /&gt;
		return setCategory( errorData[ &amp;#039;category&amp;#039; ], &amp;#039;↓&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for key, val in pairs( args ) do&lt;br /&gt;
		if type( key ) ~= &amp;#039;number&amp;#039; then&lt;br /&gt;
			return setCategory( errorData[ &amp;#039;category&amp;#039; ], &amp;#039;~&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Protects templates from substitution by substituting them with their own parameters&lt;br /&gt;
function p._substing( frame, args, template )&lt;br /&gt;
	if args == nil then&lt;br /&gt;
		args = getArgs( frame, {&lt;br /&gt;
			parentOnly = true,&lt;br /&gt;
		} )&lt;br /&gt;
	end&lt;br /&gt;
	local mTemplateInvocation = require( &amp;#039;Module:Template invocation&amp;#039; )&lt;br /&gt;
	local name = mTemplateInvocation.name( template or frame:getParent():getTitle() )&lt;br /&gt;
	&lt;br /&gt;
	return mTemplateInvocation.invocation( name, args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Renders {{Disambig}} template&lt;br /&gt;
function p._main( frame, args )&lt;br /&gt;
	if frame == nil then&lt;br /&gt;
		frame = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	local result = mw.html.create( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local reflist = result:tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig-reflist&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	reflist:tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:attr( &amp;#039;role&amp;#039;, &amp;#039;heading&amp;#039; )&lt;br /&gt;
		:attr( &amp;#039;aria-level&amp;#039;, 2 )&lt;br /&gt;
		:wikitext( getConfig( &amp;#039;reflistLabel&amp;#039; ) )&lt;br /&gt;
	reflist:wikitext( frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;references&amp;#039;,&lt;br /&gt;
	} )&lt;br /&gt;
	&lt;br /&gt;
	local disambig = getWrapper( result )&lt;br /&gt;
	&lt;br /&gt;
	if isEmpty( args[ 1 ] ) then&lt;br /&gt;
		local hasTypes = false&lt;br /&gt;
		for i, dtype in pairs( args ) do&lt;br /&gt;
			if tonumber( i ) ~= nil and not isEmpty( dtype ) then&lt;br /&gt;
				hasTypes = true&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if not hasTypes then&lt;br /&gt;
			disambig:node( p._getPart( frame, &amp;#039;--disambig&amp;#039;, true ) )&lt;br /&gt;
		else&lt;br /&gt;
			disambig:node( p._renderPart( frame, errorData, true, &amp;#039;()&amp;#039; ) )&lt;br /&gt;
		end&lt;br /&gt;
	elseif isEmpty( args[ 2 ] ) then&lt;br /&gt;
		local dtype = args[ 1 ]&lt;br /&gt;
		disambig:node( p._getPart( frame, dtype, true ) )&lt;br /&gt;
	else&lt;br /&gt;
		disambig:node( p._getPart( frame, &amp;#039;--disambig&amp;#039;, true ) )&lt;br /&gt;
		&lt;br /&gt;
		disambig:node( getPseudoBlock( getConfig( &amp;#039;typesLabel&amp;#039; ), &amp;#039;ts-disambig-listIntro&amp;#039; ) )&lt;br /&gt;
		&lt;br /&gt;
		local list = disambig:tag( &amp;#039;ul&amp;#039; )&lt;br /&gt;
			:attr( &amp;#039;role&amp;#039;, &amp;#039;list&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;ts-disambig-list&amp;#039; )&lt;br /&gt;
		local hasOther = false&lt;br /&gt;
		&lt;br /&gt;
		local usedTypes = {}&lt;br /&gt;
		for i, dtype in ipairs( args ) do&lt;br /&gt;
			if isNotOther( dtype ) then&lt;br /&gt;
				local part, usedType = p._getPart( frame, dtype, false )&lt;br /&gt;
				if not usedTypes[ usedType ] then&lt;br /&gt;
					list:node( part )&lt;br /&gt;
					usedTypes[ usedType ] = true&lt;br /&gt;
				else&lt;br /&gt;
					list:node( p._renderPart( frame, errorData, false, dtype ) )&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				hasOther = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if hasOther then&lt;br /&gt;
			list:node( p._getPart( frame, &amp;#039;--other&amp;#039;, false ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	getProjectLink( result )&lt;br /&gt;
	&lt;br /&gt;
	result = tostring( result )&lt;br /&gt;
	if currentTitle.namespace == 0 then&lt;br /&gt;
		result = &amp;#039;__DISAMBIG__&amp;#039; .. frame:extensionTag{&lt;br /&gt;
			name = &amp;#039;indicator&amp;#039;,&lt;br /&gt;
			content = string.format( &amp;#039;[[File:Disambig.svg|20px|link=%s|%s]]&amp;#039;, getConfig( &amp;#039;helpPage&amp;#039; ), getConfig( &amp;#039;helpLabel&amp;#039; ) ),&lt;br /&gt;
			args = { name = &amp;#039;0-disambig&amp;#039; },&lt;br /&gt;
		} .. result&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		args = { src = templateStylesPage },&lt;br /&gt;
	} .. result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main( frame )&lt;br /&gt;
	if mw.isSubsting() then&lt;br /&gt;
		return p._substing( frame )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	return p._main( frame, args ) .. checkErrors( frame, args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Renders alias templates with substing capabilities&lt;br /&gt;
function p.alias( frame )&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local template = args[ &amp;#039;$template&amp;#039; ]&lt;br /&gt;
	&lt;br /&gt;
	args[ &amp;#039;$template&amp;#039; ] = nil&lt;br /&gt;
	if mw.isSubsting() then&lt;br /&gt;
		return p._substing( frame, args, &amp;#039;Template:&amp;#039; .. template )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return frame:expandTemplate{&lt;br /&gt;
		title = template,&lt;br /&gt;
		args = { args[ 1 ] },&lt;br /&gt;
	} .. checkErrors( frame, args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Renders {{Category disambiguation}} template&lt;br /&gt;
function p._category( frame, args )&lt;br /&gt;
	if frame == nil then&lt;br /&gt;
		frame = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if isEmpty( args[ 2 ] ) and isEmpty( args[ 4 ] ) then&lt;br /&gt;
		return error( getConfig( &amp;#039;categoryError&amp;#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local params = {}&lt;br /&gt;
	for key, val in pairs( args ) do&lt;br /&gt;
		if type( key ) == &amp;#039;number&amp;#039; then&lt;br /&gt;
			if isEmpty( params[ key - 1 ] ) then&lt;br /&gt;
				params[ key - 1 ] = params[ key - 1 ] or &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			params[ key ] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local result = mw.html.create( &amp;#039;div&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig&amp;#039; )&lt;br /&gt;
	local disambig = getWrapper( result )&lt;br /&gt;
	&lt;br /&gt;
	disambig:node( p._getPart( frame, &amp;#039;--category&amp;#039;, true ) )&lt;br /&gt;
	&lt;br /&gt;
	disambig:node( getPseudoBlock( getConfig( &amp;#039;categoryIntro&amp;#039; ), &amp;#039;ts-disambig-listIntro&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local list = disambig:tag( &amp;#039;ul&amp;#039; )&lt;br /&gt;
		:attr( &amp;#039;role&amp;#039;, &amp;#039;list&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;ts-disambig-list ts-disambig-categoryList&amp;#039; )&lt;br /&gt;
	for i, catName in ipairs( params ) do&lt;br /&gt;
		if i % 2 == 0 and not isEmpty( catName ) then&lt;br /&gt;
			local catLabel = formatNestedQuotes( catName )&lt;br /&gt;
			local text = string.format( &amp;#039;[[:Category:%s|%s]]&amp;#039;, catName, catLabel )&lt;br /&gt;
&lt;br /&gt;
			local label = args[ i - 1 ]&lt;br /&gt;
			if not isEmpty( label ) then&lt;br /&gt;
				text = string.format(&lt;br /&gt;
					&amp;#039;&amp;lt;i&amp;gt;%s&amp;lt;/i&amp;gt; — %s &amp;#039;,&lt;br /&gt;
					label,&lt;br /&gt;
					formatText( getConfig( &amp;#039;categoryInLabel&amp;#039; ), {&lt;br /&gt;
						category = text,&lt;br /&gt;
					} )&lt;br /&gt;
				)&lt;br /&gt;
			else&lt;br /&gt;
				text = string.format( &amp;#039;&amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt;&amp;#039;, text )&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			list:node( getPseudoBlock( text ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	getProjectLink( result )&lt;br /&gt;
	&lt;br /&gt;
	result = tostring( result )&lt;br /&gt;
	if currentTitle.namespace == 14 then&lt;br /&gt;
		result = &amp;#039;__DISAMBIG__&amp;#039; .. &amp;#039;__EXPECTUNUSEDCATEGORY__&amp;#039; .. result&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		args = { src = templateStylesPage },&lt;br /&gt;
	} .. result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.category( frame )&lt;br /&gt;
	if mw.isSubsting() then&lt;br /&gt;
		return p._substing( frame )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._category( frame, getArgs( frame ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Pok</name></author>
	</entry>
</feed>