<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.forsakensaga.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_character%2Fname</id>
	<title>Module:Infobox character/name - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.forsakensaga.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_character%2Fname"/>
	<link rel="alternate" type="text/html" href="https://wiki.forsakensaga.com/index.php?title=Module:Infobox_character/name&amp;action=history"/>
	<updated>2026-05-12T18:40:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.forsakensaga.com/index.php?title=Module:Infobox_character/name&amp;diff=109&amp;oldid=prev</id>
		<title>176.40.36.35: Created page with &quot;local getArgs = require(&#039;Module:Arguments&#039;).getArgs local yesno = require(&#039;Module:Yesno&#039;) local infobox_image = require(&#039;Module:InfoboxImage&#039;).InfoboxImage local br = require(&#039;Module:Separated entries&#039;).br local roman = require(&#039;Module:Roman&#039;).main local coa = require(&#039;Module:Coa/core&#039;).main  local function split(inputstr, sep)   -- This function splits a string by the given separating character   sep = sep or &#039;%s&#039;   local t = {}   for field, s in mw.ustring.gmatch(input...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.forsakensaga.com/index.php?title=Module:Infobox_character/name&amp;diff=109&amp;oldid=prev"/>
		<updated>2024-06-13T09:02:36Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs local yesno = require(&amp;#039;Module:Yesno&amp;#039;) local infobox_image = require(&amp;#039;Module:InfoboxImage&amp;#039;).InfoboxImage local br = require(&amp;#039;Module:Separated entries&amp;#039;).br local roman = require(&amp;#039;Module:Roman&amp;#039;).main local coa = require(&amp;#039;Module:Coa/core&amp;#039;).main  local function split(inputstr, sep)   -- This function splits a string by the given separating character   sep = sep or &amp;#039;%s&amp;#039;   local t = {}   for field, s in mw.ustring.gmatch(input...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local infobox_image = require(&amp;#039;Module:InfoboxImage&amp;#039;).InfoboxImage&lt;br /&gt;
local br = require(&amp;#039;Module:Separated entries&amp;#039;).br&lt;br /&gt;
local roman = require(&amp;#039;Module:Roman&amp;#039;).main&lt;br /&gt;
local coa = require(&amp;#039;Module:Coa/core&amp;#039;).main&lt;br /&gt;
&lt;br /&gt;
local function split(inputstr, sep)&lt;br /&gt;
  -- This function splits a string by the given separating character&lt;br /&gt;
  sep = sep or &amp;#039;%s&amp;#039;&lt;br /&gt;
  local t = {}&lt;br /&gt;
  for field, s in mw.ustring.gmatch(inputstr, &amp;quot;([^&amp;quot; .. sep .. &amp;quot;]*)(&amp;quot; .. sep .. &amp;quot;?)&amp;quot;) do&lt;br /&gt;
    table.insert(t, field)&lt;br /&gt;
    if s == &amp;quot;&amp;quot; then&lt;br /&gt;
      return t&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function is_empty(s)&lt;br /&gt;
  -- This function checks whether a string is empty&lt;br /&gt;
  return s == nil or s == &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function overspecified_arms(arms)&lt;br /&gt;
  arms = mw.ustring.lower(arms)&lt;br /&gt;
  local patterns = {&lt;br /&gt;
    &amp;quot;^%[%[file:&amp;quot;,&lt;br /&gt;
    &amp;quot;%|.*%]%]$&amp;quot;,&lt;br /&gt;
    &amp;quot;^house &amp;quot;,&lt;br /&gt;
    &amp;quot;^coin of&amp;quot;,&lt;br /&gt;
    &amp;quot;%.png$&amp;quot;,&lt;br /&gt;
    &amp;quot;%.svg$&amp;quot;,&lt;br /&gt;
    &amp;quot;%.jpe?g$&amp;quot;,&lt;br /&gt;
    &amp;quot;^none&amp;quot;,&lt;br /&gt;
  }&lt;br /&gt;
  for _, pattern in pairs(patterns) do&lt;br /&gt;
    if mw.ustring.find(arms, pattern) then&lt;br /&gt;
      return &amp;quot;[[Category:Character pages with overspecified arms]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function generate_arms(arms, size)&lt;br /&gt;
  --This function generates small coat of arms icons&lt;br /&gt;
  return coa{&lt;br /&gt;
    arms,&lt;br /&gt;
    format = &amp;#039;image&amp;#039;,&lt;br /&gt;
    size = size or &amp;#039;infobox-l&amp;#039;,&lt;br /&gt;
  } .. overspecified_arms(arms)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
  local MAX_ARMS = 5&lt;br /&gt;
  local args = getArgs(frame)&lt;br /&gt;
  args.arms1 = args.arms1 or args.arms&lt;br /&gt;
&lt;br /&gt;
  local template = args.nametemplate or nil&lt;br /&gt;
  local regnalnumber = args.regnalnumber or &amp;quot;&amp;quot;&lt;br /&gt;
  local lastfirst = yesno(args.lastfirst) -- whether last name comes before first name&lt;br /&gt;
&lt;br /&gt;
  local name_parts = {}&lt;br /&gt;
  name_parts.fullname = args.name or args.fullname or &amp;quot;&amp;quot;&lt;br /&gt;
  name_parts.title = args.title or &amp;quot;&amp;quot;&lt;br /&gt;
  name_parts.nickname = args.nickname or &amp;quot;&amp;quot;&lt;br /&gt;
  name_parts.firstname = args.firstname or &amp;quot;&amp;quot;&lt;br /&gt;
  name_parts.particle = args.particle or &amp;quot;&amp;quot;&lt;br /&gt;
  name_parts.lastname = args.lastname or &amp;quot;&amp;quot;&lt;br /&gt;
  name_parts.epithet = args.epithet or &amp;quot;&amp;quot;&lt;br /&gt;
  name_parts.romanregnalnumber = roman({ regnalnumber }) or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  local categories = {&amp;quot;Character pages with new syntax name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
  if is_empty(template) then&lt;br /&gt;
    if not is_empty(name_parts.firstname) then&lt;br /&gt;
      if not is_empty(name_parts.lastname) then&lt;br /&gt;
        if lastfirst then&lt;br /&gt;
          template = &amp;#039;title/nickname-lastname-particle-firstname-romanregnalnumber/epithet&amp;#039;&lt;br /&gt;
        else&lt;br /&gt;
          template = &amp;#039;title/nickname-firstname-romanregnalnumber-particle-lastname/epithet&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        template = &amp;#039;title/nickname-firstname-epithet/&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
    elseif not is_empty(name_parts.lastname) then&lt;br /&gt;
      template = &amp;#039;/nickname-title-particle-lastname/epithet&amp;#039;&lt;br /&gt;
    elseif not is_empty(name_parts.nickname) then&lt;br /&gt;
      template = &amp;#039;/title-nickname/epithet&amp;#039;&lt;br /&gt;
    elseif not is_empty(name_parts.title) then&lt;br /&gt;
      template = &amp;#039;/title/epithet&amp;#039;&lt;br /&gt;
    elseif not is_empty(name_parts.epithet) then&lt;br /&gt;
      template = &amp;#039;/epithet/&amp;#039;&lt;br /&gt;
    elseif not is_empty(name_parts.fullname) then&lt;br /&gt;
      error(&amp;quot;The name parameter is deprecated and can no longer be used&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  else&lt;br /&gt;
    table.insert(categories, &amp;quot;Character pages with custom nametemplate&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- Parse name template to get the above, core, and below texts&lt;br /&gt;
  local above_template, core_template, below_template = unpack(split(template, &amp;#039;/&amp;#039;))&lt;br /&gt;
  local above = &amp;#039;&amp;#039;&lt;br /&gt;
  for _, part in pairs(split(above_template, &amp;#039;-&amp;#039;)) do&lt;br /&gt;
    if not is_empty(name_parts[part]) then&lt;br /&gt;
      above = above .. &amp;#039; &amp;#039; .. name_parts[part]&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  local core = &amp;#039;&amp;#039;&lt;br /&gt;
  for _, part in pairs(split(core_template, &amp;#039;-&amp;#039;)) do&lt;br /&gt;
    if not is_empty(name_parts[part]) then&lt;br /&gt;
      core = core .. &amp;#039; &amp;#039; .. name_parts[part]&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  local below = &amp;#039;&amp;#039;&lt;br /&gt;
  for _, part in pairs(split(below_template, &amp;#039;-&amp;#039;)) do&lt;br /&gt;
    if not is_empty(name_parts[part]) then&lt;br /&gt;
      below = below .. &amp;#039; &amp;#039; .. name_parts[part]&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  -- Build above and below texts and full name&lt;br /&gt;
  local above_span = &amp;quot;&amp;quot;&lt;br /&gt;
  if not is_empty(above) then&lt;br /&gt;
    above_span = mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
    above_span:css(&amp;#039;font-size&amp;#039;, &amp;#039;80%&amp;#039;)&lt;br /&gt;
              :css(&amp;#039;font-weight&amp;#039;, &amp;#039;normal&amp;#039;)&lt;br /&gt;
              :wikitext(above)&lt;br /&gt;
  end&lt;br /&gt;
  local below_span = &amp;quot;&amp;quot;&lt;br /&gt;
  if not is_empty(below) then&lt;br /&gt;
    below_span = mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
    below_span:css(&amp;#039;font-size&amp;#039;, &amp;#039;80%&amp;#039;)&lt;br /&gt;
              :css(&amp;#039;font-weight&amp;#039;, &amp;#039;normal&amp;#039;)&lt;br /&gt;
              :wikitext(below)&lt;br /&gt;
  end&lt;br /&gt;
  local name = br({&lt;br /&gt;
    tostring(above_span),&lt;br /&gt;
    core,&lt;br /&gt;
    tostring(below_span),&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  local complete_name&lt;br /&gt;
  -- The module looks different based on the number of arms to display&lt;br /&gt;
  if args.arms1 and args.arms2 and args.arms3 then&lt;br /&gt;
    -- Three or more arms&lt;br /&gt;
    complete_name = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
    complete_name:css(&amp;#039;text-align&amp;#039;, &amp;#039;justify&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;text-justify&amp;#039;, &amp;#039;distribute-all-lines&amp;#039;)&lt;br /&gt;
    local coasize&lt;br /&gt;
    if is_empty(args.arms4) then&lt;br /&gt;
      coasize = &amp;#039;infobox-m&amp;#039;&lt;br /&gt;
      table.insert(categories, &amp;quot;Character pages with 3 coats of arms&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
      coasize = &amp;#039;infobox-s&amp;#039;&lt;br /&gt;
      table.insert(categories, &amp;quot;Character pages with 4+ coats of arms&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    for i=1,MAX_ARMS do&lt;br /&gt;
      local arms = args[&amp;#039;arms&amp;#039; .. tostring(i)]&lt;br /&gt;
      if arms then&lt;br /&gt;
        complete_name:wikitext(generate_arms(arms, coasize))&lt;br /&gt;
                     :wikitext(&amp;quot; &amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    complete_name:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;display&amp;#039;, &amp;#039;inline-block&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
                 :wikitext(name)&lt;br /&gt;
  elseif args.arms1 then&lt;br /&gt;
    -- One or two arms&lt;br /&gt;
    local arms1 = args.arms1&lt;br /&gt;
    local arms2&lt;br /&gt;
    if is_empty(args.arms2) then&lt;br /&gt;
      arms2 = args.arms1&lt;br /&gt;
      table.insert(categories, &amp;quot;Character pages with 1 coat of arms&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
      arms2 = args.arms2&lt;br /&gt;
      table.insert(categories, &amp;quot;Character pages with 2 coats of arms&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    complete_name = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
    complete_name:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
                 :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
                 :tag(&amp;#039;td&amp;#039;):css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;vertical-align&amp;#039;, &amp;#039;top&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;width&amp;#039;, &amp;#039;50px&amp;#039;)&lt;br /&gt;
                 :wikitext(generate_arms(arms1))&lt;br /&gt;
                 :done()&lt;br /&gt;
                 :tag(&amp;#039;td&amp;#039;):css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;vertical-align&amp;#039;, &amp;#039;middle&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;padding&amp;#039;, &amp;#039;0px 7px 5px 7px&amp;#039;)&lt;br /&gt;
                 :wikitext(name)&lt;br /&gt;
                 :done()&lt;br /&gt;
                 :tag(&amp;#039;td&amp;#039;):css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;vertical-align&amp;#039;, &amp;#039;top&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;text-align&amp;#039;, &amp;#039;right&amp;#039;)&lt;br /&gt;
                 :css(&amp;#039;width&amp;#039;, &amp;#039;50px&amp;#039;)&lt;br /&gt;
                 :wikitext(generate_arms(arms2))&lt;br /&gt;
  else&lt;br /&gt;
    -- No arms&lt;br /&gt;
    complete_name = name&lt;br /&gt;
    if categories[1] == &amp;quot;Character pages with new syntax name&amp;quot; then&lt;br /&gt;
      table.insert(categories, &amp;quot;Character pages with 0 coats of arms&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- Add all categories&lt;br /&gt;
  complete_name = tostring(complete_name)&lt;br /&gt;
  for _, category in pairs(categories) do&lt;br /&gt;
    complete_name = complete_name .. &amp;quot;[[Category:&amp;quot; .. category .. &amp;quot;]]&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  return complete_name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>176.40.36.35</name></author>
	</entry>
</feed>