Module:Sandbox/Ste1la/Names: Difference between revisions
< Module:Sandbox | Ste1la
imported>Ste1la No edit summary |
(No difference)
|
Latest revision as of 20:24, 29 November 2018
Documentation for this module may be created at Module:Sandbox/Ste1la/Names/doc
-- Ste1la Google Code-in, Names of People
local p = {}
p.getName = function(frame)
local name = frame.args.name or ""
local format = frame.args.format
local givenName = ""
local lastName = ""
local obtain = 0
if name == "" then
return "No name given"
end
--gets rid of any appendages
if name:find("Jr") or name:find("Jr.") or name:find("Sr") or
name:find("Sr.") or name:find("II") or name:find("III") then
local i, j = name:reverse():find("%S+")
name = name:reverse():sub(j+1):reverse()
end
--check if chinese
if obtain == 0 then
local exist
local chineseList = {"Wang", "Li", "Zhang", "Huang", "Liu", "Chen", "Yang", "Zhao",
"Wu", "Zhou", "Xu", "Wen", "Zhu", "Fan", "Zu", "Xu", "Mao", "Sun", "He", "Gao", "Zheng"}
for i = 1, #chineseList do
if name:find(chineseList[i]) then
exist = 1
end
end
if exist == 1 then
lastName = name:match("%a+")
local i, j = name:find(lastName)
givenName = name:sub(j+2)
if givenName:find("%(") then
i = givenName:find("%(")
givenName = givenName:sub(1, i - 2)
end
obtain = 1
end
end
--check if dutch
if obtain == 0 then
local dutchList = {" van ", " de ", " ter ", " van de ", " van den ", " van der "}
for i = 1, #dutchList do
if name:find(dutchList[i]) then
i, j = name:find(dutchList[i])
lastName = name:sub(i)
givenName = name:sub(1, i - 1)
obtain = 1
end
end
--[[if i ~= nil then
lastName = name:sub(i)
givenName = name:sub(1, i - 2)
obtain = 1
elseif name:find("de") then
i, j = name:find("de")
lastName = name:sub(i)
givenName = name:sub(1, i - 2)
obtain = 1
elseif name:find("ter") then
i, j = name:find("ter")
lastName = name:sub(i)
givenName = name:sub(1, i - 2)
obtain = 1
end]]
end
--check if spanish
if format == "es" or name:find(" y ") then
i, j = name:find(" de ")
if i ~= nil then
lastName = name:sub(j + 1)
k, l = lastName:reverse():match("(%S+) (%S+)")
if k ~= nil and l ~= nil then
if lastName:find("de") == nil then
lastName = l:reverse() .. " " .. k:reverse()
end
end
givenName = name:sub(1, i - 1)
obtain = 1
elseif name:find(" y ") then
i, j, k = name:reverse():match("(%S+) (%S+) (%S+)")
lastName = k:reverse() .. " " .. j:reverse() .. " " .. i:reverse()
i, j = name:find(lastName)
givenName = name:sub(1, i - 2)
obtain = 1
else
givenName = name:match("%a+")
i, j = name:find(givenName)
lastName = name:sub(j + 2)
obtain = 1
end
end
--check if thai
if format == "th" then
givenName = name:match("%S+")
i, j = name:find(givenName)
lastName = name:sub(j + 2)
obtain = 1
end
--normal name
if obtain == 0 then
i, j = name:reverse():find("%S+")
lastName = name:reverse():sub(i, j)
lastName = lastName:reverse()
givenName = name:reverse():sub(j + 2)
givenName = givenName:reverse()
--[[lastName = name:reverse():match("%S+")
lastName = lastName:reverse()
i, j = name:find(lastName)
givenName = name:sub(1, i-2)]]
end
out = "''Given'' = " .. givenName .. " -- ''Family'' = " .. lastName
return out
end
return p