Module:Convert/helper
Appearance
This module is not used by module:Convert. It can be used in templates to preprocess input from regular written text into formatted input. For example:
- {{convert|{{#invoke:Convert/helper |number |1=15 4/3 }}|...}} → {{convert|15+4/3|...}}
Usage
Applied in {{NFL predraft}}.
-- 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.localfunctionstripToNil(text)-- If text is a non-empty string, return its trimmed content,-- otherwise return nothing (empty string or not a string).iftype(text)=='string'thenreturntext:match('(%S.-)%s*$')endend-- Remove commas and references (any strip markers) from a number.-- First usage in Template:Infobox_UK_place/dist (June 2018)localfunctioncleanNumber(frame)localargs=frame.argslocaltext=stripToNil(args[1])or''iftext==''ortonumber(text)thenreturntextendreturnmw.text.killMarkers(text):gsub(',','')endlocalfractions={['½']='1/2',['⅓']='1/3',['⅔']='2/3',['¼']='1/4',['¾']='3/4',['⅛']='1/8',['⅜']='3/8',['⅝']='5/8',['⅞']='7/8',}localfractionNumbers={['½']=1/2,['⅓']=1/3,['⅔']=2/3,['¼']=1/4,['¾']=3/4,['⅛']=1/8,['⅜']=3/8,['⅝']=5/8,['⅞']=7/8,}-- Format regular input with fraction (MOS-confirmant) into Convert-format "12+3/8" ("+" added).-- First usage in Template:NFL_predraft (August 2017)localfunctionnumber(frame)--[[ Preprocess a template parameter to translate a number to be used as input for {{convert}}. {{#invoke:convert/helper|number|12 3/8}} → 12+3/8 Input Output 12 12 12 3/8 12+3/8 {{frac|12|3|8}} 12+3/8 12{{frac|3|8}} 12+3/8 12⅜ 12+3/8 Template:Fraction redirects to Template:Frac so either may be used in the input. ]]localargs=frame.argslocaltext=stripToNil(args[1])or''iftext==''ortonumber(text)thenreturntext-- examples: '', '12', '12.3', '12.3e4', or negativeendtext=text:gsub(' ',' '):gsub(' +',' '):gsub(' *%+ *','+'):gsub('⁄','/'):gsub('⁄','/')localinteger,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+)$')ifintegerthenreturninteger..'+'..numerator..'/'..denominatorendnumerator,denominator=text:match('^(%d+)/(%d+)$')ifnumeratorthenreturnnumerator..'/'..denominatorend-- Look for an expanded fraction such as the result of {{frac|12|3|8}} or 12{{frac|3|8}} or {{frac|3|8}}.numerator,denominator=text:match('<sup>(%d+)</sup>/<sub>(%d+)</sub></span>')ifnumeratortheninteger=text:match('(%d+)<span class="sr-only">')ortext:match('^(%d+)%s*​<span')or-- Template:Frac outputs zwsp since December 2017text:match('^(%d+)%s*<span')return(integerand(integer..'+')or'')..numerator..'/'..denominatorend-- Look for a fraction of form '12¾' or '¾'.integer,rest=text:match('^(%d*)%s*(.*)')localexpand=fractions[rest]ifexpandthenreturn(integer==''andintegeror(integer..'+'))..expandendreturntextendlocalfunctiondistanceNumber(text)-- Return a number corresponding to text (0 if text is empty) or throw an error if invalid.text=textor0iftonumber(text)thenreturntonumber(text)end-- Look for a fraction of form '12¾' or '¾'.localinteger,expand=text:match('^(%d*)%s*(.*)')ifinteger==''theninteger=0elseinteger=tonumber(integer)endifexpand==''thenexpand=0elseexpand=fractionNumbers[expand]endifintegerandexpandthenreturninteger+expandenderror('Invalid number "'..text..'"',0)end-- First usage in Template:Horse_race_distance (January 2024)localfunctionhorseRaceDistance(frame)localargs=frame:getParent().argslocalmiles=stripToNil(args[1])localfurlongs=stripToNil(args[2])localyards=stripToNil(args[3])localshow={}ifmilesthentable.insert(show,miles..'m')endiffurlongsthentable.insert(show,furlongs..'f')endifyardsthentable.insert(show,yards..'y')endmiles=distanceNumber(miles)furlongs=distanceNumber(furlongs)yards=distanceNumber(yards)localmeters=miles*1609.344+furlongs*201.168+yards*0.9144return'<span data-sort-value="'..tostring(meters)..' !">'..table.concat(show,' ')..'</span>'endreturn{number=number,cleanNumber=cleanNumber,horseRaceDistance=horseRaceDistance,}