Module:Convert/helper
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.
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
local fractions = {
['½'] = '1/2',
['⅓'] = '1/3',
['⅔'] = '2/3',
['¼'] = '1/4',
['¾'] = '3/4',
['⅛'] = '1/8',
['⅜'] = '3/8',
['⅝'] = '5/8',
['⅞'] = '7/8',
}
local fractionNumbers = {
['½'] = 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)
local function number(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.
]]
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 {{frac|12|3|8}} or 12{{frac|3|8}} or {{frac|3|8}}.
numerator, denominator = text:match('<sup>(%d+)</sup>/<sub>(%d+)</sub></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 '12¾' or '¾'.
integer, rest = text:match('^(%d*)%s*(.*)')
local expand = fractions[rest]
if expand then
return (integer == '' and integer or (integer .. '+')) .. expand
end
return text
end
local function distanceNumber(text)
-- Return a number corresponding to text (0 if text is empty) or throw an error if invalid.
text = text or 0
if tonumber(text) then
return tonumber(text)
end
-- Look for a fraction of form '12¾' or '¾'.
local integer, expand = text:match('^(%d*)%s*(.*)')
if integer == '' then
integer = 0
else
integer = tonumber(integer)
end
if expand == '' then
expand = 0
else
expand = fractionNumbers[expand]
end
if integer and expand then
return integer + expand
end
error('Invalid number "' .. text .. '"', 0)
end
-- First usage in Template:Horse_race_distance (January 2024)
local function horseRaceDistance(frame)
local args = frame:getParent().args
local miles = stripToNil(args[1])
local furlongs = stripToNil(args[2])
local yards = stripToNil(args[3])
local show = {}
if miles then
table.insert(show, miles .. 'm')
end
if furlongs then
table.insert(show, furlongs .. 'f')
end
if yards then
table.insert(show, yards .. 'y')
end
miles = distanceNumber(miles)
furlongs = distanceNumber(furlongs)
yards = distanceNumber(yards)
local meters = miles * 1609.344 + furlongs * 201.168 + yards * 0.9144
return
'<span data-sort-value="' ..
tostring(meters) ..
' !">' ..
table.concat(show, ' ') ..
'</span>'
end
return {
number = number,
cleanNumber = cleanNumber,
horseRaceDistance = horseRaceDistance,
}
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.