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:

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

-- 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="visualhide">') or
			text:match('^(%d+)%s*&#x200B;<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 '¾'.
	local fractions = {
		['½'] = '1/2',
		['⅓'] = '1/3',
		['⅔'] = '2/3',
		['¼'] = '1/4',
		['¾'] = '3/4',
		['⅛'] = '1/8',
		['⅜'] = '3/8',
		['⅝'] = '5/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,
}

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.

  1. 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:
  2. 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.
  3. 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.
  4. 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.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.