本模块包含有關芬蘭語中各種類型數字的数据。

Number 基數詞 Colloquial counting form 序數詞 Colloquial ordinal 序數縮寫 副數詞 乘數 分佈數詞 分數 Wikipedia link
0 nolla nol nollas 0. 0 (luku)
1 yksi yy ensimmäinen eka, ensin 1. kerran yksinkertainen yksittäin 1 (luku)
2 kaksi kaa toinen toka 2. kahdesti kaksinkertainen kaksittain puolikas 2 (luku)
3 kolme koo, kol kolmas kolkki 3. kolmasti kolminkertainen kolmittain kolmasosa, kolmannes 3 (luku)
4 neljä nee, nel neljäs nelkki 4. neljästi nelinkertainen neljäsosa, neljännes 4 (luku)
5 viisi vii viides viikki 5. viidesti viisinkertainen viidesosa, viidennes 5 (luku)
6 kuusi kuu kuudes kuukki 6. kuudesti kuusinkertainen kuudesosa, kuudennes 6 (luku)
7 seitsemän see seitsemäs seikki, seiska 7. seitsemästi seitsenkertainen seitsemäsosa, seitsemännes 7 (luku)
8 kahdeksan kasi kahdeksas kakki 8. kahdeksasti kahdeksankertainen kahdeksasosa, kahdeksannes 8 (luku)
9 yhdeksän ysi yhdeksäs ykki 9. yhdeksästi yhdeksänkertainen yhdeksäsosa, yhdeksännes 9 (luku)
10 kymmenen kymppi, kybä kymmenes 10. kymmenesti kymmenkertainen kymmenesosa, kymmenennes 10 (luku)
11 yksitoista yytoo yhdestoista 11. 11 (luku)
12 kaksitoista kaatoo kahdestoista 12. 12 (luku)
13 kolmetoista kootoo kolmastoista 13. 13 (luku)
14 neljätoista neetoo neljästoista 14. 14 (luku)
15 viisitoista viitoo viidestoista 15. 15 (luku)
16 kuusitoista kuutoo kuudestoista 16. 16 (luku)
17 seitsemäntoista seetoo seitsemästoista 17. 17 (luku)
18 kahdeksantoista kasitoo kahdeksastoista 18. 18 (luku)
19 yhdeksäntoista ysitoo yhdeksästoista 19. 19 (luku)
20 kaksikymmentä kakskyt kahdeskymmenes 20.
21 kaksikymmentäyksi kahdeskymmenesyhdes, kahdeskymmenesensimmäinen 21.
22 kaksikymmentäkaksi kahdeskymmeneskahdes, kahdeskymmenestoinen 22.
23 kaksikymmentäkolme kahdeskymmeneskolmas 23.
24 kaksikymmentäneljä kahdeskymmenesneljäs 24.
25 kaksikymmentäviisi kahdeskymmenesviides 25.
26 kaksikymmentäkuusi kahdeskymmeneskuudes 26.
27 kaksikymmentäseitsemän kahdeskymmenesseitsemäs 27.
28 kaksikymmentäkahdeksan kahdeskymmeneskahdeksas 28.
29 kaksikymmentäyhdeksän kahdeskymmenesyhdeksäs 29.
30 kolmekymmentä kolkyt kolmaskymmenes 30.
31 kolmekymmentäyksi kolmaskymmenesyhdes, kolmaskymmenesensimmäinen 31.
32 kolmekymmentäkaksi kolmaskymmeneskahdes, kolmaskymmenestoinen 32.
33 kolmekymmentäkolme kolmaskymmeneskolmas 33.
34 kolmekymmentäneljä kolmaskymmenesneljäs 34.
35 kolmekymmentäviisi kolmaskymmenesviides 35.
36 kolmekymmentäkuusi kolmaskymmeneskuudes 36.
37 kolmekymmentäseitsemän kolmaskymmenesseitsemäs 37.
38 kolmekymmentäkahdeksan kolmaskymmeneskahdeksas 38.
39 kolmekymmentäyhdeksän kolmaskymmenesyhdeksäs 39.
40 neljäkymmentä nelkyt neljäskymmenes 40.
41 neljäkymmentäyksi neljäskymmenesyhdes, neljäskymmenesensimmäinen 41.
42 neljäkymmentäkaksi neljäskymmeneskahdes, neljäskymmenestoinen 42.
43 neljäkymmentäkolme neljäskymmeneskolmas 43.
44 neljäkymmentäneljä neljäskymmenesneljäs 44.
45 neljäkymmentäviisi neljäskymmenesviides 45.
46 neljäkymmentäkuusi neljäskymmeneskuudes 46.
47 neljäkymmentäseitsemän neljäskymmenesseitsemäs 47.
48 neljäkymmentäkahdeksan neljäskymmeneskahdeksas 48.
49 neljäkymmentäyhdeksän neljäskymmenesyhdeksäs 49.
50 viisikymmentä viiskyt viideskymmenes 50.
51 viisikymmentäyksi viideskymmenesyhdes, viideskymmenesensimmäinen 51.
52 viisikymmentäkaksi viideskymmeneskahdes, viideskymmenestoinen 52.
53 viisikymmentäkolme viideskymmeneskolmas 53.
54 viisikymmentäneljä viideskymmenesneljäs 54.
55 viisikymmentäviisi viideskymmenesviides 55.
56 viisikymmentäkuusi viideskymmeneskuudes 56.
57 viisikymmentäseitsemän viideskymmenesseitsemäs 57.
58 viisikymmentäkahdeksan viideskymmeneskahdeksas 58.
59 viisikymmentäyhdeksän viideskymmenesyhdeksäs 59.
60 kuusikymmentä kuuskyt kuudeskymmenes 60.
61 kuusikymmentäyksi kuudeskymmenesyhdes, kuudeskymmenesensimmäinen 61.
62 kuusikymmentäkaksi kuudeskymmeneskahdes, kuudeskymmenestoinen 62.
63 kuusikymmentäkolme kuudeskymmeneskolmas 63.
64 kuusikymmentäneljä kuudeskymmenesneljäs 64.
65 kuusikymmentäviisi kuudeskymmenesviides 65.
66 kuusikymmentäkuusi kuudeskymmeneskuudes 66.
67 kuusikymmentäseitsemän kuudeskymmenesseitsemäs 67.
68 kuusikymmentäkahdeksan kuudeskymmeneskahdeksas 68.
69 kuusikymmentäyhdeksän kuudeskymmenesyhdeksäs 69.
70 seitsemänkymmentä seiskyt, seitkyt seitsemäskymmenes 70.
71 seitsemänkymmentäyksi seitsemäskymmenesyhdes, seitsemäskymmenesensimmäinen 71.
72 seitsemänkymmentäkaksi seitsemäskymmeneskahdes, seitsemäskymmenestoinen 72.
73 seitsemänkymmentäkolme seitsemäskymmeneskolmas 73.
74 seitsemänkymmentäneljä seitsemäskymmenesneljäs 74.
75 seitsemänkymmentäviisi seitsemäskymmenesviides 75.
76 seitsemänkymmentäkuusi seitsemäskymmeneskuudes 76.
77 seitsemänkymmentäseitsemän seitsemäskymmenesseitsemäs 77.
78 seitsemänkymmentäkahdeksan seitsemäskymmeneskahdeksas 78.
79 seitsemänkymmentäyhdeksän seitsemäskymmenesyhdeksäs 79.
80 kahdeksankymmentä kasikyt kahdeksaskymmenes 80.
81 kahdeksankymmentäyksi kahdeksaskymmenesyhdes, kahdeksaskymmenesensimmäinen 81.
82 kahdeksankymmentäkaksi kahdeksaskymmeneskahdes, kahdeksaskymmenestoinen 82.
83 kahdeksankymmentäkolme kahdeksaskymmeneskolmas 83.
84 kahdeksankymmentäneljä kahdeksaskymmenesneljäs 84.
85 kahdeksankymmentäviisi kahdeksaskymmenesviides 85.
86 kahdeksankymmentäkuusi kahdeksaskymmeneskuudes 86.
87 kahdeksankymmentäseitsemän kahdeksaskymmenesseitsemäs 87.
88 kahdeksankymmentäkahdeksan kahdeksaskymmeneskahdeksas 88.
89 kahdeksankymmentäyhdeksän kahdeksaskymmenesyhdeksäs 89.
90 yhdeksänkymmentä ysikyt yhdeksäskymmenes 90.
91 yhdeksänkymmentäyksi yhdeksäskymmenesyhdes, yhdeksäskymmenesensimmäinen 91.
92 yhdeksänkymmentäkaksi yhdeksäskymmeneskahdes, yhdeksäskymmenestoinen 92.
93 yhdeksänkymmentäkolme yhdeksäskymmeneskolmas 93.
94 yhdeksänkymmentäneljä yhdeksäskymmenesneljäs 94.
95 yhdeksänkymmentäviisi yhdeksäskymmenesviides 95.
96 yhdeksänkymmentäkuusi yhdeksäskymmeneskuudes 96.
97 yhdeksänkymmentäseitsemän yhdeksäskymmenesseitsemäs 97.
98 yhdeksänkymmentäkahdeksan yhdeksäskymmeneskahdeksas 98.
99 yhdeksänkymmentäyhdeksän yhdeksäskymmenesyhdeksäs 99.
100 sata sadas 100.
101 satayksi sadasyhdes, sadasensimmäinen 101.
102 satakaksi sadaskahdes, sadastoinen 102.
103 satakolme sadaskolmas 103.
104 sataneljä sadasneljäs 104.
105 sataviisi sadasviides 105.
106 satakuusi sadaskuudes 106.
107 sataseitsemän sadasseitsemäs 107.
108 satakahdeksan sadaskahdeksas 108.
109 satayhdeksän sadasyhdeksäs 109.
110 satakymmenen sadaskymmenes 110.
111 satayksitoista sadasyhdestoista 111.
112 satakaksitoista sadaskahdestoista 112.
113 satakolmetoista sadaskolmastoista 113.
114 sataneljätoista sadasneljästoista 114.
115 sataviisitoista sadasviidestoista 115.
116 satakuusitoista sadaskuudestoista 116.
117 sataseitsemäntoista sadasseitsemästoista 117.
118 satakahdeksantoista sadaskahdeksastoista 118.
119 satayhdeksäntoista sadasyhdeksästoista 119.
120 satakaksikymmentä sadaskahdeskymmenes 120.
121 satakaksikymmentäyksi sadaskahdeskymmenesyhdes, sadaskahdeskymmenesensimmäinen 121.
200 kaksisataa kahdessadas 200.
300 kolmesataa kolmassadas 300.
400 neljäsataa neljässadas 400.
500 viisisataa viidessadas 500.
600 kuusisataa kuudessadas 600.
700 seitsemänsataa seitsemässadas 700.
800 kahdeksansataa kahdeksassadas 800.
900 yhdeksänsataa yhdeksässadas 900.
1,000 tuhat tuhannes 1000., 1 000., (nominative case) 1000:s
2,000 kaksituhatta kahdestuhannes
3,000 kolmetuhatta kolmastuhannes
4,000 neljätuhatta neljästuhannes
5,000 viisituhatta viidestuhannes
6,000 kuusituhatta kuudestuhannes
7,000 seitsemäntuhatta seitsemästuhannes
8,000 kahdeksantuhatta kahdeksastuhannes
9,000 yhdeksäntuhatta yhdeksästuhannes
10,000 kymmenentuhatta kymmenestuhannes
20,000 kaksikymmentätuhatta kahdeskymmenestuhannes
30,000 kolmekymmentätuhatta kolmaskymmenestuhannes
40,000 neljäkymmentätuhatta neljäskymmenestuhannes
50,000 viisikymmentätuhatta viideskymmenestuhannes
60,000 kuusikymmentätuhatta kuudeskymmenestuhannes
70,000 seitsemänkymmentätuhatta seitsemäskymmenestuhannes
80,000 kahdeksankymmentätuhatta kahdeksaskymmenestuhannes
90,000 yhdeksänkymmentätuhatta yhdeksäskymmenestuhannes
100,000 satatuhatta sadastuhannes
200,000 kaksisataatuhatta kahdessadastuhannes
300,000 kolmesataatuhatta kolmassadastuhannes
400,000 neljäsataatuhatta neljässadastuhannes
500,000 viisisataatuhatta viidessadastuhannes
600,000 kuusisataatuhatta kuudessadastuhannes
700,000 seitsemänsataatuhatta seitsemässadastuhannes
800,000 kahdeksansataatuhatta kahdeksassadastuhannes
900,000 yhdeksänsataatuhatta yhdeksässadastuhannes
1,000,000 (106) miljoona miljoonas
1,000,000,000 (109) miljardi miljardis
1012 biljoona biljoonas
1015 biljardi biljardis
1018 triljoona triljoonas
1021 triljardi triljardis
1024 kvadriljoona kvadriljoonas
1030 kvintiljoona kvintiljoonas
1036 sekstiljoona sekstiljoonas
1042 septiljoona septiljoonas
1048 oktiljoona oktiljoonas

local export = {numbers = {}}

local numbers = export.numbers

export.additional_number_types = {
	{key = "colloquial_counting_form", after = "cardinal"},
	{key = "colloquial_ordinal", after = "ordinal"},
}

numbers[0] = {
	cardinal = "nolla",
	ordinal = "nollas",
	colloquial_counting_form = "nol",
}

numbers[1] = {
	cardinal = "yksi",
	ordinal = "ensimmäinen",
	adverbial = "kerran",
	multiplier = "yksinkertainen",
	distributive = "yksittäin",
	colloquial_counting_form = "yy",
	colloquial_ordinal = {"eka", "ensin"},
}

numbers[2] = {
	cardinal = "kaksi",
	ordinal = "toinen",
	adverbial = "kahdesti",
	fractional = "puolikas",
	multiplier = "kaksinkertainen",
	distributive = "kaksittain",
	colloquial_counting_form = "kaa",
	colloquial_ordinal = "toka",
}

numbers[3] = {
	cardinal = "kolme",
	ordinal = "kolmas",
	adverbial = "kolmasti",
	fractional = {"kolmasosa", "kolmannes"},
	multiplier = "kolminkertainen",
	distributive = "kolmittain",
	colloquial_counting_form = {"koo", "kol"},
	colloquial_ordinal = "kolkki",
}

numbers[4] = {
	cardinal = "neljä",
	ordinal = "neljäs",
	adverbial = "neljästi",
	fractional = {"neljäsosa", "neljännes"},
	multiplier = "nelinkertainen",
	colloquial_counting_form = {"nee", "nel"},
	colloquial_ordinal = "nelkki",
}

numbers[5] = {
	cardinal = "viisi",
	ordinal = "viides",
	adverbial = "viidesti",
	fractional = {"viidesosa", "viidennes"},
	multiplier = "viisinkertainen",
	colloquial_counting_form = "vii",
	colloquial_ordinal = "viikki",
}

numbers[6] = {
	cardinal = "kuusi",
	ordinal = "kuudes",
	adverbial = "kuudesti",
	fractional = {"kuudesosa", "kuudennes"},
	multiplier = "kuusinkertainen",
	colloquial_counting_form = "kuu",
	colloquial_ordinal = "kuukki",
}

numbers[7] = {
	cardinal = "seitsemän",
	ordinal = "seitsemäs",
	adverbial = "seitsemästi",
	fractional = {"seitsemäsosa", "seitsemännes"},
	multiplier = "seitsenkertainen",
	colloquial_counting_form = "see",
	colloquial_ordinal = {"seikki", "seiska"},
}

numbers[8] = {
	cardinal = "kahdeksan",
	ordinal = "kahdeksas",
	adverbial = "kahdeksasti",
	fractional = {"kahdeksasosa", "kahdeksannes"},
	multiplier = "kahdeksankertainen",
	colloquial_counting_form = "kasi",
	colloquial_ordinal = "kakki",
}

numbers[9] = {
	cardinal = "yhdeksän",
	ordinal = "yhdeksäs",
	adverbial = "yhdeksästi",
	fractional = {"yhdeksäsosa", "yhdeksännes"},
	multiplier = "yhdeksänkertainen",
	colloquial_counting_form = "ysi",
	colloquial_ordinal = "ykki",
}

numbers[10] = {
	cardinal = "kymmenen",
	ordinal = "kymmenes",
	adverbial = "kymmenesti",
	fractional = {"kymmenesosa", "kymmenennes"},
	multiplier = "kymmenkertainen",
	colloquial_counting_form = {"kymppi", "kybä"},
}

-- Cardinals and ordinals for 11-19 are set down below.
numbers[11] = {
	colloquial_counting_form = "yytoo",
}

numbers[12] = {
	colloquial_counting_form = "kaatoo",
}

numbers[13] = {
	colloquial_counting_form = "kootoo",
}

numbers[14] = {
	colloquial_counting_form = "neetoo",
}

numbers[15] = {
	colloquial_counting_form = "viitoo",
}

numbers[16] = {
	colloquial_counting_form = "kuutoo",
}

numbers[17] = {
	colloquial_counting_form = "seetoo",
}

numbers[18] = {
	colloquial_counting_form = "kasitoo",
}

numbers[19] = {
	colloquial_counting_form = "ysitoo",
}

numbers[20] = {
	colloquial_counting_form = "kakskyt",
}

numbers[30] = {
	colloquial_counting_form = "kolkyt",
}

numbers[40] = {
	colloquial_counting_form = "nelkyt",
}

numbers[50] = {
	colloquial_counting_form = "viiskyt",
}

numbers[60] = {
	colloquial_counting_form = "kuuskyt",
}

numbers[70] = {
	colloquial_counting_form = {"seiskyt", "seitkyt"},
}

numbers[80] = {
	colloquial_counting_form = "kasikyt",
}

numbers[90] = {
	colloquial_counting_form = "ysikyt",
}

numbers[100] = {
	cardinal = "sata",
	ordinal = "sadas",
}

numbers[1000] = {
	cardinal = "tuhat",
	ordinal = "tuhannes",
	ordinal_abbr = {"1000.", "1 000.", "1000:s<q:nominative case>"},
}

numbers[1000000] = {
	cardinal = "miljoona",
	ordinal = "miljoonas",
}

local function power_of(n)
	return "1" .. string.rep("0", n)
end

export.numbers[power_of(9)] = {
	cardinal = "miljardi",
	ordinal = "miljardis",
}

export.numbers[power_of(12)] = {
	cardinal = "biljoona",
	ordinal = "biljoonas",
}

export.numbers[power_of(15)] = {
	cardinal = "biljardi",
	ordinal = "biljardis",
}

export.numbers[power_of(18)] = {
	cardinal = "triljoona",
	ordinal = "triljoonas",
}

export.numbers[power_of(21)] = {
	cardinal = "triljardi",
	ordinal = "triljardis",
}

export.numbers[power_of(24)] = {
	cardinal = "kvadriljoona",
	ordinal = "kvadriljoonas",
}

export.numbers[power_of(30)] = {
	cardinal = "kvintiljoona",
	ordinal = "kvintiljoonas",
}

export.numbers[power_of(36)] = {
	cardinal = "sekstiljoona",
	ordinal = "sekstiljoonas",
}

export.numbers[power_of(42)] = {
	cardinal = "septiljoona",
	ordinal = "septiljoonas",
}

export.numbers[power_of(48)] = {
	cardinal = "oktiljoona",
	ordinal = "oktiljoonas",
}

local alt_ordinal = { "yhdes", "kahdes" }

local nth_decades = {
	"toista", "kolmatta", "neljättä", "viidettä", "kuudetta",
	"seitsemättä", "kahdeksatta", "yhdeksättä", "kymmenettä"
}

local partitives = {
	[10] = "kymmentä",
	[100] = "sataa",
	[1000] = "tuhatta",
	[1000000] = "miljoonaa",
	[1000000000] = "miljardia",
	[1000000000000] = "biljoonaa"	
}

local MAXIMUM_ONES = 121
local MAXIMUM_FACTORS_MNZ = MAXIMUM_ONES
local MAXIMUM_FACTORS_MT1 = 100000000
local MAXIMUM_FACTORS_ANY = 1000000000

local function set_number(number, cardinal, ordinal)
	if not numbers[number] then
		numbers[number] = {}
	end
	numbers[number].cardinal = cardinal
	numbers[number].ordinal = ordinal
end

local function prepend(prefix, items)
	if type(items) == "table" then
		local result = {}
		for _, item in ipairs(items) do
			table.insert(result, prefix .. item)
		end
		return result
	else
		return prefix .. items
	end
end

local function append(items, suffix)
	if type(items) == "table" then
		local result = {}
		for _, item in ipairs(items) do
			table.insert(result, item .. suffix)
		end
		return result
	else
		return items .. suffix
	end
end

local function more_than_one_nonzero(...)
	local count = 0
	for _, v in ipairs(arg) do
		if v ~= 0 then count = count + 1 end
	end
	return count > 1
end

local function make_factor(factor, base, separator)
	local factorbase = factor * base
	local factor_ord = alt_ordinal[factor] or numbers[factor].ordinal
	if factorbase > MAXIMUM_FACTORS_ANY then return false end
	set_number(factorbase,
		numbers[factor].cardinal .. separator .. partitives[base],
		append(factor_ord, separator .. numbers[base].ordinal)
	)
	return true
end

local function make_factors(base)
	local separator = base >= 1000000 and " " or ""
	for factor = 2,9 do
		if not make_factor(factor, base, separator) then break end
	end
end

local function past_maximum(base, hundreds, tens, units)
	local factor = hundreds + tens + units
	local factorbase = factor * base
	if factorbase > MAXIMUM_FACTORS_MNZ and more_than_one_nonzero(hundreds, tens, units) then
		return true
	end
	if factorbase > MAXIMUM_FACTORS_MT1 and math.max(hundreds, tens, units) > 1 then
		return true
	end
	return factorbase > MAXIMUM_FACTORS_ANY
end

local function make_factors_tens_hundreds(base)
	local separator = base >= 1000000 and " " or ""
	for hundreds=0,900,100 do
		for tens=0,90,10 do
			if past_maximum(base, hundreds, tens, 0) then break end
			for units=0,9 do
				if past_maximum(base, hundreds, tens, units) then break end
				local factor = hundreds + tens + units
				if factor >= 2 then
					if not make_factor(factor, base, separator) then break end
				end
			end
		end
	end
end

local function make_first_decade(base)
	local separator = base >= 1000 and " " or ""
	for ones = 1,9 do
		if base + ones > MAXIMUM_ONES then break end
		local alt_ord = alt_ordinal[ones]
		set_number(base + ones,
			numbers[base].cardinal .. separator .. numbers[ones].cardinal,
			alt_ord and {
				numbers[base].ordinal .. separator .. alt_ord,
				numbers[base].ordinal .. separator .. numbers[ones].ordinal
			} or numbers[base].ordinal .. separator .. numbers[ones].ordinal
		)
	end
end

local function make_hundreds()
	local base = 100
	make_factors(base)
	
	for factor = 1,9 do
		local factorbase = factor * base
		if factorbase > MAXIMUM_ONES then break end
		make_first_decade(factorbase)
		for offset = 10,base-1 do
			local n = factorbase + offset
			if n > MAXIMUM_ONES then break end
			set_number(n,
				prepend(numbers[factorbase].cardinal, numbers[offset].cardinal),
				prepend(numbers[factorbase].ordinal, numbers[offset].ordinal)
			)
		end
	end
end

local function recurse_down(factorbase, unit)
	make_first_decade(factorbase)
	for offset = 10,999 do
		local n = factorbase + offset * unit
		if n > MAXIMUM_ONES then break end
		set_number(n,
			prepend(numbers[factorbase].cardinal .. " ", numbers[offset].cardinal),
			prepend(numbers[factorbase].ordinal .. " ", numbers[offset].ordinal)
		)
	end

	if unit >= 1000 then
		for factor = 0,999 do
			local n = factorbase + factor / 1000
			if n > MAXIMUM_ONES then break end
			recurse_down(n, unit / 1000)
		end
	elseif unit ~= 1 then
		error("Illegal state")
	end
end

local function expand_power(power3)
	local base = 1
	for _ = 1,power3 do base = 1000 * base end

	make_factors_tens_hundreds(base)
	for factor = 1,999 do
		recurse_down(factor * base, base / 1000)
	end
end

local function remove_link_if(form)
	return mw.ustring.find(form, " ") and not mw.ustring.find(form, "%[")
end

-- local function separate_links(form)
-- 	if not mw.ustring.find(form, " ") or mw.ustring.find(form, "%[") then
-- 		return form
-- 	end
-- 	if mw.ustring.find(form, "<") then
-- 		local tag_index = mw.ustring.find(form, "<")
-- 		local before_tag, tag = mw.ustring.sub(form, 1, tag_index - 1), mw.ustring.sub(form, tag_index)
-- 		return separate_links(before_tag) .. tag
-- 	end
-- 	if not mw.ustring.find(form, "[^0-9 .-]") then
-- 		-- TODO (delink completely)
-- 		return form
-- 	end
-- 	return mw.ustring.gsub(form, "[a-zåäöšž]+", "[[%1]]") .. "<link:>"
-- end

for ones = 1,9 do
	local one_ord = alt_ordinal[ones] or numbers[ones].ordinal
	set_number(10 + ones,
		numbers[ones].cardinal .. nth_decades[1],
		one_ord .. nth_decades[1]
	)
end

make_factors(10)
for tens = 20,90,10 do
	make_first_decade(tens)
end

make_hundreds()
expand_power(1)
expand_power(2)

for num, data in pairs(numbers) do
	num = tostring(num)
	if #num < 10 then -- skip large numbers
		if #num >= 4 then
			local num_remainder_digits = #num % 3
			local left_remainder_digits = num:sub(1, num_remainder_digits)
			local right_power_of_3_digits = num:sub(1 + num_remainder_digits)
			num = left_remainder_digits .. right_power_of_3_digits:gsub("(...)", " %1")
		end
		data.ordinal_abbr = data.ordinal_abbr or num .. "."
	end
end

local empty_keys = {}
-- remove entries with spaces. we do not want links to them.
for number, form_types in pairs(export.numbers) do
	for form_type, forms in pairs(form_types) do
		if type(forms) == "string" then
			if remove_link_if(forms) then
				form_types[form_type] = nil
			end
		elseif type(forms) == "table" then
			local source_index = 1
			local source_end = #forms
			local destination_index = 1
			while source_index <= source_end do
				local form = forms[source_index]
				if not remove_link_if(form) then
					forms[destination_index] = form
					destination_index = destination_index + 1
				end
				source_index = source_index + 1
			end
		end
	end
	
	if not pairs(form_types)(form_types) then
		table.insert(empty_keys, number)
	end
end

for _, number in ipairs(empty_keys) do
	export.numbers[number] = nil
end

for num = 0,19 do
	numbers[num].wplink = ("%s (luku)"):format(num)
end

return export