<?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:TemplateDataDoc?feed=atom</id>
	<title>Модуль:TemplateDataDoc - История изменений</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:TemplateDataDoc?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:TemplateDataDoc"/>
	<updated>2026-04-06T13:00:42Z</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:TemplateDataDoc&amp;diff=77100&amp;oldid=prev</id>
		<title>Pok в 14:29, 5 апреля 2025</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:TemplateDataDoc&amp;diff=77100&amp;oldid=prev"/>
		<updated>2025-04-05T14:29:01Z</updated>

		<summary type="html">&lt;p&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:29, 5 апреля 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- source: https://ru.wikipedia.org/wiki/Модуль:TemplateDataDoc&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- license: CC BY-SA 4.0 &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;require( &amp;#039;strict&amp;#039; );&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;require( &amp;#039;strict&amp;#039; );&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local docSubPage = mw.message.new( &amp;#039;Templatedata-doc-subpage&amp;#039; ):plain();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local docSubPage = mw.message.new( &amp;#039;Templatedata-doc-subpage&amp;#039; ):plain();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key ss14_wiki:diff:1.41:old-77099:rev-77100:php=table --&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:TemplateDataDoc&amp;diff=77099&amp;oldid=prev</id>
		<title>Pok: Новая страница: «require( &#039;strict&#039; ); local docSubPage = mw.message.new( &#039;Templatedata-doc-subpage&#039; ):plain();  local p = {};  local lastNumber = 0;  -- Enable/disable additional spacing for block-formatted templates local formatBlockSpaces = true;  -- Params that should not be shown in code local deprecatedParams = { 	&#039;nocat&#039;, 	&#039;from&#039;, 	&#039;nocoord&#039;, 	&#039;nocatcoord&#039;, 	&#039;Автооформление заголовка&#039;, 	&#039;автооформление заголовка&#039;, 	&#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:TemplateDataDoc&amp;diff=77099&amp;oldid=prev"/>
		<updated>2025-04-05T14:28:51Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «require( &amp;#039;strict&amp;#039; ); local docSubPage = mw.message.new( &amp;#039;Templatedata-doc-subpage&amp;#039; ):plain();  local p = {};  local lastNumber = 0;  -- Enable/disable additional spacing for block-formatted templates local formatBlockSpaces = true;  -- Params that should not be shown in code local deprecatedParams = { 	&amp;#039;nocat&amp;#039;, 	&amp;#039;from&amp;#039;, 	&amp;#039;nocoord&amp;#039;, 	&amp;#039;nocatcoord&amp;#039;, 	&amp;#039;Автооформление заголовка&amp;#039;, 	&amp;#039;автооформление заголовка&amp;#039;, 	&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 docSubPage = mw.message.new( &amp;#039;Templatedata-doc-subpage&amp;#039; ):plain();&lt;br /&gt;
&lt;br /&gt;
local p = {};&lt;br /&gt;
&lt;br /&gt;
local lastNumber = 0;&lt;br /&gt;
&lt;br /&gt;
-- Enable/disable additional spacing for block-formatted templates&lt;br /&gt;
local formatBlockSpaces = true;&lt;br /&gt;
&lt;br /&gt;
-- Params that should not be shown in code&lt;br /&gt;
local deprecatedParams = {&lt;br /&gt;
	&amp;#039;nocat&amp;#039;,&lt;br /&gt;
	&amp;#039;from&amp;#039;,&lt;br /&gt;
	&amp;#039;nocoord&amp;#039;,&lt;br /&gt;
	&amp;#039;nocatcoord&amp;#039;,&lt;br /&gt;
	&amp;#039;Автооформление заголовка&amp;#039;,&lt;br /&gt;
	&amp;#039;автооформление заголовка&amp;#039;,&lt;br /&gt;
	&amp;#039;Ширина&amp;#039;,&lt;br /&gt;
	&amp;#039;ширина&amp;#039;,&lt;br /&gt;
	&amp;#039;Ширина изображения&amp;#039;,&lt;br /&gt;
	&amp;#039;ширина изображения&amp;#039;,&lt;br /&gt;
	&amp;#039;Ширина логотипа&amp;#039;,&lt;br /&gt;
	&amp;#039;ширина логотипа&amp;#039;,&lt;br /&gt;
	&amp;#039;Ширина автографа&amp;#039;,&lt;br /&gt;
	&amp;#039;ширина автографа&amp;#039;,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
local noDocNote = &amp;#039;TemplateDataDoc: Запишите страницу для отображения заполненного шаблона.&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
function p.processJson( json )&lt;br /&gt;
	local status, data = pcall( mw.text.jsonDecode, json );&lt;br /&gt;
	if status == false then&lt;br /&gt;
		return nil;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not data[ &amp;#039;paramOrder&amp;#039; ] then&lt;br /&gt;
		data[ &amp;#039;paramOrder&amp;#039; ] = {};&lt;br /&gt;
		for paramName, paramData in pairs( data[ &amp;#039;params&amp;#039; ] ) do&lt;br /&gt;
			table.insert( data[ &amp;#039;paramOrder&amp;#039; ], paramName );&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, param in ipairs( deprecatedParams ) do&lt;br /&gt;
		if data[ &amp;#039;params&amp;#039; ][ param ] ~= nil then&lt;br /&gt;
			data[ &amp;#039;params&amp;#039; ][ param ][ &amp;#039;deprecated&amp;#039; ] = &amp;#039;-&amp;#039;;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return data;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTemplateData( pageName )&lt;br /&gt;
	local title = mw.title.makeTitle( 0, pageName );&lt;br /&gt;
	if not title or not title.exists then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local content = title:getContent()&lt;br /&gt;
	if not content then&lt;br /&gt;
		return false;&lt;br /&gt;
	end;&lt;br /&gt;
&lt;br /&gt;
	local json = mw.ustring.match( content, &amp;#039;&amp;lt;[Tt]emplate[Dd]ata%s*&amp;gt;(.*)&amp;lt;/[Tt]emplate[Dd]ata%s*&amp;gt;&amp;#039; );&lt;br /&gt;
	if not json then&lt;br /&gt;
		return nil;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p.processJson( json )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getValue( data, key )&lt;br /&gt;
	if data[ key ] then&lt;br /&gt;
		return data[ key ];&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Numbered keys return as numbers&lt;br /&gt;
	local nkey = tonumber( key );&lt;br /&gt;
	if nkey ~= nil and data[ nkey ] then&lt;br /&gt;
		return data[ nkey ];&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {};&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- See https://phabricator.wikimedia.org/diffusion/ETDA/browse/master/Specification.md?as=remarkup&lt;br /&gt;
-- We need a global format value for the &amp;#039;block&amp;#039; and &amp;#039;inline&amp;#039;: [[phab:T205438]]&lt;br /&gt;
function p.convertFormatString( rawTemplateFormat )&lt;br /&gt;
	local formatType = rawTemplateFormat or &amp;#039;inline&amp;#039;;&lt;br /&gt;
	local templateFormat = formatType;&lt;br /&gt;
	local isBlockFormatted = false;&lt;br /&gt;
	if formatType == &amp;#039;block&amp;#039; then&lt;br /&gt;
		templateFormat = &amp;#039;{{_\n| _ = _\n}}&amp;#039;;&lt;br /&gt;
		isBlockFormatted = true;&lt;br /&gt;
	elseif formatType == &amp;#039;inline&amp;#039; then&lt;br /&gt;
		templateFormat = &amp;#039;{{_|_=_}}&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return templateFormat, isBlockFormatted, formatType;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getFormatParts( rawTemplateFormat, templateName )&lt;br /&gt;
	local templateFormat, isBlockFormatted, formatType = p.convertFormatString( rawTemplateFormat );&lt;br /&gt;
	local nameFormat = mw.ustring.match( templateFormat, &amp;#039;^[^|]+&amp;#039; );&lt;br /&gt;
	local paramKeyFormat = mw.ustring.match( templateFormat, &amp;#039;%|[^=]+=&amp;#039; );&lt;br /&gt;
	local paramValueFormat = mw.ustring.match( templateFormat, &amp;#039;=[^}]+&amp;#039; );&lt;br /&gt;
	paramValueFormat = mw.ustring.sub( paramValueFormat, 2 );&lt;br /&gt;
	local endFormat = mw.ustring.match( templateFormat, &amp;#039;%}%}.*$&amp;#039; );&lt;br /&gt;
	local startFormat = mw.ustring.gsub( nameFormat, &amp;#039;_&amp;#039;, templateName );&lt;br /&gt;
&lt;br /&gt;
	return isBlockFormatted, formatType, startFormat, endFormat, paramKeyFormat, paramValueFormat;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatKeyValue( key, parameterData, formatData )&lt;br /&gt;
	if parameterData[ &amp;#039;deprecated&amp;#039; ] then&lt;br /&gt;
		return &amp;#039;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
	local args = formatData.args;&lt;br /&gt;
	local parameterName = key;&lt;br /&gt;
	local nkey = tonumber( key );&lt;br /&gt;
	&lt;br /&gt;
	-- Add additional spacing to string keys&lt;br /&gt;
	if formatBlockSpaces and formatData.parameterLength and formatData.formatType ~= &amp;#039;inline&amp;#039; and ( nkey == nil or lastNumber ~= nkey - 1 ) then&lt;br /&gt;
		while mw.ustring.len( key ) &amp;lt; formatData.parameterLength do&lt;br /&gt;
			key = key .. &amp;#039; &amp;#039;;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Remove numbering for adjacent numbered keys&lt;br /&gt;
	if nkey ~= nil and lastNumber == nkey - 1 then&lt;br /&gt;
		key = &amp;#039;&amp;#039;;&lt;br /&gt;
		lastNumber = nkey;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local value = &amp;#039;&amp;#039;;&lt;br /&gt;
	if formatData.valueKey == &amp;#039;example&amp;#039; and parameterData[ &amp;#039;example&amp;#039; ] then&lt;br /&gt;
		-- Example&lt;br /&gt;
		value = parameterData[ &amp;#039;example&amp;#039; ];&lt;br /&gt;
	else&lt;br /&gt;
		if formatData.valueKey == &amp;#039;description&amp;#039; and parameterData[ &amp;#039;description&amp;#039; ] then&lt;br /&gt;
			-- Description&lt;br /&gt;
			value = parameterData[ &amp;#039;description&amp;#039; ];&lt;br /&gt;
			if value ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				value = &amp;#039;&amp;lt;!-- &amp;#039; .. value .. &amp;#039; --&amp;gt;&amp;#039;;&lt;br /&gt;
			end&lt;br /&gt;
		elseif parameterData[ &amp;#039;autovalue&amp;#039; ] then&lt;br /&gt;
			-- Autovalue&lt;br /&gt;
			value = parameterData[ &amp;#039;autovalue&amp;#039; ];&lt;br /&gt;
		end&lt;br /&gt;
		if args[ &amp;#039;$&amp;#039; .. parameterName ] and args[ &amp;#039;$&amp;#039; .. parameterName ] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			-- Custom values from template call&lt;br /&gt;
			value = args[ &amp;#039;$&amp;#039; .. parameterName ];&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local formattedKey = mw.ustring.gsub( formatData.paramKeyFormat, &amp;#039;_+&amp;#039;, key, 1 );&lt;br /&gt;
	if key == &amp;#039;&amp;#039; then&lt;br /&gt;
		formattedKey = mw.ustring.gsub( formattedKey, &amp;#039;=&amp;#039;, &amp;#039;&amp;#039; );&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return formattedKey .. mw.ustring.gsub( formatData.paramValueFormat, &amp;#039;_&amp;#039;, value, 1 );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.generateBlankCode( templateData, templateName, args )&lt;br /&gt;
	if templateData == false then&lt;br /&gt;
		return &amp;#039;{{&amp;#039; .. templateName .. &amp;#039;}}&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local parameterLength = 0;&lt;br /&gt;
	for i, parameterName in ipairs( templateData[ &amp;#039;paramOrder&amp;#039; ] ) do&lt;br /&gt;
		local parameterData = p.getValue( templateData[ &amp;#039;params&amp;#039; ], parameterName );&lt;br /&gt;
		if not parameterData[ &amp;#039;deprecated&amp;#039; ] then&lt;br /&gt;
			local length = mw.ustring.len( parameterName );&lt;br /&gt;
			if length &amp;gt; parameterLength then&lt;br /&gt;
				parameterLength = length;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local isBlockFormatted, formatType, startFormat, endFormat, paramKeyFormat, paramValueFormat = p.getFormatParts( templateData[ &amp;#039;format&amp;#039; ], templateName );&lt;br /&gt;
	local out = startFormat;&lt;br /&gt;
&lt;br /&gt;
	lastNumber = 0;&lt;br /&gt;
	for i, parameterName in ipairs( templateData[ &amp;#039;paramOrder&amp;#039; ] ) do&lt;br /&gt;
		local parameterData = p.getValue( templateData[ &amp;#039;params&amp;#039; ], parameterName );&lt;br /&gt;
		if parameterData[ &amp;#039;inherits&amp;#039; ] then&lt;br /&gt;
			parameterData = p.getValue( templateData[ &amp;#039;params&amp;#039; ], parameterData[ &amp;#039;inherits&amp;#039; ] );&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		out = out .. p.formatKeyValue( parameterName, parameterData, {&lt;br /&gt;
			args = args,&lt;br /&gt;
			valueKey = ( args[ &amp;#039;description&amp;#039; ] and &amp;#039;description&amp;#039; or nil ),&lt;br /&gt;
			formatType = formatType,&lt;br /&gt;
			isBlockFormatted = isBlockFormatted,&lt;br /&gt;
			parameterLength = parameterLength,&lt;br /&gt;
			paramKeyFormat = paramKeyFormat,&lt;br /&gt;
			paramValueFormat = paramValueFormat,&lt;br /&gt;
		} );&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return out .. endFormat;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.generateBlank( frame )&lt;br /&gt;
	local frame = mw.getCurrentFrame();&lt;br /&gt;
	local getArgs = require( &amp;#039;Module:Arguments&amp;#039; ).getArgs;&lt;br /&gt;
	local args = getArgs( frame );&lt;br /&gt;
	local templateName = frame.args[ 1 ];&lt;br /&gt;
	table.remove( args, 1 );&lt;br /&gt;
	&lt;br /&gt;
	local docPage = &amp;#039;Template:&amp;#039; .. templateName .. &amp;#039;/&amp;#039; .. docSubPage;&lt;br /&gt;
	local templateData = p.getTemplateData( docPage );&lt;br /&gt;
	local out = p.generateBlankCode( templateData, templateName, args );&lt;br /&gt;
&lt;br /&gt;
	local previewNote = &amp;#039;&amp;#039;&lt;br /&gt;
	if templateData == false and frame:preprocess(&amp;#039;{{REVISIONID}}&amp;#039;) == &amp;#039;&amp;#039; then&lt;br /&gt;
		previewNote = &amp;#039;&amp;lt;div class=&amp;quot;warningbox&amp;quot;&amp;gt;&amp;#039; .. noDocNote .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return previewNote .. frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;syntaxhighlight&amp;#039;,&lt;br /&gt;
		args = { lang = &amp;#039;html&amp;#039;, copy = true },&lt;br /&gt;
		content = out,&lt;br /&gt;
	};&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.generateExampleCode( templateData, templateName, args )&lt;br /&gt;
	if templateData == false then&lt;br /&gt;
		return &amp;#039;{{&amp;#039; .. templateName .. &amp;#039;}}&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local parameterLength = 0;&lt;br /&gt;
	for i, parameterName in ipairs( templateData[ &amp;#039;paramOrder&amp;#039; ] ) do&lt;br /&gt;
		local parameterData = p.getValue( templateData[ &amp;#039;params&amp;#039; ], parameterName );&lt;br /&gt;
		if parameterData[ &amp;#039;example&amp;#039; ] and not parameterData[ &amp;#039;deprecated&amp;#039; ] then&lt;br /&gt;
			local length = mw.ustring.len( parameterName );&lt;br /&gt;
			if length &amp;gt; parameterLength then&lt;br /&gt;
				parameterLength = length;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local isBlockFormatted, formatType, startFormat, endFormat, paramKeyFormat, paramValueFormat = p.getFormatParts( templateData[ &amp;#039;format&amp;#039; ], templateName );&lt;br /&gt;
	local out = startFormat;&lt;br /&gt;
&lt;br /&gt;
	lastNumber = 0;&lt;br /&gt;
	for i, parameterName in ipairs( templateData[ &amp;#039;paramOrder&amp;#039; ] ) do&lt;br /&gt;
		local parameterData = p.getValue( templateData[ &amp;#039;params&amp;#039; ], parameterName );&lt;br /&gt;
		if parameterData[ &amp;#039;inherits&amp;#039; ] then&lt;br /&gt;
			parameterData = p.getValue( templateData[ &amp;#039;params&amp;#039; ], parameterData[ &amp;#039;inherits&amp;#039; ] );&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if parameterData[ &amp;#039;example&amp;#039; ] then&lt;br /&gt;
			out = out .. p.formatKeyValue( parameterName, parameterData, {&lt;br /&gt;
				args = args,&lt;br /&gt;
				valueKey = &amp;#039;example&amp;#039;,&lt;br /&gt;
				formatType = formatType,&lt;br /&gt;
				isBlockFormatted = isBlockFormatted,&lt;br /&gt;
				parameterLength = parameterLength,&lt;br /&gt;
				paramKeyFormat = paramKeyFormat,&lt;br /&gt;
				paramValueFormat = paramValueFormat,&lt;br /&gt;
			} );&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return out .. endFormat;&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
function p.generateExample( frame )&lt;br /&gt;
	local frame = mw.getCurrentFrame();&lt;br /&gt;
	local args = frame.args;&lt;br /&gt;
	local templateName = frame.args[ 1 ];&lt;br /&gt;
	local docPage = &amp;#039;Template:&amp;#039; .. templateName .. &amp;#039;/&amp;#039; .. docSubPage;&lt;br /&gt;
	local templateData = p.getTemplateData( docPage );&lt;br /&gt;
	local out = p.generateExampleCode( templateData, templateName, args );&lt;br /&gt;
	&lt;br /&gt;
	local previewNote = &amp;#039;&amp;#039;&lt;br /&gt;
	if templateData == false and frame:preprocess(&amp;#039;{{REVISIONID}}&amp;#039;) == &amp;#039;&amp;#039; then&lt;br /&gt;
		previewNote = &amp;#039;&amp;lt;div class=&amp;quot;warningbox&amp;quot;&amp;gt;&amp;#039; .. noDocNote .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return previewNote .. frame:preprocess( out ) .. frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;syntaxhighlight&amp;#039;,&lt;br /&gt;
		args = { lang = &amp;#039;html&amp;#039; },&lt;br /&gt;
		content = out,&lt;br /&gt;
	};&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>Pok</name></author>
	</entry>
</feed>