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 = frame:expandTemplate{ title = 'Infobox person/weight', args = {args['weight'] .. ' '} }

w = mw.ustring.gsub(w, '[≈~]', ' ')

w = mw.ustring.gsub(w, ']*>c. ', '')

w = mw.ustring.gsub(w, '​', '')

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, '&', '&')

if(isnotblank(w)) then

cats = cats .. 'W'

-- cats = cats .. 'Atypical value: weight = ' .. w .. ''

end

end

if (isnotblank(args['height'])) then

local h = frame:expandTemplate{ title = 'Infobox person/height', args = {args['height'] .. ' '} }

h = mw.ustring.gsub(h, ']*><%/templatestyles>', '')

h = mw.ustring.gsub(h, '[≈~]', ' ')

h = mw.ustring.gsub(h, ']*>c. ', '')

h = mw.ustring.gsub(h, '​', '')

h = mw.ustring.gsub(h, '([%d][%d]*)[^<>]*<%/span>1<%/span>[^<>]*2<%/span><%/span>', '%1')

h = mw.ustring.gsub(h, '1<%/span>[^<>]*2<%/span><%/span>', '0')

h = mw.ustring.gsub(h, '([%d][%d]*) <%/span>1<%/sup>⁄2<%/sub><%/span>', '%1')

h = mw.ustring.gsub(h, '1<%/sup>⁄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, '&', '&')

if(isnotblank(h)) then

cats = cats .. 'H'

-- cats = cats .. ''

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