Bu, sayılarnı işlegen funktsiyalar içün kod.

getAffix funktsiyası bir sayı içün affiks saylay. Onıñ 2 parametri bar: sayı ve affiks türü (i, inde ya da inci). Meselâ:

  • {{#invoke:Sayılar|getAffix|3|i}} =>ü
  • {{#invoke:Sayılar|getAffix|50|inde}} =>sinde
  • {{#invoke:Sayılar|getAffix|124|inci}} =>ünci


Lua kodunda:

local num = 5
local numbersModule = require('Modul:Sayılar')
local text = num .. '-' .. numbersModule._getAffix(5, 'inci')

Bu kod Sayı ve affiks şablonında qullanıla.


p = {}

local AFFIXES = {
	i = {
		small = {'i', 'si', '-{crh-latn:ü;crh-cyrl:ю}-', '-{crh-latn:ü;crh-cyrl:ю}-', 'i',
				 'sı',  'si',   'i', 'ı', 'u'},
		tens = {
			'u', 'si', 'ı', 'ı', 'si',
			'ı', 'i', 'i', 'ı', '-{crh-latn:ü;crh-cyrl:ю}-'
		},
		--10, 100, 1000, 10000, 100000...
		large = {'u', '-{crh-latn:ü;crh-cyrl:ю}-', 'i', nil, nil, 'ı', nil, nil, 'ı'},
		zero = 'ı'
	},
	["ı"] = 'i',
	
	inde = {
		small = {'inde', 'sinde', '-{crh-latn:ünde;crh-cyrl:юнде}-', '-{crh-latn:ünde;crh-cyrl:юнде}-', 'inde',
				 'sında',  'sinde',   'inde', 'ında', 'unda'},
		tens = {
			'unda', 'sinde', 'ında', 'ında', 'sinde',
			'ında', 'inde', 'inde', 'ında', '-{crh-latn:ünde;crh-cyrl:юнде}-'
		},
		--10, 100, 1000, 10000, 100000...
		large = {'unda', '-{crh-latn:ünde;crh-cyrl:юнде}-', 'inde', nil, nil, 'ında', nil, nil, 'ında'},
		zero = 'ında'
	},
	["ında"] = 'inde',
	
	inci = {
		small = {'inci', 'nci', '-{crh-latn:ünci;crh-cyrl:юнджи}-', '-{crh-latn:ünci;crh-cyrl:юнджи}-', 'inci',
				 'ncı',  'nci', 'inci', 'ıncı', 'uncı'},
		tens = {
			'uncı', 'nci', 'ıncı', 'ıncı', 'nci',
			'ıncı', 'inci', 'inci', 'ıncı', '-{crh-latn:ünci;crh-cyrl:юнджи}-'
		},
		--10, 100, 1000, 10000, 100000...
		large = {'uncı', '-{crh-latn:ünci;crh-cyrl:юнджи}-', 'inci', nil, nil, 'ıncı', nil, nil, 'ıncı'},
		zero = 'ıncı'
	},
	["ıncı"] = 'inci',
}

--[[
  Saıynı ve affiks türü almay.
  Sayınıñ affiksini keri qaytarmay
  
  Argumentleri:
  — anum: sayı (meselâ 5)
  — affixType: affiks türü (şimdi tek 2 tür bar: 'inde'/'ında' ve 'inci'/'ıncı')
  Netice: affiksnen satır (meselâ 'inde' ya da 'sında')
]]
function p._getAffix(anum, affixType)
	local num = math.floor(anum)
	
	local forms = AFFIXES[affixType]
	if (type(forms) == 'string') then
		forms = AFFIXES[forms]
	end
	
	if num == 0 then
		return forms.zero
	elseif (num % 10 > 0) and (num % 10 < 10) then
		return forms.small[num % 10]
	elseif (num % 100 > 0) and (num % 100 < 1000) then
		local ten = math.floor(num / 10) % 10
		return forms.tens[ten]
	else
		local currentMax = 0
		local currentForm = ''
		for powerOfTen, form in ipairs(forms.large) do
			if (form ~= nil) and (powerOfTen > currentMax) and (num % 10^powerOfTen == 0) then
				currentMax = powerOfTen
				currentForm = form
			end
		end
		
		return currentForm
	end
end

function p.getAffix(frame)
	local number = tonumber(frame.args[1])
	if number == nil then
		return frame.args[1]
	else
		local affixType = frame.args[2]
		return p._getAffix(number, affixType)
	end
end
	
return p