Module:Infobox rugby biography cleaner

Documentation for this module may be created at Module:Infobox rugby biography cleaner/doc


local p = {}

local args = {}

local function isnotblank(s)
	return s and s:match( '^%s*(.-)%s*$' ) ~= ''
end

local function argrename(n1, n2)
	if args[n1] or args[n2] then
		if( args[n1] and args[n1] ~= '' ) and ( args[n2] and args[n2] ~= '' ) then
			args[n2] = (args[n2] or '') .. '\n' .. (args[n1] or '')
		else
			args[n2] = (args[n2] or '') .. (args[n1] or '')
		end
		args[n1] = ''
	end
end

local function addparam(s, f)
	-- f = a, e, or nb
	local r = ''
	if f == 'a' then
		r = '\n| ' .. s .. ' = ' .. (args[s] or '')
	elseif f == 'e' then
		if args[s] then
			r = '\n| ' .. s .. ' = ' .. args[s]
		end
	else
		if isnotblank(args[s]) then
			r = '\n| ' .. s .. ' = ' .. args[s]
		end
	end
	args[s] = '<PROCESSED>'
	return r
end

local function addseries(s, n)
	local r = ''
	local yname = s .. 'years'
	local cname = s .. 'clubs'
	local aname = s .. 'apps'
	local pname = s .. 'points'
	local showapps = true
	local showpts = true
	
	argrename(s .. 'caps', aname)
	for k=1,n do
		argrename(s .. 'caps' .. k, aname .. k)
	end
	
	if (s == 'rl_youth') or (s == 'youth') then
		showapps = false
		showpts = false
	elseif (s == 'rl_club') then
		cname = 'rl_proclubs'
	elseif (s == 'city_vs_country_' or s == 'soo' or s == 'rl_national' 
		or s == 'amat' or s == 'rep') then
		cname = s .. 'team'
	elseif ( s == 'ru_sevensnational' ) then
		cname = s .. 'team'
		aname = s .. 'comp'
	elseif (s == 'rl_coach' or s == 'ru_coach') then
		cname = s .. 'teams'
		showapps = false
		showpts = false
	elseif (s == 'rl_referee' or s == 'ru_referee') then
		cname = s .. 'comps'
		showpts = false
	elseif (s == 'ru_province') or (s == 'super') then
		cname = s
	end
	if args[yname] and args[yname]:match('^[%s]*{{[Nn][Oo][Ww][Rr][Pp][^%s]*|.*}}[%s]*$') then
		args[yname] = mw.ustring.gsub(args[yname], '^[%s]*{{[Nn][Oo][Ww][Rr][Pp][^%s]*|(.*)}}[%s]*$', '%1')
	end
	if args[cname] and args[cname]:match('^[%s]*{{[Nn][Oo][Ww][Rr][Pp][^%s]*|.*}}[%s]*$') then
		args[cname] = mw.ustring.gsub(args[cname], '^[%s]*{{[Nn][Oo][Ww][Rr][Pp][^%s]*|(.*)}}[%s]*$', '%1')
	end
	if args[aname] and args[aname]:match('^[%s]*{{[Nn][Oo][Ww][Rr][Pp][^%s]*|.*}}[%s]*$') then
		args[aname] = mw.ustring.gsub(args[aname], '^[%s]*{{[Nn][Oo][Ww][Rr][Pp][^%s]*|(.*)}}[%s]*$', '%1')
	end
	if args[pname] and args[pname]:match('^[%s]*{{[Nn][Oo][Ww][Rr][Pp][^%s]*|.*}}[%s]*$') then
		args[pname] = mw.ustring.gsub(args[pname], '^[%s]*{{[Nn][Oo][Ww][Rr][Pp][^%s]*|(.*)}}[%s]*$', '%1')
	end
	if isnotblank(args[cname]) or isnotblank(args[yname]) then
		local ylist = mw.text.split(args[yname] or '', '[%s]*<[\/\t ]*[Bb][Rr][^<>]*>')
		local clist = mw.text.split(args[cname] or '', '[%s]*<[\/\t ]*[Bb][Rr][^<>]*>')
		local alist = {}
		local plist = {}
		if showapps then
			alist = mw.text.split(args[aname] or '', '[%s]*<[\/\t ]*[Bb][Rr][^<>]*>')
		end
		if showpts then
			plist = mw.text.split(args[pname] or '', '[%s]*<[\/\t ]*[Bb][Rr][^<>]*>')
		end
		if ((#clist) >= (#ylist)) and ((#clist) >= (#alist)) and ((#clist) >= (#plist)) then
			for k = 1,(#clist) do
				r = r .. '\n| ' .. yname .. k .. ' = ' .. (ylist[k] or '')
				r = r .. '\n| ' .. cname .. k .. ' = ' .. (clist[k] or '')
				if showapps then
					r = r .. '\n| ' .. aname .. k .. ' = ' .. (alist[k] or '')
				end
				if showpts then
					r = r .. '\n| ' .. pname .. k .. ' = ' .. (plist[k] or '')
				end
			end
			args[yname] = '<PROCESSED>'
			args[cname] = '<PROCESSED>'
			args[aname] = '<PROCESSED>'
			args[pname] = '<PROCESSED>'
		else
			r = r .. addparam(yname, 'e')
			r = r .. addparam(cname, 'e')
			r = r .. addparam(aname, 'e')
			r = r .. addparam(pname, 'e')
		end
	else
		r = r .. addparam(yname, 'e')
		r = r .. addparam(cname, 'e')
		r = r .. addparam(aname, 'e')
		r = r .. addparam(pname, 'e')
	end
	
	for k=1,n do
		r = r .. addparam(yname .. k, 'e')
		r = r .. addparam(cname ..  k, 'e')
		r = r .. addparam(aname ..  k, 'e')
		r = r .. addparam(pname ..  k, 'e')
	end
	return r
end

function p.main(frame)
	local res = ''
	local offset = 0
	for k,v in pairs(frame.args) do
		args[k] = v
	end
	
	-- preprocess
	argrename('rl_coachclubs', 'rl_coachteams')
	argrename('ru_coachclubs', 'coachteams')
	argrename('ru_coachyears', 'coachyears')
	argrename('ru_youthclubs', 'youthclubs')
	argrename('ru_youthyears', 'youthyears')
	argrename('ru_amateurclubs', 'amatteam')
	argrename('ru_amateuryears', 'amatyears')
	argrename('ru_amateurcaps', 'amatcaps')
	argrename('ru_amateurpoints', 'amatpoints')
	argrename('ru_amupdate', 'amatupdate')
	argrename('ru_proclubs', 'clubs')
	argrename('ru_clubyears', 'years')
	argrename('ru_clubcaps', 'caps')
	argrename('ru_clubpoints', 'points')
	argrename('ru_clubupdate', 'clubupdate')
	argrename('super14', 'super')
	argrename('super14years', 'superyears')
	argrename('super14caps', 'supercaps')
	argrename('super14points', 'superpoints')
	argrename('super14update', 'superupdate')
	argrename('ru_nationalteam', 'repteam')
	argrename('ru_nationalyears', 'repyears')
	argrename('ru_nationalcaps', 'repcaps')
	argrename('ru_nationalpoints', 'reppoints')
	argrename('ru_ntupdate', 'repupdate')
	for k=1,10 do
		argrename('amatcaps' .. k, 'amatapps' .. k)
	end
	
	
	res = res .. '{{Infobox rugby biography'
	res = res .. addparam('embed', 'nb')
	res = res .. addparam('name', 'e')
	res = res .. addparam('image', 'e')
	res = res .. addparam('image_size', 'e')
	res = res .. addparam('alt', 'e')
	res = res .. addparam('caption', 'e')
	res = res .. addparam('fullname', 'e')
	res = res .. addparam('birth_name', 'e')
	res = res .. addparam('nickname', 'e')
	res = res .. addparam('birth_date', 'e')
	res = res .. addparam('birth_place', 'e')
	res = res .. addparam('death_date', 'e')
	res = res .. addparam('death_place', 'e')
	res = res .. addparam('height', 'e')
	res = res .. addparam('height_cm', 'e')
	res = res .. addparam('height_ft', 'e')
	res = res .. addparam('height_in', 'e')
	res = res .. addparam('weight', 'e')
	res = res .. addparam('weight_kg', 'e')
	res = res .. addparam('weight_st', 'e')
	res = res .. addparam('weight_lb', 'e')
	res = res .. addparam('school', 'e')
	res = res .. addparam('university', 'e')
	res = res .. addparam('relatives', 'e')
	res = res .. addparam('spouse', 'e')
	res = res .. addparam('children', 'e')
	res = res .. addparam('occupation', 'e')
	res = res .. addparam('weight_update', 'e')
	
	res = res .. addparam('rl_position', 'e')
	res = res .. addparam('rl_currentposition', 'e')
	res = res .. addparam('rl_currentteam', 'e')

	res = res .. addseries('rl_youth', 5)

	res = res .. addseries('rl_amateur', 10)
	res = res .. addparam('rl_amupdate', 'e')

	res = res .. addseries('rl_club', 20)
	res = res .. addparam('rl_totalyears', 'e')
	res = res .. addparam('rl_totalapps', 'e')
	res = res .. addparam('rl_totalpoints', 'e')
	res = res .. addparam('rl_clubupdate', 'e')
	
	res = res .. addseries('city_vs_country_', 10)
	res = res .. addparam('city_vs_country_update', 'e')
	
	res = res .. addseries('soo', 10)
	res = res .. addparam('sooupdate', 'e')
	
	res = res .. addseries('rl_national', 10)
	res = res .. addparam('rl_ntupdate', 'e')
	
	res = res .. addseries('rl_coach', 20)
	res = res .. addparam('rl_coachupdate', 'e')
	
	res = res .. addseries('rl_referee', 20)
	res = res .. addparam('rl_refereeupdate', 'e')
	
	res = res .. addparam('ru_currentposition', 'e')
	res = res .. addparam('ru_position', 'e')
	res = res .. addparam('position', 'e')
	res = res .. addparam('ru_currentteam', 'e')
	res = res .. addparam('currentclub', 'e')
	res = res .. addparam('allblackid', 'e')
	res = res .. addparam('allblackno', 'e')

	res = res .. addseries('youth', 5)
	
	res = res .. addseries('amat', 10)
	res = res .. addparam('amatupdate', 'e')
	
	res = res .. addseries('', 20)
	res = res .. addparam('totalyears', 'e')
	res = res .. addparam('totalapps', 'e')
	res = res .. addparam('totalpoints', 'e')
	
	res = res .. addseries('ru_province', 10)
	res = res .. addparam('ru_provinceupdate', 'e')
	
	res = res .. addseries('super', 10)
	
	res = res .. addparam('ru_currentclub', 'e')
	res = res .. addparam('superupdate', 'e')
	
	res = res .. addseries('rep', 10)
	res = res .. addparam('repupdate', 'e')
	
	res = res .. addseries('ru_sevensnational', 10)
	res = res .. addparam('ru_sevensupdate', 'e')
	
	res = res .. addseries('coach', 20)
	res = res .. addparam('ru_coachupdate', 'e')
	
	res = res .. addseries('ru_referee', 20)
	res = res .. addparam('ru_refereeupdate', 'e')
	
	res = res .. addparam('website', 'e')
	res = res .. addparam('url', 'e')
	
	for k,v in pairs(args) do
		if v == '' or v == '<PROCESSED>' then
			-- skip
		else
			res = res .. '| <!-- UNKNOWN --> ' .. k .. ' = ' .. v
		end
	end

	res = res .. '\n}}'
	
	return res
	
end

return p