এই মডিউলের জন্য মডিউল:number list/data/ka/নথি-এ নথিপত্র তৈরি করা হয়ে থাকতে পারে

local export = {numbers = {}}

-- Automatically create new subtables of export.numbers through __index,
-- automatically add new fields of export.numbers
-- without overwriting old ones through __newindex.
local actual_numbers = export.numbers

local namespace = mw.title.getCurrentTitle().nsText
local function log(...)
	if namespace == "Module" then
		mw.log(...)
	end
end

local proxy_number_metatable = {
	__newindex = function (self, k, v)
		local old = rawget(self.__actual, k)
		if old then
			log("k: " .. k .. "; old " .. old .. "; new " .. v .. "; old == new: " .. tostring(old == v))
		end
		
		if type(old) == "table" then
			table.insert(old, v)
		elseif type(old) == "string" then
			if old ~= v then
				rawset(self.__actual, k, { old, v })
			end
		else
			rawset(self.__actual, k, v)
		end
	end,
	__index = function (self, k)
		return rawget(self.__actual, k)
	end,
}

local proxy_subtables = {}
local function get_proxy_number_table(k, actual_table)
	local t = proxy_subtables[k]
	if not t then
		t = setmetatable({ __actual = actual_table }, proxy_number_metatable)
		proxy_subtables[k] = t
	end
	return t
end

local function get_actual_number_table(k)
	local t = actual_numbers[k]
	if not t then
		t = {}
		actual_numbers[k] = t
	end
	return t
end

local proxy_numbers = setmetatable({}, {
	__newindex = function (self, k1, fields)
		local subtable = get_actual_number_table(k1)
		local proxy_subtable = get_proxy_number_table(k1, subtable)
		if not proxy_subtable then
			proxy_subtable = new_proxy_number_table(subtable)
			mw.log("new proxy_subtable for " .. k1)
			rawset(proxy_subtables, k1, proxy_subtable)
		end
		for k, v in pairs(fields) do
			proxy_subtable[k] = v
		end
	end,
	__index = function (self, k)
		local actual_table = get_actual_number_table(k)
		local proxy_table = get_proxy_number_table(k, actual_table)
		return proxy_table
	end,
})
local numbers = proxy_numbers

local adverbial_suffix = "ჯერ"
local multiplier_suffix = "მაგი"
local distributive_suffix = "ად"
local collective_suffix = "ვე"
local fractional_suffix = "დი"

numbers[0].cardinal = "ნული"

numbers[1] = {
	cardinal = "ერთი",
	ordinal = "პირველი",
	multiplier = "ერთმაგი",
	distributive = "ერთმაგად",
	adverbial = "ერთხელ",
	collective = "ერთივე",
	fractional = { "მთლიანი", "სრული", "ერთიანი" },
}

numbers[2] = {
	cardinal = "ორი",
	multiplier = "ორმაგი",
	distributive = "ორმაგად",
	adverbial = "ორჯერ",
	collective = "ორივე",
	fractional = "ნახევარი", -- regular fractional added below
}

numbers[3] = {
	cardinal = "სამი",
	distributive = "სამმაგად",
	adverbial = "სამჯერ",
	collective = "სამივე",
	fractional = "მესამედი",
}

numbers[4] = {
	cardinal = "ოთხი",
	distributive = "ოთხმაგად",
	adverbial = "ოთხჯერ",
	collective = "ოთხივე",
	fractional = "მეოთხედი",
}

numbers[5] = {
	cardinal = "ხუთი",
	distributive = "ხუთმაგად",
	adverbial = "ხუთჯერ",
	collective = "ხუთივე",
	fractional = "მეხუთედი",
}

numbers[6] = {
	cardinal = "ექვსი",
	distributive = "ექვსმაგად",
	adverbial = "ექვსჯერ",
	collective = "ექვსივე",
	fractional = "მეექვსედი",
}

numbers[7] = {
	cardinal = "შვიდი",
	distributive = "შვიდმაგად",
	adverbial = "შვიდჯერ",
	collective = "შვიდივე",
	fractional = "მეშვიდედი",
}

numbers[8] = {
	cardinal = "რვა",
	distributive = "რვამაგად",
	adverbial = "რვაჯერ",
	collective = "რვავე",
	fractional = "მერვედი",
}

numbers[9] = {
	cardinal = "ცხრა",
	distributive = "ცხრამაგად",
	adverbial = "ცხრაჯერ",
	collective = "ცხრავე",
	fractional = "მეცხრედი",
}

numbers[10] = {
	cardinal = "ათი",
	distributive = "ათმაგად",
	adverbial = "ათჯერ",
	collective = "ათივე",
	fractional = "მეათედი",
}

numbers[11] = {
	cardinal = "თერთმეტი",
	multiplier = "თერთმეტმაგი",
	distributive = "თერთმეტმაგად",
	adverbial = "თერთმეტჯერ",
	collective = "თერთმეტივე",
	fractional = "მეთერთმეტედი",
}

numbers[12] = {
	cardinal = "თორმეტი",
	multiplier = "თორმეტმაგი",
	distributive = "თორმეტმაგად",
	adverbial = "თორმეტჯერ",
	collective = "თორმეტივე",
	fractional = "მეთორმეტედი",
}

numbers[13] = {
	cardinal = "ცამეტი",
	multiplier = "ცამეტმაგი",
	distributive = "ცამეტმაგად",
	adverbial = "ცამეტჯერ",
	collective = "ცამეტივე",
	fractional = "მეცამეტედი",
}

numbers[14] = {
	cardinal = "თოთხმეტი",
	multiplier = "თოთხმეტმაგი",
	distributive = "თოთხმეტმაგად",
	adverbial = "თოთხმეტჯერ",
	collective = "თოთხმეტივე",
	fractional = "მეთოთხმეტედი",
}

numbers[15] = {
	cardinal = "თხუთმეტი",
	multiplier = "თხუთმეტმაგი",
	distributive = "თხუთმეტმაგად",
	adverbial = "თხუთმეტჯერ",
	collective = "თხუთმეტივე",
	fractional = "მეთხუთმეტედი",
}

numbers[16] = {
	cardinal = "თექვსმეტი",
	multiplier = "თექვსმეტმაგი",
	distributive = "თექვსმეტმაგად",
	adverbial = "თექვსმეტჯერ",
	collective = "თექვსმეტივე",
	fractional = "მეთექვსმეტედი",
}

numbers[17] = {
	cardinal = "ჩვიდმეტი",
	multiplier = "ჩვიდმეტმაგი",
	distributive = "ჩვიდმეტმაგად",
	adverbial = "ჩვიდმეტჯერ",
	collective = "ჩვიდმეტივე",
	fractional = "მეჩვიდმეტედი",
}

numbers[18] = {
	cardinal = "თვრამეტი",
	multiplier = "თვრამეტმაგი",
	distributive = "თვრამეტმაგად",
	adverbial = "თვრამეტჯერ",
	collective = "თვრამეტივე",
	fractional = "მეთვრამეტედი",
}

numbers[19] = {
	cardinal = "ცხრამეტი",
	multiplier = "ცხრამეტმაგი",
	distributive = "ცხრამეტმაგად",
	adverbial = "ცხრამეტჯერ",
	collective = "ცხრამეტივე",
	fractional = "მეცხრამეტედი",
}


numbers[20].multiplier = "ოც" .. multiplier_suffix

local function remove_final_vowel(word)
	return (mw.ustring.gsub(word, "[აეიოუ]$", ""))
end

local function remove_final_i(word)
	return word:gsub("ი$", "")
end

local function get_cardinal(number)
	return numbers[number].cardinal
end

local function get(number, type)
	return numbers[number][type]
end

local function circumfix_ordinal(cardinal)
	return "მე" .. remove_final_vowel(cardinal) .. "ე"
end

for number = 2, 19 do
	numbers[number].ordinal = circumfix_ordinal(get_cardinal(number))
end

for number = 1, 10 do
	numbers[number].adverbial = remove_final_i(get_cardinal(number))
		.. adverbial_suffix
end

for number = 2, 10 do
	numbers[number].multiplier = remove_final_i(get_cardinal(number))
		.. multiplier_suffix
	
	numbers[number].distributive = remove_final_i(get(number, "multiplier"))
		.. distributive_suffix
	
	numbers[number].collective = get_cardinal(number)
		.. collective_suffix
	
	numbers[number].fractional = remove_final_i(get(number, "ordinal"))
		.. fractional_suffix
end

local twenty = "ოცი"
-- Add cardinals and ordinals for 20-99.
for i = 1, 4 do
	local twenties = i * 20
	local twenties_cardinal
	if i ~= 1 then
		twenties_cardinal = (remove_final_vowel(get_cardinal(i)) .. "მ" .. twenty)
			:gsub("მმ", "მ")
	else
		twenties_cardinal = twenty
	end
	numbers[twenties] = {
		cardinal = twenties_cardinal,
		ordinal = circumfix_ordinal(twenties_cardinal),
	}
	
	local twenties_and = remove_final_vowel(twenties_cardinal) .. "და"
	
	for ones = 1, 19 do
		numbers[twenties + ones] = {
			cardinal = twenties_and .. get_cardinal(ones),
			ordinal = twenties_and .. circumfix_ordinal(get_cardinal(ones)),
		}
	end
end

local hundred_cardinal = "ასი"
numbers[100].multiplier = "ას" .. multiplier_suffix

for i = 1, 10 do
	local cardinal
	if i == 1 then
		cardinal = hundred_cardinal
	else
		cardinal = remove_final_vowel(get_cardinal(i)) .. hundred_cardinal
	end
	numbers[i * 100] = {
		cardinal = cardinal,
		ordinal = circumfix_ordinal(cardinal), -- is this right?
	}
end

numbers[1000].multiplier = "ათას" .. multiplier_suffix

numbers[1000000] = {
	cardinal = "მილიონი",
	ordinal = "მემილიონე"
}

return export