Перейти к содержимому страницы
Открыть меню
Переключить меню настроек
Открыть персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.

Модуль:NameFirst

Материал из вики «Вече»
Версия от 17:30, 15 августа 2026; wp>ru.wikipedia (Импорт из русской Википедии, версия 154455039)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Для документации этого модуля может быть создана страница Модуль:NameFirst/doc

require( 'strict' )
--
-- Реализация [[Шаблон:Сначала имя]]
--
local p = {}

local currentTitle = mw.title.getCurrentTitle().fullText

local function isEmpty( str )
	return str == nil or str == ''
end

-- Требуется ли пробел после последнего символа в имени
local function needsSpace( name )
	local rlen = mw.ustring.len( name )
	local char = mw.ustring.sub( name, rlen, rlen )
	
	return char ~= "’" and char ~= "'"
end

function p._main( title )
	if isEmpty( title ) then
		title = currentTitle
	end

	-- Из [[Шаблон:Без уточнения]]
	title = mw.ustring.gsub( title, '^%s*(.+)%s+%b()%s*$', '%1', 1 )
	
	local parts = mw.text.split( title, ',', true )
	if #parts < 2 then
		return parts[ 1 ]
	end

	-- Перестановка первых двух параметров до запятой местами
	local result = mw.text.trim( parts[ 2 ] )
	if needsSpace( result ) then
		result = result .. ' '
	end
	result = result .. parts[ 1 ]

	-- Возврат значений после 1-й запятой в изначальном виде (Джордж Харрис, 1-й барон Харрис, да святится имя его)
	for i, val in pairs( parts ) do
		if i ~= 1 and i ~= 2 then
			result = result .. ', ' .. mw.text.trim( val )
		end
	end

	return result
end

function p.main( frame )
	local args = require( 'Module:Arguments' ).getArgs( frame )

	return p._main( args[ 1 ] )
end

return p