Module:Infobox cyclist tracking

local p = {} function p.tracking(frame) function isblank( val ) return (val == nil) or val:match('^[%s]*$') end local function isnotblank(s) return s and s:match( '^%s*(.-)%s*$' ) ~= '' end local cats = '' local args = frame:getParent.args local hasbr = 0 local hasli = 0 local hasul = 0 local hasnewline = 0 local toohighnumber = 0 local missingyears = {0, 0, 0} local missingteams = {0, 0, 0} local hasyears = {0, 0, 0} local hasteams = {0, 0, 0} local prefixes = {'pro', 'amateur', 'manage'} local maxindices = {25, 15, 25} for k=1,3 do		local prefix = prefixes[k] local maxindex = maxindices[k] if (isnotblank(args[prefix .. 'years']) ) then hasyears[k] = 1 end if (isnotblank(args[prefix .. 'years']) and isblank(args[prefix .. 'teams']) ) then missingteams[k] = 1 end if (isnotblank(args[prefix .. 'teams']) ) then hasteams[k] = 1 end if (isnotblank(args[prefix .. 'teams']) and isblank(args[prefix .. 'years']) ) then missingyears[k] = 1 end if (args[prefix .. 'years'] or ''):match('<[\t ]*[Bb]') then hasbr = 1 end if (args[prefix .. 'years'] or ''):match('<[\t ]*[Ll][Ii]') then hasli = 1 end if (args[prefix .. 'years'] or ''):match('<[\t ]*[Uu][Ll]') then hasul = 1 end if (args[prefix .. 'teams'] or ''):match('<[\t ]*[Bb]') then hasbr = 1 end if (args[prefix .. 'teams'] or ''):match('<[\t ]*[Ll][Ii]') then hasli = 1 end if (args[prefix .. 'teams'] or ''):match('<[\t ]*[Uu][Ll]') then hasul = 1 end if (args[prefix .. 'years'] or ''):match('[\r\n]') then hasnewline = 1 end if (args[prefix .. 'teams'] or ''):match('[\r\n]') then hasnewline = 1 end for i = 1,maxindex do if (isnotblank(args[prefix .. 'years'.. tostring(i)]) ) then hasyears[k] = 1 end if (isnotblank(args[prefix .. 'years'.. tostring(i)]) and isblank(args[prefix .. 'team'.. tostring(i)]) ) then missingteams[k] = 1 end if (isnotblank(args[prefix .. 'team'.. tostring(i)]) ) then hasteams[k] = 1 end if (isnotblank(args[prefix .. 'team'.. tostring(i)]) and isblank(args[prefix .. 'years'.. tostring(i)]) ) then missingyears[k] = 1 end if(args[prefix .. 'years' .. tostring(i)] or ''):match('<[\t ]*[Bb]') then hasbr = 1 end if(args[prefix .. 'years' .. tostring(i)] or ''):match('<[\t ]*[Ll][Ii]') then hasli = 1 end if(args[prefix .. 'years' .. tostring(i)] or ''):match('<[\t ]*[Uu][Ll]') then hasul = 1 end if(args[prefix .. 'team' .. tostring(i)] or ''):match('<[\t ]*[Bb]') then hasbr = 1 end if(args[prefix .. 'team' .. tostring(i)] or ''):match('<[\t ]*[Ll][Ii]') then hasli = 1 end if(args[prefix .. 'team' .. tostring(i)] or ''):match('<[\t ]*[Uu][Ll]') then hasul = 1 end if(args[prefix .. 'years' .. tostring(i)] or ''):match('[\r\n]') then hasnewline = 1 end if(args[prefix .. 'team' .. tostring(i)] or ''):match('[\r\n]') then hasnewline = 1 end end if (isnotblank(args[prefix .. 'team'.. tostring(maxindex+1)]) or isnotblank(args[prefix .. 'years'.. tostring(maxindex+1)]) ) then toohighnumber = 1 end end if (isnotblank(args['weight'])) then local w = args['weight'] .. ' '		w = mw.ustring.gsub(w, '[≈~]', ' ') w = mw.ustring.gsub(w, ']*>c. ', '') w = mw.ustring.gsub(w, '–[%d][%d]*%.[%d]', '') w = mw.ustring.gsub(w, '–[%d][%d]*', '') w = mw.ustring.gsub(w, '[%d][%d]%.[%d] kg %([%d][%d]* lb%)', '') w = mw.ustring.gsub(w, '[%d][%d]%.[%d] kg %([%d][%d]* lb; [%d][%.%d]* st%)', '') w = mw.ustring.gsub(w, '[%d][%d]%.[%d] kg %([%d][%d]* lb; [%d][%d]* st [%d][%d]* lb%)', '') w = mw.ustring.gsub(w, '[%d][%d]%.[%d] kg %([%d][%.%d]* st; [%d][%.%d]* lb%)', '') w = mw.ustring.gsub(w, '[%d][%d]* kg %([%d][%d]* lb%)', '') w = mw.ustring.gsub(w, '[%d][%d]* kg %([%d][%d]* lb; [%d][%.%d]* st%)', '') w = mw.ustring.gsub(w, '[%d][%d]* kg %([%d][%d]* lb; [%d][%d]* st [%d][%d]* lb%)', '') w = mw.ustring.gsub(w, '[%d][%d]* kg %([%d][%d]* st; [%d][%.%d]* lb%)', '') w = mw.ustring.gsub(w, '[%d][%d]* st [%d][%d]* lb %([%d][%d]* kg%)', '') w = mw.ustring.gsub(w, '[%d][%d]* lb %([%d][%d]* kg%)', '') w = mw.ustring.gsub(w, '[%d][%d]* lb %([%d][%d]* kg; [%d][%.%d]* st%)', '') w = mw.ustring.gsub(w, '[%d][%d]*[ ]*kg ', '') w = mw.ustring.gsub(w, '[%d][%d]*[ ]*lb ', '') w = mw.ustring.gsub(w, '%([1-2][%d][%d][%d]%)', '') w = mw.ustring.gsub(w, '%([1-2][%d][%d][%d]%-[%d][%d]%)', '') w = mw.text.unstrip(w) w = mw.ustring.gsub(w, '[<]', '.LT.') w = mw.ustring.gsub(w, '[>]', '.GT.') w = mw.ustring.gsub(w, '&', '&amp;') if(isnotblank(w)) then cats = cats .. ''			-- cats = cats .. ' Atypical value: weight = ' .. w .. ' '		end end if (isnotblank(args['height'])) then local h = args['height'] .. ' '		h = mw.ustring.gsub(h, '[≈~]', ' ') h = mw.ustring.gsub(h, ']*>c. ', '') h = mw.ustring.gsub(h, ' ([%d][%d]*) <%/span> 1<%/sup>&frasl; 2<%/sub><%/span>', '%1') h = mw.ustring.gsub(h, ' 1<%/sup>&frasl; 2<%/sub><%/span>', '0') h = mw.ustring.gsub(h, '[1-2]%.[%d][%d]? m %([4-7] ft [%d][%d]* in%)', '') h = mw.ustring.gsub(h, '[1-2][%d][%d] cm %([4-7] ft [%d][%d]* in%)', '') h = mw.ustring.gsub(h, '[4-7] ft [%d][%d]* in %([1-2]%.[%d][%d] m%)', '') h = mw.ustring.gsub(h, '[4-7] ft [%d][%d]* in %([1-2][%d][%d] cm%)', '') h = mw.ustring.gsub(h, '[1-2]%.[%d][%d][ ]*m ', '') h = mw.ustring.gsub(h, '[1-2][%d][%d][ ]*cm ', '') h = mw.ustring.gsub(h, '[4-7] ft [%d][%d]* in ', '') h = mw.ustring.gsub(h, '%([1-2][%d][%d][%d]%)', '') h = mw.ustring.gsub(h, '%([1-2][%d][%d][%d]-[%d][%d]%)', '') h = mw.text.unstrip(h) h = mw.ustring.gsub(h, '[<]', '.LT.') h = mw.ustring.gsub(h, '[>]', '.GT.') h = mw.ustring.gsub(h, '&', '&amp;') if(isnotblank(h)) then cats = cats .. ''			-- cats = cats .. ' Atypical value: height = ' .. h .. ' '		end end if (hasli > 0) then cats = cats .. ''   end if (hasul > 0) then cats = cats .. ''   end if (hasbr > 0) then cats = cats .. ''   end if (hasnewline > 0) then cats = cats .. ''   end for k=1,3 do		if (missingyears[k] > 0 and hasyears[k] > 0) then cats = cats .. ''		end if (missingteams[k] > 0 and hasteams[k] > 0) then cats = cats .. ''		end end return cats end return p