Дакументацыю да гэтага модуля можна стварыць у Модуль:MoscowMetro/Дакументацыя

local i18n = {
	NAMES = {
		['1']  = 'Сакольніцкая',
		['2']  = 'Замаскварэцкая',
		['3']  = 'Арбацка-Пакроўская',
		['4']  = 'Філёўская',
		['4А']  = 'Філёўская',
		['5']  = 'Кальцавая',
		['6']  = 'Калужска-Рыжская',
		['7']  = 'Таганска-Краснапрэсненская',
		['8']  = 'Калінінская',
		['8А'] = 'Сонцаўская',
		['8КС'] = 'Калінінска-Сонцаўская',
		['9']  = 'Серпухаўска-Ціміразеўская',
		['10'] = 'Люблінска-Дзмітраўская',
		['11'] = 'Вялікая кальцавая',
		['11А'] = 'Вялікая кальцавая',
		['11К'] = 'Кахоўская',
		['12'] = 'Бутаўская',
        ['13'] = 'Манарэйка',
        ['14'] = 'Маскоўскае цэнтральнае кальцо',
		['15'] = 'Някрасаўская',
		['16'] = 'Троіцкая',
		['17'] = 'Рублёва-Архангельская',
		['18'] = 'Бірулёўская',
		['D1']  = 'МЦД-1',
		['D2']  = 'МЦД-2',
		['D3']  = 'МЦД-3',
		['D4']  = 'МЦД-4',
		['D5']  = 'МЦД-5'
	},
	html = {
		icon_fmt = '<span title="%s">[[File:Moskwa Metro Line %s.svg|%spx|%s|link=%s]]</span>', -- parameters: alt, linenum, icon size, alt, link
		text_fmt = '[[%s|<span style="display:inline-block;line-height:%spx;height:%spx;font-size:%spx;font-style:normal;font-weight:bold;background:#%s;color:white;white-space:nowrap;text-align:center" title="%s">&thinsp;%s&thinsp;</span>]]', --[[
		                                          parameters: link, icon size, icon size, icon size - 3, color, alt, linenum   ]]
		small = '<span style="font-size:85%%">%s</span>',
		style = '<span style="%s">%s</span>',
		sortkey = '<span style="display:none" class="sortkey">%s</span>',
	},
	text = {
		transfer = 'Пераход на станцыю %s %s',
		CPIC = 'Крос-платформавая перасадка на станцыю %s %s',
		dab = ' (станцыя метро)',
	},
	default = {
		icon_size = '15'
	}
}
i18n.NAMES['СолЛ'] = i18n.NAMES['8']; i18n.NAMES['КСЛ'] = i18n.NAMES['8'];
i18n.NAMES['L1'], i18n.NAMES['Л1'] = i18n.NAMES['12'], i18n.NAMES['12']; --для сумяшчальнасці з папярэднімі версіямі шаблонаў
i18n.NAMES['МАЧ'] = i18n.NAMES['14']; 
i18n.NAMES['КожЛ'] = i18n.NAMES['15']; i18n.NAMES['НЛ']  = i18n.NAMES['15'];
i18n.NAMES['КамЛ'] = i18n.NAMES['16']; 

i18n.line = function(num) -- назва лініі ў назоўным склоне
	if num == '13' then return 'Маскоўская манарэйка'
	elseif num == '14' then return 'Маскоўскае цэнтральнае кальцо'
	elseif num == 'D1' then return 'МЦД-1'
	elseif num == 'D2' then return 'МЦД-2'
	elseif num == 'D3' then return 'МЦД-3'
	elseif num == 'D4' then return 'МЦД-4'
	elseif num == 'D5' then return 'МЦД-5'
	else return i18n.NAMES[num] .. ' лінія'
	end
end

i18n.link = function(num) -- спасылка на старонку лініі
	if num == '5' then return i18n.NAMES[num] .. ' лінія (Масква)'
	else return i18n.line(num)
	end
end

i18n.ofLine = function(num) -- назва лініі ў родным склоне ("перасадка на станцыю ... ... лініі")
	if num == 'ТПК' or num == '11' then return 'Трэцяга перасадачнага контуру'
	elseif num == '13' then return 'Маскоўскай манарэйкі'
	elseif num == '14' then return 'Маскоўскага цэнтральнага кальца'
	elseif num == 'D1' then return 'МЦД-1'
	elseif num == 'D2' then return 'МЦД-2'
	elseif num == 'D3' then return 'МЦД-3'
	elseif num == 'D4' then return 'МЦД-4'
	elseif num == 'D5' then return 'МЦД-5'
	else return mw.ustring.sub(i18n.NAMES[num], 1, -3) .. 'ой лініі'
	end
end

local COLORS = { -- ЗМЯНЯЙЦЕ ЗНАЧЭННІ КОЛЕРАЎ ТОЛЬКІ Ў АДПАВЕДНАСЦІ З АФІЦЫЙНАЙ СХЕМАЙ
	['1']  = 'EF161E', -- Сакольніцкая
	['2']  = '2DBE2C', -- Замаскварэцкая
	['3']  = '0078BE', -- Арбацка-Пакроўская
	['4']  = '00BFFF', -- Філёўская
	['4А'] = '00BFFF', -- Філёўская
	['5']  = '8D5B2D', -- Кальцавая
	['6']  = 'ED9121', -- Калужска-Рыжская
	['7']  = '800080', -- Таганска-Красапрэсненская
	['8']  = 'FFD702', -- Калінінская
	['8А'] = 'FFD702', -- Сонцаўская
	['8КС'] = 'FFD702', -- Калінінска-Сонцаўская
	['9']  = '999999', -- Серпухаўска-Ціміразеўская
	['10'] = '99CC00', -- Люблінска-Дзмітраўская
	['11'] = '82C0C0', -- Вялікая кальцавая лінія
	['11А'] = '82C0C0', -- Вялікая кальцавая лінія
	['11К'] = '231F20', -- Кахоўская лінія
	['12'] = 'A1B3D4', -- Бутаўская
    ['13'] = '9999FF', -- Маскоўская манарэйка
    ['14'] = 'FFFFFF', -- Маскоўскае цэнтрольнае кальцо
	['15'] = 'DE64A1', -- Някрасаўская
	['16'] = 'D8D8D8', -- Троіцкая (часова)
	['17'] = '231F20', -- Рублёва-Архангельская (часова)
	['18'] = '231F20', -- Бірулёўская (часова)
	['D1']  = 'f6a600', -- МЦД-1
	['D2']  = 'e74280', -- МЦД-2
	['D3']  = 'e95b0c', -- МЦД-3
	['D4']  = '40b280', -- МЦД-4
	['D5']  = '77b729', -- МЦД-5
}
COLORS['М1'] = COLORS['13'] 
COLORS['Кажухаўская'] = COLORS['15']
COLORS['СолЛ'] = COLORS['8А'] ; COLORS['Солнцаўская'] = COLORS['8А'] ; COLORS['Сонцаўская'] = COLORS['8А'] ; COLORS['КСЛ'] = COLORS['8']
COLORS['L1'], COLORS['Л1'] = COLORS['12'], COLORS['12']
COLORS['МАЧ'] = COLORS['14'];
COLORS['КожЛ'] = COLORS['15'];

function IconByNum(num)
	if num == 'КожЛ' then return nil
	elseif num == 'КСЛ' or num == 'КалЛ' then return '8'
	elseif num == 'СолЛ' then return '8А'
	elseif num == 'ТПК' then return '11'
	elseif num == 'М1' then return '13'
    elseif num == 'МАЧ' then return '14'
	else return num
	end
end

local p = {}

function p.ColorByNum(frame)
	return COLORS[mw.text.trim(frame.args[1] or '')] or '[[Катэгорыя:Вікіпедыя:Артыкулы з няслушна зададзенымі параметрамі модуля MoscowMetro]]'
end

function p.NameByNum(frame)
    return i18n.NAMES[mw.text.trim(frame.args[1] or '')] or '[[Катэгорыя:Вікіпедыя:Артыкулы з няслушна зададзенымі параметрамі модуля MoscowMetro]]'
end

function p.interchange(frame)
	local num, station, station_dabbed, CPIC = frame.args['line'] or '', frame.args['station'] or '', frame.args['station_dabbed'] or '', frame.args['CPIC'] or '' ~= ''
	local icon_size, alt, text, small, style = frame.args['size'] or '', frame.args['alt'] or '', frame.args['text'] or '', frame.args['small'] or '', frame.args['style'] or ''
	local icon, station_stripped
	if not i18n.NAMES[num] then return '[[Катэгорыя:Вікіпедыя:Артыкулы з няслушна зададзенымі параметрамі модуля MoscowMetro]]' end
	local iconN = IconByNum(num)
	if icon_size == '' then
		icon_size = i18n.default.icon_size
	elseif mw.ustring.sub(icon_size, -2 ) == 'px' then
		icon_size = mw.ustring.sub(icon_size, 1, -3 )
	end
	if alt == '' then
		if station ~= '' then
			alt = mw.ustring.format(i18n.text[CPIC ~= '' and 'CPIC' or 'transfer'], station, i18n.ofLine(num))
		elseif station_dabbed ~= '' then
			station_stripped = mw.ustring.match(station_dabbed, '(.-) %(') or station_dabbed
			alt = mw.ustring.format(i18n.text[CPIC ~= '' and 'CPIC' or 'transfer'], station_stripped, i18n.ofLine(num))
		else
			alt = i18n.line(num)
		end
	elseif station_dabbed ~= '' then
		station_stripped = mw.ustring.match(station_dabbed, '(.-) %(') or station_dabbed
	end
	local link = text == '' and (station_dabbed ~= '' and station_dabbed or (station ~= '' and station .. i18n.text.dab or i18n.link(num))) or i18n.link(num)
	if iconN then
		icon = mw.ustring.format(i18n.html.sortkey, mw.ustring.len(iconN) == 2 and iconN or '0' .. iconN) .. mw.ustring.format(i18n.html.icon_fmt, alt, iconN, icon_size, alt, link)
	else
		icon = mw.ustring.format(i18n.html.text_fmt, link, icon_size, icon_size, tonumber(icon_size) - 3, COLORS[num], alt, num)
	end
	if text == '' then return icon end
	local result = ''
	if station_dabbed ~= '' then
		result = '[[' .. station_dabbed .. '|' .. (station ~= '' and station or station_stripped) .. ']]'
	elseif station ~= '' then
		result = '[[' .. station .. i18n.text.dab .. '|' .. station .. ']]'
	elseif link == mw.title.getCurrentTitle().prefixedText then
		result = style ~= '' and mw.ustring.format(i18n.html.style, style, text == '2' and i18n.NAMES[num] or i18n.line(num)) or (text == '2' and i18n.NAMES[num] or i18n.line(num))
	elseif text == '2' and num ~= 'ТПК' or style ~= '' or num == '5' then
		result = '[[' .. link .. '|' .. (style ~= '' and mw.ustring.format(i18n.html.style, style, text == '2' and i18n.NAMES[num] or i18n.line(num)) or (text == '2' and i18n.NAMES[num] or i18n.line(num))) .. ']]'
	else
		result = '[[' .. link .. ']]'
	end
	if small ~= '' then result = mw.ustring.format(i18n.html.small, result) end
	return (not iconN and station == '' and station_dabbed == '' and '' or icon .. '&nbsp;') .. result
end

return p