<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FN3rsti%2FNames</id>
	<title>Module:Sandbox/N3rsti/Names - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FN3rsti%2FNames"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/N3rsti/Names&amp;action=history"/>
	<updated>2026-05-28T16:54:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/N3rsti/Names&amp;diff=145859&amp;oldid=prev</id>
		<title>imported&gt;N3rsti at 10:55, 11 January 2020</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/N3rsti/Names&amp;diff=145859&amp;oldid=prev"/>
		<updated>2020-01-11T10:55:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local lang = {&lt;br /&gt;
	chinese_names = {&amp;#039;Wang&amp;#039;, &amp;#039;Li&amp;#039;, &amp;#039;Zhang&amp;#039;, &amp;#039;Liu&amp;#039;, &amp;#039;Chen&amp;#039;, &amp;#039;Yang&amp;#039;, &amp;#039;Huang&amp;#039;, &amp;#039;Zhao&amp;#039;, &amp;#039;Wu&amp;#039;, &amp;#039;Zhou&amp;#039;, &amp;#039;Wong&amp;#039;, &amp;#039;Zedong&amp;#039;, &amp;#039;Zu&amp;#039;, &amp;#039;Dong&amp;#039;},&lt;br /&gt;
	chinese_endings = {&amp;#039;ang&amp;#039;, &amp;#039;zhi&amp;#039;},&lt;br /&gt;
	spain_letters = {&amp;#039;í&amp;#039;, &amp;#039;á&amp;#039;, &amp;#039;é&amp;#039;, &amp;#039;ó&amp;#039;},&lt;br /&gt;
	spanish_names = {&amp;#039;Diego&amp;#039;, &amp;#039;Esteban&amp;#039;, &amp;#039;Luis&amp;#039;, &amp;#039;Fernán&amp;#039;, &amp;#039;Rodríguez&amp;#039;, &amp;#039;Sofia&amp;#039;, &amp;#039;Santiago&amp;#039;},&lt;br /&gt;
	dutch_endings = {&amp;#039;er&amp;#039;, &amp;#039;gh&amp;#039;, &amp;#039;ch&amp;#039;},&lt;br /&gt;
	polish_endings = {&amp;#039;ski&amp;#039;, &amp;#039;cki&amp;#039;, &amp;#039;ska&amp;#039;, &amp;#039;cka&amp;#039;},&lt;br /&gt;
	english_endings = {&amp;#039;ght&amp;#039;, &amp;#039;Jr.&amp;#039;, &amp;#039;Jr&amp;#039;, &amp;#039;Sr.&amp;#039;, &amp;#039;Sr&amp;#039;, &amp;#039;I&amp;#039;, &amp;#039;V&amp;#039;, &amp;#039;X&amp;#039;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--[[ &lt;br /&gt;
Basic pattern function is used for names that wasn&amp;#039;t detected by getnames as a name from specific country. &lt;br /&gt;
It returns last word as a surname and other words as a name&lt;br /&gt;
--]] &lt;br /&gt;
function basic_pattern(fullname)&lt;br /&gt;
	local name = string.match(fullname, &amp;quot;(.+) (%w+)&amp;quot;)&lt;br /&gt;
	local surname = string.gsub(fullname, name .. &amp;quot; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	if #name_table &amp;gt; 3 then&lt;br /&gt;
		return one_name_pattern(fullname)	&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;&amp;#039;&amp;#039;Given&amp;#039;&amp;#039; = &amp;quot; .. name .. &amp;quot; -- &amp;quot; ..  &amp;quot;&amp;#039;&amp;#039;Family&amp;#039;&amp;#039; = &amp;quot; .. surname&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function one_name_pattern(fullname)&lt;br /&gt;
	local name = name_table[1]&lt;br /&gt;
	local surname = string.gsub(fullname, name .. &amp;quot; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	if string.match(fullname, &amp;quot; del &amp;quot;) then&lt;br /&gt;
			&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;&amp;#039;&amp;#039;Given&amp;#039;&amp;#039; = &amp;quot; .. name .. &amp;quot; -- &amp;quot; ..  &amp;quot;&amp;#039;&amp;#039;Family&amp;#039;&amp;#039; = &amp;quot; .. surname&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function two_names_pattern(fullname)&lt;br /&gt;
	local name = name_table[1] .. &amp;quot; &amp;quot; .. name_table[2]&lt;br /&gt;
	local surname = string.gsub(fullname, name .. &amp;quot; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	return &amp;quot;&amp;#039;&amp;#039;Given&amp;#039;&amp;#039; = &amp;quot; .. name .. &amp;quot; -- &amp;quot; ..  &amp;quot;&amp;#039;&amp;#039;Family&amp;#039;&amp;#039; = &amp;quot; .. surname&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getnames(frame)&lt;br /&gt;
	local fullname = frame.args.name or &amp;quot;&amp;quot;&lt;br /&gt;
	if fullname == &amp;quot;&amp;quot; then&lt;br /&gt;
		return &amp;quot;&amp;lt;b&amp;gt;No parameter supplied&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local name, out, surname = &amp;quot;&amp;quot;&lt;br /&gt;
	-- name_table table contains all words from fullname variable&lt;br /&gt;
	name_table = {}&lt;br /&gt;
	for word in string.gmatch(fullname, &amp;quot;[^%s]+&amp;quot;) do&lt;br /&gt;
		table.insert(name_table, word)&lt;br /&gt;
	end&lt;br /&gt;
	-- Loop through every word in fullname and check if it has popular endings for languages&lt;br /&gt;
	for _, word in pairs(name_table) do&lt;br /&gt;
		if string.sub(word, -2) == &amp;quot;ez&amp;quot; then&lt;br /&gt;
			name_format = &amp;quot;es&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		for _, v in pairs(lang.dutch_endings) do&lt;br /&gt;
			if string.sub(word, -#v) == v then&lt;br /&gt;
				name_format = &amp;quot;nl&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for _, polish_ending in pairs(lang.polish_endings) do&lt;br /&gt;
			if string.sub(word, -#polish_ending) == polish_ending then&lt;br /&gt;
				name_format = &amp;quot;pl&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for _, english_ending in pairs(lang.english_endings) do&lt;br /&gt;
			if string.sub(word, -#english_ending) == english_ending then&lt;br /&gt;
				name_format = &amp;quot;en&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for _, chinese_name in pairs(lang.chinese_names) do&lt;br /&gt;
			if word == chinese_name then&lt;br /&gt;
				name_format = &amp;quot;zh&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for _, ending in pairs(lang.chinese_endings) do&lt;br /&gt;
			if string.sub(word, -3) == ending then&lt;br /&gt;
				name_format = &amp;quot;zh&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- If code detects chinese name, it returns this in chinese format, because chinese names are different than other names&lt;br /&gt;
		if name_format == &amp;quot;zh&amp;quot; then&lt;br /&gt;
			surname = string.match(fullname, &amp;quot;(.+) (%w+)&amp;quot;)&lt;br /&gt;
			name = string.gsub(fullname, surname .. &amp;quot; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			if string.find(fullname,&amp;#039;%(&amp;#039;) then&lt;br /&gt;
				local courtesy_name = fullname:match(&amp;quot;%((%a+)%)&amp;quot;)&lt;br /&gt;
				name = string.gsub(name, &amp;quot;%(&amp;quot; .. courtesy_name .. &amp;quot;%)&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			return &amp;quot;&amp;#039;&amp;#039;Given&amp;#039;&amp;#039; = &amp;quot; .. name .. &amp;quot; -- &amp;quot; ..  &amp;quot;&amp;#039;&amp;#039;Family&amp;#039;&amp;#039; = &amp;quot; .. surname&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Loop through spain letters from array.&lt;br /&gt;
	for _, i in pairs(lang.spain_letters) do&lt;br /&gt;
		if string.match(fullname, i) then&lt;br /&gt;
			name_format = &amp;quot;es&amp;quot;&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for _, i in pairs(lang.spanish_names) do&lt;br /&gt;
		if string.match(fullname, i) then&lt;br /&gt;
			name_format = &amp;quot;es&amp;quot;&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if name_format == &amp;quot;es&amp;quot; then&lt;br /&gt;
		-- Check if fullname has 2 names&lt;br /&gt;
		if string.match(fullname, &amp;quot;de&amp;quot;) then&lt;br /&gt;
			local index={}&lt;br /&gt;
			for k,v in pairs(name_table) do&lt;br /&gt;
			   index[v]=k&lt;br /&gt;
			end&lt;br /&gt;
			-- To get name after &amp;quot;de&amp;quot;&lt;br /&gt;
			local sign_index = index[&amp;quot;de&amp;quot;] + 1&lt;br /&gt;
			local return_surname = fullname&lt;br /&gt;
			for i=1,sign_index do&lt;br /&gt;
				return_surname = string.gsub(return_surname, name_table[i] .. &amp;quot; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			surname = return_surname&lt;br /&gt;
			name = string.gsub(fullname, surname, &amp;quot;&amp;quot;)&lt;br /&gt;
			return &amp;quot;&amp;#039;&amp;#039;Given&amp;#039;&amp;#039; = &amp;quot; .. name .. &amp;quot; -- &amp;quot; ..  &amp;quot;&amp;#039;&amp;#039;Family&amp;#039;&amp;#039; = &amp;quot; .. surname&lt;br /&gt;
		end&lt;br /&gt;
		for _, i in pairs(lang.spanish_names) do&lt;br /&gt;
			if name_table[2] == i then&lt;br /&gt;
				return two_names_pattern(fullname)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return one_name_pattern(fullname)&lt;br /&gt;
	elseif name_format == &amp;quot;pl&amp;quot; then&lt;br /&gt;
		-- Check if fullname is longer than 2.&lt;br /&gt;
		-- 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&lt;br /&gt;
		if #name_table &amp;gt; 2 then&lt;br /&gt;
			return two_names_pattern(fullname)&lt;br /&gt;
		end&lt;br /&gt;
		return basic_pattern(fullname) &lt;br /&gt;
	elseif name_format == &amp;quot;en&amp;quot; then&lt;br /&gt;
		for _, word in pairs(name_table) do&lt;br /&gt;
			for _, english_ending in pairs(lang.english_endings) do&lt;br /&gt;
				if string.sub(word, -#english_ending) then&lt;br /&gt;
					return one_name_pattern(fullname)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return basic_pattern(fullname)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	for counter, word in pairs(name_table) do&lt;br /&gt;
			if word == &amp;quot;van&amp;quot; or word == &amp;quot;de&amp;quot; then&lt;br /&gt;
				for i=1,counter - 1 do&lt;br /&gt;
					name = name .. name_table[i]&lt;br /&gt;
				end&lt;br /&gt;
				surname = string.gsub(fullname, name .. &amp;quot; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
				return &amp;quot;&amp;#039;&amp;#039;Given&amp;#039;&amp;#039; = &amp;quot; .. name .. &amp;quot; -- &amp;quot; ..  &amp;quot;&amp;#039;&amp;#039;Family&amp;#039;&amp;#039; = &amp;quot; .. surname&lt;br /&gt;
			end&lt;br /&gt;
	end&lt;br /&gt;
	-- If there is no format passed and code haven&amp;#039;t detected where can be passed name from, it will return function basic_pattern&lt;br /&gt;
	return basic_pattern(fullname)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;N3rsti</name></author>
	</entry>
</feed>