<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://vion.tail5ecd76.ts.net/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ACountry_by_code</id>
	<title>Модуль:Country by code - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://vion.tail5ecd76.ts.net/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ACountry_by_code"/>
	<link rel="alternate" type="text/html" href="https://vion.tail5ecd76.ts.net/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Country_by_code&amp;action=history"/>
	<updated>2026-11-07T23:01:37Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://vion.tail5ecd76.ts.net/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Country_by_code&amp;diff=7204&amp;oldid=prev</id>
		<title>wp&gt;ru.wikipedia: Импорт из русской Википедии, версия 155353727</title>
		<link rel="alternate" type="text/html" href="https://vion.tail5ecd76.ts.net/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Country_by_code&amp;diff=7204&amp;oldid=prev"/>
		<updated>2026-09-30T01:25:39Z</updated>

		<summary type="html">&lt;p&gt;Импорт из русской Википедии, версия 155353727&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Преобразует название страны, код ФИФА/МОК/ISO α-3 (и α-2) или национальный&lt;br /&gt;
-- домен верхнего уровня (без точки) в общепринятое название страны&lt;br /&gt;
-- в именительном или родительном падеже.&lt;br /&gt;
-- Данные лежат в [[Модуль:Country by code/data]] и загружаются через mw.loadData,&lt;br /&gt;
-- поэтому при многократных вызовах на одной странице таблица не копируется&lt;br /&gt;
-- и не строится заново.&lt;br /&gt;
-- Отслеживаемые ключи (английские названия и  устаревшие коды) разрешаются как обычно,&lt;br /&gt;
-- но страницы основного пространства имён, где такой ключ встретился, попадают в категорию отслеживания.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local data = mw.loadData(&amp;#039;Модуль:Country by code/data&amp;#039;)&lt;br /&gt;
local countries     = data.countries      -- [id] = { им, род }&lt;br /&gt;
local aliases       = data.aliases        -- [точный ключ] = id&lt;br /&gt;
local aliasesLower  = data.aliases_lower  -- [ключ в нижнем регистре] = id&lt;br /&gt;
local tracked       = data.tracked        -- [точный ключ] = true&lt;br /&gt;
local trackedLower  = data.tracked_lower  -- [ключ в нижнем регистре] = true&lt;br /&gt;
&lt;br /&gt;
-- Категория отслеживания: страница категории создаётся отдельно; значение nil отключает слежение.&lt;br /&gt;
local TRACKING_CATEGORY = &amp;#039;Википедия:Страницы с английским названием или устаревшим кодом страны&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local ulower = mw.ustring.lower&lt;br /&gt;
local trim   = mw.text.trim&lt;br /&gt;
&lt;br /&gt;
-- Индекс падежа в записи страны. Всё неизвестное трактуем как именительный.&lt;br /&gt;
local CASE_INDEX = {&lt;br /&gt;
	[&amp;#039;р&amp;#039;]   = 2, -- родительный&lt;br /&gt;
	[&amp;#039;r&amp;#039;]   = 2, -- на случай латинской буквы в параметре&lt;br /&gt;
	[&amp;#039;gen&amp;#039;] = 2,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Ищет запись страны по коду или названию.&lt;br /&gt;
-- Возвращает запись (или nil) и признак «ключ отслеживаемый» (true/false).&lt;br /&gt;
-- Порядок поиска:&lt;br /&gt;
-- 1) точное совпадение с ключом (регистр важен: «LTU» и «lt» — разные ключи);&lt;br /&gt;
-- 2) запасной поиск в нижнем регистре («rus» найдёт «RUS»).&lt;br /&gt;
local function findEntry(key)&lt;br /&gt;
	key = trim(key)&lt;br /&gt;
	if key == &amp;#039;&amp;#039; then&lt;br /&gt;
		return nil, false&lt;br /&gt;
	end&lt;br /&gt;
	local id = aliases[key]&lt;br /&gt;
	if id then&lt;br /&gt;
		return countries[id], tracked[key] == true&lt;br /&gt;
	end&lt;br /&gt;
	local lkey = ulower(key)&lt;br /&gt;
	id = aliasesLower[lkey]&lt;br /&gt;
	if id then&lt;br /&gt;
		return countries[id], trackedLower[lkey] == true&lt;br /&gt;
	end&lt;br /&gt;
	return nil, false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Возвращает три значения: результат, статус (&amp;#039;ok&amp;#039;, &amp;#039;unknown&amp;#039; или &amp;#039;empty&amp;#039;)&lt;br /&gt;
-- и признак «ключ отслеживаемый». Если код не найден, результат — введённая строка.&lt;br /&gt;
function p._lookup(code, case)&lt;br /&gt;
	code = trim(code or &amp;#039;&amp;#039;)&lt;br /&gt;
	if code == &amp;#039;&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;#039;, &amp;#039;empty&amp;#039;, false&lt;br /&gt;
	end&lt;br /&gt;
	local entry, isTracked = findEntry(code)&lt;br /&gt;
	if not entry then&lt;br /&gt;
		return code, &amp;#039;unknown&amp;#039;, false&lt;br /&gt;
	end&lt;br /&gt;
	local idx = CASE_INDEX[ulower(trim(case or &amp;#039;&amp;#039;))] or 1&lt;br /&gt;
	return entry[idx] or entry[1], &amp;#039;ok&amp;#039;, isTracked&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Основная функция для вызова из других модулей.&lt;br /&gt;
-- code — название страны, код ФИФА/МОК/ISO или домен;&lt;br /&gt;
-- case — &amp;#039;и&amp;#039; (по умолчанию) или &amp;#039;р&amp;#039;;&lt;br /&gt;
-- Если страна не найдена, возвращается исходная строка.&lt;br /&gt;
function p._name(code, case)&lt;br /&gt;
	return (p._lookup(code, case))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Проверка существования, чтобы другие модули могли отличить&lt;br /&gt;
-- «нет в базе» от «название совпало с кодом».&lt;br /&gt;
function p._exists(code)&lt;br /&gt;
	return findEntry(code or &amp;#039;&amp;#039;) ~= nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- true, если ключ разрешается, но относится к отслеживаемым&lt;br /&gt;
-- (английское название или устаревший код).&lt;br /&gt;
function p._tracked(code)&lt;br /&gt;
	local entry, isTracked = findEntry(code or &amp;#039;&amp;#039;)&lt;br /&gt;
	return entry ~= nil and isTracked&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Аргументы: если код передан прямо в #invoke, используется он (так удобно тестировать),&lt;br /&gt;
-- иначе используются параметры из вызова шаблона (родительский фрейм).&lt;br /&gt;
local function getArgs(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	if (args[1] == nil or trim(args[1]) == &amp;#039;&amp;#039;) then&lt;br /&gt;
		local parent = frame:getParent()&lt;br /&gt;
		if parent then&lt;br /&gt;
			args = parent.args&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- {{#invoke:Country by code|main|&amp;lt;код&amp;gt;|&amp;lt;падеж&amp;gt;}}&lt;br /&gt;
-- Обычно используется через шаблон {{СтранаПоКоду|&amp;lt;код&amp;gt;|&amp;lt;падеж&amp;gt;}}.&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local name, status, isTracked = p._lookup(args[1], args[2])&lt;br /&gt;
	if isTracked and TRACKING_CATEGORY&lt;br /&gt;
		and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
		name = name .. &amp;#039;[[Категория:&amp;#039; .. TRACKING_CATEGORY .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- {{#invoke:Country by code|exists|&amp;lt;код&amp;gt;}} → 1 или пустая строка&lt;br /&gt;
-- (удобно для #if вместо проверки существования подстраницы).&lt;br /&gt;
function p.exists(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._exists(args[1]) and &amp;#039;1&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wp&gt;ru.wikipedia</name></author>
	</entry>
</feed>