Модуль:Math/tonumber

Википедия — ирекле энциклопедия мәғлүмәте
Перейти к навигации Перейти к поиску

Этот модуль содержит функции для конвертации строк в числа.

Вызываемые функции[вики-тексты үҙгәртергә]

integer[вики-тексты үҙгәртергә]

{{#invoke:math/tonumber|integer|…}}

Возвращает первое целое положительное число, найденное в строке.

Входное значение Результат
2014 2014
[[2014]] 2014
[[2014 йыл|2014]] 2014
[[31 декабрь]] [[2014]] 31
Як-42 42

Используется в шаблонах, когда надо.

year[вики-тексты үҙгәртергә]

Возвращает первое 3- или 4-значное целое положительное число, найденное в строке.

{{#invoke:math/tonumber|year|…}}
{{#invoke:math/tonumber|year|…|default=…}}
Входное значение Результат
2014 2014
910 910
[[2014]] 2014
[[2014 йыл|2014]] 2014
[[31 декабрь]] [[2014]] 2014
Як-42
[[Б. э. т. 2316 йыл]] 2316

Используется в шаблонах {{Категория по дате}} и {{Год появления}}.


--[[

This module convert strings to numbers.

]]
local p = {}

-- Get first integer number from string.
function p.integer( frame )
    local s = frame.args[1]

	s = string.gsub( s, '<[^<>]+>', '' ) -- strip HTML tags
    s = string.gsub( s, '[^0-9]', ' ' )
    s = mw.text.trim( s )
    s = mw.text.split( s, ' ' )[1]
    
    return tonumber( s )
end

-- Get number from Wikidata quantity.
function p.quantity( frame )
	local s = frame.args[1]
    s = string.gsub( s, ' ', '' )
    s = string.gsub( s, '±.*$', '' )

    return tonumber( s )
end

-- Get year value from string.
function p.year( frame )
    local n = nil
    local cat = frame.args['cat']

	-- 'йылда' or 'йылда'
    local yearForm = 'йылда'
    if frame.args['form'] and frame.args['form'] ~= '' then
    	yearForm = frame.args['form']
	end

    local s = frame.args[1]
	s = string.gsub( s, '<[^<>]+>', '' ) -- strip HTML tags

    local isBce = string.match( s, 'до%sн\.%s?э' )
    s = string.gsub( s, 'год%sдо%sн\.%s*э\.?', '' )
    s = string.gsub( s, 'до%sн\.%s*э\.?', '' )

	-- Get first 3- or 4-digit integer number from string.
    local sParts = string.gsub( s, '[^0-9]', ' ' )
    sParts = mw.text.trim( sParts )
    sParts = mw.text.split( sParts, ' +' )
    for k, v in pairs( sParts ) do
        if string.match( v, '^[12]?%d%d%d$' ) then
            n = tonumber( v )
            break
        end
    end

	-- The entire string is a number.
	if not n then
	    s = string.gsub( s, '[%[%]]', '' )
	    s = mw.text.trim( s )
		if string.match( s, '^%d%d?%d?%d?$' ) then
			n = tonumber( s )
		end
	end

	-- Generate category
	if n then
	    if isBce then
	    	if cat then
	    		return '[[Категория:Б. э. т.  ' .. n .. ' ' .. yearForm .. ' ' .. cat .. ']]'
	    	end
	    	n = -n
	    else
	    	if cat then 
	    		return '[[Категория: ' .. n .. ' ' .. yearForm .. ' ' .. cat .. ']]'
	    	end
	    end
	end

    return n or frame.args['default']
end

return p