Модуль:Парсер фамилии

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация
local p = {}


local asianFamily = "" ..
-- Китайцынет фамилии
"Ай Ань Ао Ба Бай Байли Бань Бао Бе Би Бин Бо Бу Бэй Бэнь Бянь Ван Вань Во Вэй " ..
"Вэйшэн Вэн Вэнь Вэньжэнь Гань Гао Го Гоу Гу Гуан Гуань Гуй Гулян Гун Гунлян " ..
"Гунси Гунсунь Гунъе Гунъян Гэ Гэн Да Дай Дан Ди Дин Диу Доу Ду Дуань Дуаньгань " ..
"Дуаньму Дун Дунго Дунмэнь Дунфан Дэн Дяо Е Жансы Жань Жао Жу Жуань Жуй Жун " ..
"Жэнь И Ин Инь Кан Кань Коу Куай Куан Куй Кун Кэ Лай Лан Лань Лао Ли Лин " ..
"Линху Линь Ло Лоу Лу Луань Лун Лэй Лэн Лю Люй Люйцю Лян Лянцю Лянь Ляо Ма " ..
"Мань Мао Ми Мин Минь Мо Моу Моци Му Мужун Мэй Мэн Мяо На Най Наньгун Наньмэнь " ..
"Не Ни Нин Нун Ню Нянь Оу Оуян Пан Пань Пи Пин Пу Пуян Пэй Пэн Сан Се Си Симэнь " ..
"Син Синь Со Су Сун Сы Сыкоу Сыкун Сыма Сыту Сюань Сюаньюань Сюй Сюн Сюнь Сюэ " ..
"Ся Сян Сянь Сяньюй Сяо Сяхоу Тай Тайшу Тан Тань Таньтай Тао Тоба Тоу Ту Тун " ..
"Тэн Тянь У Ума Фа Фан Фань Фу Фэй Фэн Ха Хай Хан Хань Хао Хо Хоу Ху Хуа Хуай " ..
"Хуан Хуанфу Хуань Хун Хуэй Хуянь Хэ Хэлянь Хэн Цай Цан Цао Цзай Цзайфу Цзан " ..
"Цзань Цзи Цзин Цзинь Цзо Цзоу Цзоцю Цзу Цзун Цзунчжэн Цзы Цзыцзюй Цзэн Цзюй " ..
"Цзя Цзягу Цзян Цзянь Цзяо Ци Цигуань Цидяо Цинь Цуй Цун Цэнь Цю Цюань Цюй " ..
"Цюэ Цян Цянь Цяо Чай Чан Чаньюй Чао Чжа Чжай Чжан Чжансунь Чжань Чжао Чжи " ..
"Чжо Чжоу Чжу Чжуан Чжуаньсунь Чжугэ Чжун Чжунли Чжунсунь Чжэн Чжэнь Чи Чу " ..
"Чун Чуньюй Чэ Чэн Чэнь Ша Шан Шангуань Шань Шао Ши Шоу Шу Шуай Шуан Шуй Шэ " ..
"Шэн Шэнь Шэньту Э Ю Юань Юй Юйвэнь Юйчи Юн Юнь Юэ Юэчжэн Ян Яншэ Янь Яо" ..
-- Корейские
"Ё Ём Ён Ан Вон Гон Джим Джо Жуй И Им Кан Квак Квон Ки Ким Ко Кон Ку Кусан Ли " ..
"Лим Ма Мо Мун Нам Но О Ом Пак Пак-Паан Пан Пон Пэ Пэк Пён Ри Ро Рю Са Сим " ..
"Син Со Сок Соль Сон Тан Тань Тэ Тё Х Ха Хан Хван Хо Хон Хён Цой Чан Чжон Чи " ..
"Чин Чо Чой Чон Чу Чун Чха Чхан Чхве Чхин Ю Юн Ян" ..
-- Вьетнам
"Ан Бао Буй Бхам Ван Во Ву Вьет Данг Динь До Донг Зуи Зук Зыонг Зя Кхай Кхук " ..
" Кьен Лак Лам Ле Ли Ма Мадам Май Мак Минь Мэгги Нго Нгуен Нонг Он Па Та Танг " ..
" Тила То Тон Туэ Тхай Тхань Тхить Тхьеу Тхюи Ты Тэйшон Фам Фан Фунг Фыонг Ха " ..
" Хам Хо Хоанг Хонг-банг Хьеп Хюинь Цуй Чан Чинь Чынг Чыонг Чьеу"

local function getAllWords(str)
	local result = {}
	local i = 1
	for item in str:gmatch('%S+') do
		result[i] = item
		i = i + 1
	end
	return result
end

local function getLastWord(str)
	local arr = getAllWords(str)
	return arr[#arr]
end

local function getFirstWord(str)
	return getAllWords(str)[1]
end

local function familyIsEmpty(family)
    family = family or ''
    if (string.len(family) == 0) then
    	return true
	else
		return false
	end
end

local function isArabic(str)
	local tags = {'Ибн'}
	local nameArr = getAllWords(str)
	for i, name in ipairs(nameArr) do
		for j, tag in ipairs(tags) do
			if (name == tag) then
				return true
			end
		end
	end
end
  
local function isAsian(str)
	if asianFamily:find(getFirstWord(str)) ~= nil then
		return true
	else
		return false
	end
end

local function isEuropeanTitlePage(str)
	str = str or ''
	if (string.len(str) == 0) then
		return false
	end
	if (string.find(str , ',') ~= nil) then
		return true
	else
		return false
	end
end

local function templatePrint(str, frame)
	local titleGoodName = mw.title.new(str .. ' (фамилия)')
	local titleStandart = mw.title.new(str .. ' (значения)')
	local titleClassic  = mw.title.new(str)
	if titleGoodName == nil then
		if titleStandart == nil then
			if titleClassic == nil then
				return 'там пусто'
			end
		end
	end
	if titleGoodName.exists and not titleGoodName.isRedirect then
		return frame:expandTemplate{ title = 'Однофамильцы', args = {str .. ' (фамилия)|' .. str} }
	end
	if titleStandart.exists and not titleStandart.isRedirect then
		return frame:expandTemplate{ title = 'Однофамильцы', args = {str .. ' (значения)|' .. str} }
	end
	if titleClassic.exists and not titleClassic.isRedirect then
		return frame:expandTemplate{ title = 'Однофамильцы', args = {str} }
	else
		return '[[Категория:Википедия:Статьи с отсутствующей страницей однофамильцев]]'
	end
end

function p.display(frame)
	local name = frame.args['имя'] or ''
	local family = frame.args['фамилия'] or ''
	local pageName = frame.args['название'] or ''
	if (familyIsEmpty(family) == false) then
		-- Нужен отдельный обработчик, хз почему
		--return templatePrint(family, frame)
		return '[[Категория:Статьи, использующие парсер фамилии]]'
	else
		if (string.find(name, ' ') ~= nil) then
			if (isAsian(name)) then
				return templatePrint(getFirstWord(name), frame)
			end
			if (isArabic(name)) then
				return '[[Категория:Персоны с арабским именем]]'
			end
			if (isEuropeanTitlePage(pageName)) then
				return templatePrint(getLastWord(name), frame)
			else
				return ''
			end
		else
			return ''
		end
	end
end

return p