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