Die Dokumentation für dieses Modul kann unter Modul:GeborenIn/Doku erstellt werden

local xp = {}

function xp.getArgs(frame)
	local ret = {}
	local f = frame

	if frame.getParent and frame:getParent() and
		mw.title.getCurrentTitle().subjectNsText~="Vorlage"
	then f = frame:getParent()
	end

	for k, v in pairs(f.args)
	do if type(k) == "number"
	   then local m = mw.text.gsplit(v, ",")
			local i = #ret + 1
			local j
			local k
			local r = { name="", geburt="", tod="", kommentar="", sv=""}

			r.name = mw.text.trim(m())
			if r.name:find('!', 1, true)
			then j = mw.text.split(r.name, "%s*!%s*")
				 if not j[1]:find('[][|]') --verweigere Sortierwerte mit '[]|'
				 then r.sv = j[1]
					  r.name = j[2]
				 end
			end
			while r.name:find('[[', 1, true) and not r.name:find(']]', 1, true)
			do r.name = r.name .. "," .. m() --hier kein Trim, da wikilink
			end

			r.geburt = mw.text.trim(m() or "")
			r.geburt = mw.ustring.gsub(r.geburt, "geb%.?o?r?e?n?%s*", "")
			if r.geburt:find('^%d%d%d\+$')
			then r.tod = mw.text.trim(m() or "")
				 if not r.tod:find('^%d%d%d\+$')
				 then r.kommentar = r.tod .. ", "
					  r.tod = ""
				 end
			else if mw.ustring.find(r.geburt, '^%d%d%d\+%s*[-–—]%s*%d%d%d\+$')
				 then j = mw.text.split(r.geburt, "%s*[-–—]%s*")
					  r.geburt = j[1]
					  r.tod = j[2]
				 else r.kommentar = r.geburt .. ", "
					  r.geburt = ""
				 end
			end

			j = m()
			while j
			do r.kommentar = r.kommentar .. mw.text.trim(j) .. ", "
			   j = m()
			end
			r.kommentar = r.kommentar:sub(1, -3)

			--mw.log(r.name.."♦"..r.geburt.."♦"..r.tod.."♦"..r.kommentar.."\n")
			ret[i] = r
		end
	end

	return ret
end

function xp.row(frame)
	local a = xp.getArgs(frame)
	local ret = [[<div class="noprint">
{| class="wikitable sortable zebra"
! Name !! * !! † !! Kommentar]]

	for k, v in pairs(a)
	do ret = ret.."\n|-\n|data-sort-value=\""..v.sv.."\"| "..v.name
	   ret = ret.." || "..v.geburt.." || "..v.tod.." || "..v.kommentar
	end
	ret = ret .. "\n|}</div><div class=\"printfooter\">"

	for k, v in pairs(a)
	do ret = ret.."\n* "..v.name
	   if #v.geburt>0 then ret = ret..", "..v.geburt end
	   if #v.tod>0 then ret = ret.."–"..v.tod end
	   if #v.kommentar>0 then ret = ret..", "..v.kommentar end
	end
	ret = ret .. "\n</div>"
	
	return ret
end

return xp