-- This module provides some functions to prepare template parameters -- for use with Template:Convert. -- This module is not used by Template:Convert or Module:Convert. local function stripToNil(text) -- If text is a non-empty string, return its trimmed content, -- otherwise return nothing (empty string or not a string). if type(text) == 'string' then return text:match('(%S.-)%s*$') end end -- Remove commas and references (any strip markers) from a number. -- First usage in Template:Infobox_UK_place/dist (June 2018) local function cleanNumber(frame) local args = frame.args local text = stripToNil(args[1]) or if text == or tonumber(text) then return text end return mw.text.killMarkers(text):gsub(',', ) end -- Format regular input with fraction (MOS-confirmant) into Convert-format "12+3/8" ("+" added). -- First usage in Template:NFL_predraft (August 2017) local function number(frame) --Preprocess a template parameter to translate a number to be used as input for . → 12+3/8 Input Output 12 12 12 3/8 12+3/8 12+3/8 12 12+3/8 123⁄8 12+3/8 Template:Fraction redirects to Template:Frac so either may be used in the input. local args = frame.args local text = stripToNil(args[1]) or if text or tonumber(text) then return text -- examples: , '12', '12.3', '12.3e4', or negative end text text:gsub(, ' '):gsub(' +', ' '):gsub(' *%+ *', '+'):gsub(, '/'):gsub('⁄', '/') local integer, numerator, denominator, rest -- Look for a fraction of form '12 3/8' or '12+3/8' or '3/8'. integer, numerator, denominator text:match('^(%d+)[ +](%d+)/(%d+)$') if integer then return integer .. '+' .. numerator .. '/' .. denominator end numerator, denominator text:match('^(%d+)/(%d+)$') if numerator then return numerator .. '/' .. denominator end -- Look for an expanded fraction such as the result of or 12 or . numerator, denominator text:match('/</span>') if numerator then integer text:match('(%d+)<span class "sr-only">') or text:match('^(%d+)%s*​<span') or -- Template:Frac outputs zwsp since December 2017 text:match('^(%d+)%s*<span') return (integer and (integer .. '+') or ) .. numerator .. '/' .. denominator end -- Look for a fraction of form '123⁄4' or '3⁄4'. local fractions { ['1⁄2'] '1/2', ['1⁄3'] '1/3', ['2⁄3'] '2/3', ['1⁄4'] '1/4', ['3⁄4'] '3/4', ['1⁄8'] '1/8', ['3⁄8'] '3/8', ['5⁄8'] '5/8', ['7⁄8'] '7/8', } integer, rest text:match('^(%d*)%s*(.*)') local expand fractions[rest] if expand then return (integer and integer or (integer .. '+')) .. expand end return text end return { number = number, cleanNumber = cleanNumber, }