Module:Sandbox/N3rsti/Names Explained

local p =

local lang =

--Basic pattern function is used for names that wasn't detected by getnames as a name from specific country. It returns last word as a surname and other words as a name-- function basic_pattern(fullname) local name = string.match(fullname, "(.+) (%w+)") local surname = string.gsub(fullname, name .. " ", "") if #name_table > 3 then return one_name_pattern(fullname) end return "Given = " .. name .. " -- " .. "Family = " .. surnameend

function one_name_pattern(fullname) local name = name_table[1] local surname = string.gsub(fullname, name .. " ", "") if string.match(fullname, " del ") then end return "Given = " .. name .. " -- " .. "Family = " .. surnameend

function two_names_pattern(fullname) local name = name_table[1] .. " " .. name_table[2] local surname = string.gsub(fullname, name .. " ", "") return "Given = " .. name .. " -- " .. "Family = " .. surnameend

function p.getnames(frame) local fullname = frame.args.name or "" if fullname

"" then return "No parameter supplied" end local name, out, surname = "" -- name_table table contains all words from fullname variable name_table = for word in string.gmatch(fullname, "[^%s]+") do table.insert(name_table, word) end -- Loop through every word in fullname and check if it has popular endings for languages for _, word in pairs(name_table) do if string.sub(word, -2)

"ez" then name_format = "es" end for _, v in pairs(lang.dutch_endings) do if string.sub(word, -#v)

v then name_format = "nl" end end for _, polish_ending in pairs(lang.polish_endings) do if string.sub(word, -#polish_ending)

polish_ending then name_format = "pl" end end for _, english_ending in pairs(lang.english_endings) do if string.sub(word, -#english_ending)

english_ending then name_format = "en" end end for _, chinese_name in pairs(lang.chinese_names) do if word

chinese_name then name_format = "zh" end end for _, ending in pairs(lang.chinese_endings) do if string.sub(word, -3)

ending then name_format = "zh" end end -- If code detects chinese name, it returns this in chinese format, because chinese names are different than other names if name_format

"zh" then surname = string.match(fullname, "(.+) (%w+)") name = string.gsub(fullname, surname .. " ", "") if string.find(fullname,'%(') then local courtesy_name = fullname:match("%((%a+)%)") name = string.gsub(name, "%(" .. courtesy_name .. "%)", "") end return "Given = " .. name .. " -- " .. "Family = " .. surname end end

-- Loop through spain letters from array. for _, i in pairs(lang.spain_letters) do if string.match(fullname, i) then name_format = "es" break end end for _, i in pairs(lang.spanish_names) do if string.match(fullname, i) then name_format = "es" break end end if name_format

"es" then -- Check if fullname has 2 names if string.match(fullname, "de") then local index= for k,v in pairs(name_table) do index[v]=k end -- To get name after "de" local sign_index = index["de"] + 1 local return_surname = fullname for i=1,sign_index do return_surname = string.gsub(return_surname, name_table[i] .. " ", "") end surname = return_surname name = string.gsub(fullname, surname, "") return "Given = " .. name .. " -- " .. "Family = " .. surname end for _, i in pairs(lang.spanish_names) do if name_table[2]

i then return two_names_pattern(fullname) end end return one_name_pattern(fullname) elseif name_format

"pl" then -- Check if fullname is longer than 2. -- Most of the polish surnames are single, or they are splitted with hyphen, so if fullname is longer than 3 words, it will most likely have 2 given names if #name_table > 2 then return two_names_pattern(fullname) end return basic_pattern(fullname) elseif name_format

"en" then for _, word in pairs(name_table) do for _, english_ending in pairs(lang.english_endings) do if string.sub(word, -#english_ending) then return one_name_pattern(fullname) end end end return basic_pattern(fullname) end

for counter, word in pairs(name_table) do if word

"van" or word

"de" then for i=1,counter - 1 do name = name .. name_table[i] end surname = string.gsub(fullname, name .. " ", "") return "Given = " .. name .. " -- " .. "Family = " .. surname end end -- If there is no format passed and code haven't detected where can be passed name from, it will return function basic_pattern return basic_pattern(fullname)

end

return p