Jump to content

Module:Convert default

Permanently protected module
From Wikipedia, the free encyclopedia
localgetArgs=require('Module:Arguments').getArgslocalTableTools=require('Module:TableTools')localConvertData=require('Module:Convert/data').all_unitslocalp={}functionp.main(frame)localargs=getArgs(frame,{frameOnly=true,trim=true})returnp._main(frame,args)endfunctionresolveUnit(unit)-- Resolves a unit by name to its canonical name.localunitData=ConvertData[unit]ifunitDatathenifunitData["target"]then-- Unit aliasreturnunitData["target"]else-- Not an aliasreturnunitendelse-- Not a valid unitreturnnilendendfunctioncallConvert(frame,args,input,from)localconvertArgs=TableTools.shallowClone(args)-- Shift all numbered parameters up by 1.locali=2whileargs[i]~=nildoconvertArgs[i+1]=args[i]i=i+1end-- Set the input value and unitlocalresolvedFrom=resolveUnit(from)convertArgs[1]=inputconvertArgs[2]=resolvedFrom-- Wipe custom argumentsconvertArgs["default-unit"]=nilconvertArgs["defaultUnit"]=nilconvertArgs["default unit"]=nilconvertArgs["default-units"]=nilconvertArgs["defaultUnits"]=nilconvertArgs["default units"]=nil-- Remove duplicate units in output units (if available)-- Avoid doing this if there are custom display parameters set.ifconvertArgs[3]~=nilandconvertArgs["disp"]==nilthenlocaloutputUnits=mw.text.split(mw.text.trim(convertArgs[3]),"%s")localj=1whileoutputUnits[j]~=nildomw.logObject(resolveUnit(outputUnits[j]),resolvedFrom)ifresolveUnit(outputUnits[j])==resolvedFromthen-- Duplicate unit. Remove it.table.remove(outputUnits,j)-- Do not increment; the next value will now have an index of `j`.elsej=j+1endendconvertArgs[3]=table.concat(outputUnits," ")endreturnframe:expandTemplate{title="convert",args=convertArgs}endfunctionp._main(frame,args)ifnotargs[1]thenreturnnilendlocalrawInput=mw.text.trim(args[1])localdefaultUnit=args["default-unit"]orargs["defaultUnit"]orargs["default unit"]orargs["default-units"]orargs["defaultUnits"]orargs["default units"]localnumSection=mw.ustring.match(rawInput,"^-?[%d,e]+")ifnumSection==nilthen-- Raw output (not a determinable number)returnrawInputendifmw.ustring.len(rawInput)==mw.ustring.len(mw.text.trim(numSection))then-- There only exists a number section.-- Convert, and use the default unit (if defined).ifnotdefaultUnitthenreturnerror("No default unit is set, and a unitless input was provided.")elsereturncallConvert(frame,args,numSection,defaultUnit)endelse-- There exists a text section.-- Get that section.localtextSection=mw.text.trim(string.sub(rawInput,mw.ustring.len(mw.text.trim(numSection))+1))ifresolveUnit(textSection)~=nilthenreturncallConvert(frame,args,numSection,textSection)else-- Not a unit. Fall back to raw value.returnrawInputendendendreturnp
close