This module contains data on various types of numbers in ตากาล็อก.

จำนวน เชิงการนับ Spanish cardinal เชิงอันดับที่ Spanish ordinal ตัวย่อเชิงอันดับที่ เชิงกริยาวิเศษณ์ ตัวคูณ เชิงแจกแจง เชิงรวบรวม Restrictive เศษส่วน (⅟…) Wikipedia link
0 wala sero
1 isa uno una, pang-una, ikaisa primero, primera ika-1, pang-1 minsan isang ibayo tig-isa, isahan, isa-isa iisa buo 1 (bilang)
2 dalawa dos ikalawa, pangalawa segundo, segunda ika-2, pang-2 makalawa, makadalawa doble, dalawang ibayo tigdalawa, dalawahan, dala-dalawa dadalawa kalahati 2 (bilang)
3 tatlo tres ikatlo, ikatatlo, pangatlo tersero, tersera ika-3, pang-3 makatlo, makaitlo, makatatlo triple, tatlong ibayo tigtatlo, tatluhan, tatlo-tatlo tatatlo katlo, sangkatlo, saikatlo 3 (bilang)
4 apat kuwatro ikaapat, pang-apat kuwarta ika-4, pang-4 makaapat, makaipat apat na ibayo tig-apat, apatan, apat-apat aapat kapat, sangkapat, saikapat 4 (bilang)
5 lima singko ikalima, panlima kinto, kinta ika-5, pang-5 makalima limang ibayo tiglima, limahan, lima-lima lilima kalima, sangkalima, ikalima, saikalima 5 (bilang)
6 anim seis ikaanim, pang-anim ika-6, pang-6 makaanim anim na ibayo tig-anim, animan, anim-anim aanim kanim, sangkanim, saikanim, kaanim, sangkaanim, ikaanim, saikaanim 6 (bilang)
7 pito siyete ikapito, pampito ika-7, pang-7 makapito pitong ibayo tigpito, pituhan, pito-pito pipito kapito, sangkapito, ikapito, saikapito 7 (bilang)
8 walo otso ikawalo, pangwalo oktabo, oktaba ika-8, pang-8 makawalo walong ibayo tigwalo, waluhan, walo-walo wawalo kawalo, sangkawalo, ikawalo, saikawalo 8 (bilang)
9 siyam nuwebe ikasiyam, pansiyam ika-9, pang-9 makasiyam siyam na ibayo tigsiyam, siyaman, siyam-siyam sisiyam kasiyam, sangkasiyam, ikasiyam, saikasiyam 9 (bilang)
10 sampu diyes ikapu, ikasampu, pansampu ika-10, pang-10 makasampu sampung ibayo tigsampu, sampuan, sampu-sampu pu, desena sasampu
kapu
, ikapu, saikapu,
kasampu
, sangkasampu, ikasampu, saikasampu
10 (bilang)
11 labing-isa onse ikalabing-isa, panlabing-isa ika-11, pang-11 makalabing-isa labing-isang ibayo tiglabing-isa, labing-isahan, labi-labing-isa lalabing-isa kalabing-isa, sangkalabing-isa, ikalabing-isa, saikalabing-isa 11 (bilang)
12 labindalawa dose ikalabindalawa, panlabindalawa ika-12, pang-12 makalabindalawa labindalawang ibayo tiglabindalawa, labindalawahan, labi-labindalawa dosena lalabindalawa kalabindalawa, sangkalabindalawa, ikalabindalawa, saikalabindalawa 12 (bilang)
13 labintatlo trese ikalabintatlo, panlabintatlo ika-13, pang-13 makalabintatlo labintatlong ibayo tiglabintatlo, labintatluhan, labi-labintatlo lalabintatlo kalabintatlo, sangkalabintatlo, ikalabintatlo, saikalabintatlo 13 (bilang)
14 labing-apat katorse ikalabing-apat, panlabing-apat ika-14, pang-14 makalabing-apat labing-apat na ibayo tiglabing-apat, labing-apatan, labi-labing-apat lalabing-apat kalabing-apat, sangkalabing-apat, ikalabing-apat, saikalabing-apat 14 (bilang)
15 labinlima kinse ikalabinlima, panlabinlima ika-15, pang-15 makalabinlima labinlimang ibayo tiglabinlima, labinlimahan, labi-labinlima lalabinlima kalabinlima, sangkalabinlima, ikalabinlima, saikalabinlima 15 (bilang)
16 labing-anim disiseis ikalabing-anim, panlabing-anim ika-16, pang-16 makalabing-anim labing-anim na ibayo tiglabing-anim, labing-animan, labi-labing-anim lalabing-anim kalabing-anim, sangkalabing-anim, ikalabing-anim, saikalabing-anim 16 (bilang)
17 labimpito disisiyete ikalabimpito, panlabimpito ika-17, pang-17 makalabimpito labimpitong ibayo tiglabimpito, labimpituhan, labi-labimpito lalabimpito kalabimpito, sangkalabimpito, ikalabimpito, saikalabimpito 17 (bilang)
18 labingwalo disiotso ikalabingwalo, panlabingwalo ika-18, pang-18 makalabingwalo labingwalong ibayo tiglabingwalo, labingwaluhan, labi-labingwalo lalabingwalo kalabingwalo, sangkalabingwalo, ikalabingwalo, saikalabingwalo 18 (bilang)
19 labinsiyam disinuwebe ikalabinsiyam, panlabinsiyam ika-19, pang-19 makalabinsiyam labinsiyam na ibayo tiglabinsiyam, labinsiyaman, labi-labinsiyam lalabinsiyam kalabinsiyam, sangkalabinsiyam, ikalabinsiyam, saikalabinsiyam 19 (bilang)
20 dalawampu beynte ikadalawampu, pandalawampu ika-20, pang-20 makadalawampu dalawampung ibayo tigdalawampu, dalawampuan, dala-dalawampu dadalawampu kadalawampu, sangkadalawampu, ikadalawampu, saikadalawampu 20 (bilang)
21 dalawampu't isa beynte uno ikadalawampu't isa, pandalawampu't isa ika-21, pang-21 makadalawampu't isa dalawampu't isang ibayo tigdalawampu't isa, dalawampu't isahan, dala-dalawampu't isa dadalawampu't isa kadalawampu't isa, sangkadalawampu't isa, ikadalawampu't isa, saikadalawampu't isa
22 dalawampu't dalawa beynte dos ikadalawampu't dalawa, pandalawampu't dalawa ika-22, pang-22
23 dalawampu't tatlo beynte tres ikadalawampu't tatlo, pandalawampu't tatlo ika-23, pang-23
24 dalawampu't apat beynte kuwatro ikadalawampu't apat, pandalawampu't apat ika-24, pang-24
25 dalawampu't lima beynte singko ikadalawampu't lima, pandalawampu't lima ika-25, pang-25
26 dalawampu't anim beynte seis ikadalawampu't anim, pandalawampu't anim ika-26, pang-26
27 dalawampu't pito beynte siyete ikadalawampu't pito, pandalawampu't pito ika-27, pang-27
28 dalawampu't walo beynte otso ikadalawampu't walo, pandalawampu't walo ika-28, pang-28
29 dalawampu't siyam beynte nuwebe ikadalawampu't siyam, pandalawampu't siyam ika-29, pang-29
30 tatlumpu treynta ikatatlumpu, pantatlumpu ika-30, pang-30 makatatlumpu tatlumpung ibayo tigtatlumpu, tatlumpuan, tatlu-tatlumpu tatatlumpu katatlumpu, sangkatatlumpu, ikatatlumpu, saikatatlumpu
31 tatlumpu't isa treynta y uno ikatatlumpu't isa, pantatlumpu't isa ika-31, pang-31
32 tatlumpu't dalawa treynta y dos ikatatlumpu't dalawa, pantatlumpu't dalawa ika-32, pang-32
33 tatlumpu't tatlo treynta y tres ikatatlumpu't tatlo, pantatlumpu't tatlo ika-33, pang-33
34 tatlumpu't apat treynta y kuwatro ikatatlumpu't apat, pantatlumpu't apat ika-34, pang-34
35 tatlumpu't lima treynta y singko ikatatlumpu't lima, pantatlumpu't lima ika-35, pang-35
36 tatlumpu't anim treynta y seis ikatatlumpu't anim, pantatlumpu't anim ika-36, pang-36
37 tatlumpu't pito treynta y siyete ikatatlumpu't pito, pantatlumpu't pito ika-37, pang-37
38 tatlumpu't walo treynta y otso ikatatlumpu't walo, pantatlumpu't walo ika-38, pang-38
39 tatlumpu't siyam treynta y nuwebe ikatatlumpu't siyam, pantatlumpu't siyam ika-39, pang-39
40 apatnapu kuwarenta ikaapatnapu, pang-apatnapu ika-40, pang-40 makaapatnapu apatnapung ibayo tig-apatnapu, apatnapuan, apa-apatnapu aapatnapu kaapatnapu, sangkaapatnapu, ikaapatnapu, saikaapatnapu
41 apatnapu't isa kuwarenta y uno ikaapatnapu't isa, pang-apatnapu't isa ika-41, pang-41
42 apatnapu't dalawa kuwarenta y dos ikaapatnapu't dalawa, pang-apatnapu't dalawa ika-42, pang-42
43 apatnapu't tatlo kuwarenta y tres ikaapatnapu't tatlo, pang-apatnapu't tatlo ika-43, pang-43
44 apatnapu't apat kuwarenta y kuwatro ikaapatnapu't apat, pang-apatnapu't apat ika-44, pang-44
45 apatnapu't lima kuwarenta y singko ikaapatnapu't lima, pang-apatnapu't lima ika-45, pang-45
46 apatnapu't anim kuwarenta y seis ikaapatnapu't anim, pang-apatnapu't anim ika-46, pang-46
47 apatnapu't pito kuwarenta y siyete ikaapatnapu't pito, pang-apatnapu't pito ika-47, pang-47
48 apatnapu't walo kuwarenta y otso ikaapatnapu't walo, pang-apatnapu't walo ika-48, pang-48
49 apatnapu't siyam kuwarenta y nuwebe ikaapatnapu't siyam, pang-apatnapu't siyam ika-49, pang-49
50 limampu singkuwenta ikalimampu, panlimampu ika-50, pang-50 makalimampu limampung ibayo tiglimampu, limampuan, lima-limampu lilimampu kalimampu, sangkalimampu, ikalimampu, saikalimampu
51 limampu't isa singkuwenta y uno ikalimampu't isa, panlimampu't isa ika-51, pang-51
52 limampu't dalawa singkuwenta y dos ikalimampu't dalawa, panlimampu't dalawa ika-52, pang-52
53 limampu't tatlo singkuwenta y tres ikalimampu't tatlo, panlimampu't tatlo ika-53, pang-53
54 limampu't apat singkuwenta y kuwatro ikalimampu't apat, panlimampu't apat ika-54, pang-54
55 limampu't lima singkuwenta y singko ikalimampu't lima, panlimampu't lima ika-55, pang-55
56 limampu't anim singkuwenta y seis ikalimampu't anim, panlimampu't anim ika-56, pang-56
57 limampu't pito singkuwenta y siyete ikalimampu't pito, panlimampu't pito ika-57, pang-57
58 limampu't walo singkuwenta y otso ikalimampu't walo, panlimampu't walo ika-58, pang-58
59 limampu't siyam singkuwenta y nuwebe ikalimampu't siyam, panlimampu't siyam ika-59, pang-59
60 animnapu sesenta ikaanimnapu, pang-animnapu ika-60, pang-60 makaanimnapu animnapung ibayo tig-animnapu, animnapuan, ani-animnapu aanimnapu kaanimnapu, sangkaanimnapu, ikaanimnapu, saikaanimnapu
61 animnapu't isa sesenta y uno ikaanimnapu't isa, pang-animnapu't isa ika-61, pang-61
62 animnapu't dalawa sesenta y dos ikaanimnapu't dalawa, pang-animnapu't dalawa ika-62, pang-62
63 animnapu't tatlo sesenta y tres ikaanimnapu't tatlo, pang-animnapu't tatlo ika-63, pang-63
64 animnapu't apat sesenta y kuwatro ikaanimnapu't apat, pang-animnapu't apat ika-64, pang-64
65 animnapu't lima sesenta y singko ikaanimnapu't lima, pang-animnapu't lima ika-65, pang-65
66 animnapu't anim sesenta y seis ikaanimnapu't anim, pang-animnapu't anim ika-66, pang-66
67 animnapu't pito sesenta y siyete ikaanimnapu't pito, pang-animnapu't pito ika-67, pang-67
68 animnapu't walo sesenta y otso ikaanimnapu't walo, pang-animnapu't walo ika-68, pang-68
69 animnapu't siyam sesenta y nuwebe ikaanimnapu't siyam, pang-animnapu't siyam ika-69, pang-69
70 pitumpu setenta ikapitumpu, pampitumpu ika-70, pang-70 makapitumpu pitumpung ibayo tigpitumpu, pitumpuan, pitu-pitumpu pipitumpu kapitumpu, sangkapitumpu, ikapitumpu, saikapitumpu
71 pitumpu't isa setenta y uno ikapitumpu't isa, pampitumpu't isa ika-71, pang-71
72 pitumpu't dalawa setenta y dos ikapitumpu't dalawa, pampitumpu't dalawa ika-72, pang-72
73 pitumpu't tatlo setenta y tres ikapitumpu't tatlo, pampitumpu't tatlo ika-73, pang-73
74 pitumpu't apat setenta y kuwatro ikapitumpu't apat, pampitumpu't apat ika-74, pang-74
75 pitumpu't lima setenta y singko ikapitumpu't lima, pampitumpu't lima ika-75, pang-75
76 pitumpu't anim setenta y seis ikapitumpu't anim, pampitumpu't anim ika-76, pang-76
77 pitumpu't pito setenta y siyete ikapitumpu't pito, pampitumpu't pito ika-77, pang-77
78 pitumpu't walo setenta y otso ikapitumpu't walo, pampitumpu't walo ika-78, pang-78
79 pitumpu't siyam setenta y nuwebe ikapitumpu't siyam, pampitumpu't siyam ika-79, pang-79
80 walumpu otsenta ikawalumpu, pangwalumpu ika-80, pang-80 makawalumpu walumpung ibayo tigwalumpu, walumpuan, walu-walumpu wawalumpu kawalumpu, sangkawalumpu, ikawalumpu, saikawalumpu
81 walumpu't isa otsenta y uno ikawalumpu't isa, pangwalumpu't isa ika-81, pang-81
82 walumpu't dalawa otsenta y dos ikawalumpu't dalawa, pangwalumpu't dalawa ika-82, pang-82
83 walumpu't tatlo otsenta y tres ikawalumpu't tatlo, pangwalumpu't tatlo ika-83, pang-83
84 walumpu't apat otsenta y kuwatro ikawalumpu't apat, pangwalumpu't apat ika-84, pang-84
85 walumpu't lima otsenta y singko ikawalumpu't lima, pangwalumpu't lima ika-85, pang-85
86 walumpu't anim otsenta y seis ikawalumpu't anim, pangwalumpu't anim ika-86, pang-86
87 walumpu't pito otsenta y siyete ikawalumpu't pito, pangwalumpu't pito ika-87, pang-87
88 walumpu't walo otsenta y otso ikawalumpu't walo, pangwalumpu't walo ika-88, pang-88
89 walumpu't siyam otsenta y nuwebe ikawalumpu't siyam, pangwalumpu't siyam ika-89, pang-89
90 siyamnapu nobenta ikasiyamnapu, pansiyamnapu ika-90, pang-90 makasiyamnapu siyamnapung ibayo tigsiyamnapu, siyamnapuan, siya-siyamnapu sisiyamnapu kasiyamnapu, sangkasiyamnapu, ikasiyamnapu, saikasiyamnapu
91 siyamnapu't isa nobenta y uno ikasiyamnapu't isa, pansiyamnapu't isa ika-91, pang-91
92 siyamnapu't dalawa nobenta y dos ikasiyamnapu't dalawa, pansiyamnapu't dalawa ika-92, pang-92
93 siyamnapu't tatlo nobenta y tres ikasiyamnapu't tatlo, pansiyamnapu't tatlo ika-93, pang-93
94 siyamnapu't apat nobenta y kuwatro ikasiyamnapu't apat, pansiyamnapu't apat ika-94, pang-94
95 siyamnapu't lima nobenta y singko ikasiyamnapu't lima, pansiyamnapu't lima ika-95, pang-95
96 siyamnapu't anim nobenta y seis ikasiyamnapu't anim, pansiyamnapu't anim ika-96, pang-96
97 siyamnapu't pito nobenta y siyete ikasiyamnapu't pito, pansiyamnapu't pito ika-97, pang-97
98 siyamnapu't walo nobenta y otso ikasiyamnapu't walo, pansiyamnapu't walo ika-98, pang-98
99 siyamnapu't siyam nobenta y nuwebe ikasiyamnapu't siyam, pansiyamnapu't siyam ika-99, pang-99 makasiyamnapu't siyam siyamnapu't siyam na ibayo tigsiyamnapu't siyam, siyamnapu't siyaman, siya-siyamnapu't siyam sisiyamnapu't siyam kasiyamnapu't siyam, sangkasiyamnapu't siyam, ikasiyamnapu't siyam, saikasiyamnapu't siyam
100 sandaan siyento ikasandaan, pansandaan ika-100, pang-100 makasandaan sandaang ibayo manaan, mandaan, tigsandaan, sanda-sandaan, sandaanan daan sasandaan ikaraan, ikasandaan, saikaraan, saikasandaan 100 (bilang)
200 dalawang daan dosyentos ikadalawang daan, pandalawang daan ika-200, pang-200
300 tatlong daan tresyentos ikatatlong daan, pantatlong daan ika-300, pang-300
400 apatnaraan kuwatrosiyentos ikaapatnaraan, pang-apatnaraan ika-400, pang-400
500 limang daan kinyentos ikalimang daan, panlimang daan ika-500, pang-500 makalimang daan limang daang ibayo tiglimang daan, limang daanan, limang-limang daan lilimang daan kalimang daan, sangkalimang daan, ikalimang daan, saikalimang daan
600 animnaraan seissiyentos ikaanimnaraan, pang-animnaraan ika-600, pang-600
700 pitong daan setesiyentos ikapitong daan, pampitong daan ika-700, pang-700
800 walong daan otsosiyentos ikawalong daan, pangwalong daan ika-800, pang-800
900 siyamnaraan nobesiyentos ikasiyamnaraan, pansiyamnaraan ika-900, pang-900
1,000 sanlibo mil ikalibo, panlibo, ikasanlibo, pansanlibo ika-1000, pang-1000 makalibo, makalilibo, makasanlibo sanlibong ibayo libo-libo, panlibo, tigsanlibo, sanlibuhan, sanli-sanlibo libo sasanlibo kasanlibo, sangkasanlibo, ikasanlibo, saikasanlibo 1000 (bilang)
1,100 sanlibo't sandaan mil siyento ikasanlibo't sandaan, pansanlibo't sandaan ika-1100, pang-1100
2,000 dalawang libo dos mil ikadalawang libo, pandalawang libo ika-2000, pang-2000
3,000 tatlong libo tres mil ikatatlong libo, pantatlong libo ika-3000, pang-3000
4,000 apat na libo kuwatro mil ikaapat na libo, pang-apat na libo ika-4000, pang-4000
5,000 limang libo singko mil ikalimang libo, panlimang libo ika-5000, pang-5000
6,000 anim na libo seis mil ikaanim na libo, pang-anim na libo ika-6000, pang-6000
7,000 pitong libo siyete mil ikapitong libo, pampitong libo ika-7000, pang-7000
8,000 walong libo otso mil ikawalong libo, pangwalong libo ika-8000, pang-8000
9,000 siyam na libo nuwebe mil ikasiyam na libo, pansiyam na libo ika-9000, pang-9000
9,999 siyam na libo't siyamnaraan at siyamnapu't siyam nuwebe mil nobesiyentos nobenta y nuwebe ikasiyam na libo't siyamnaraan at siyamnapu't siyam,
pansiyam na libo't siyamnaraan at siyamnapu't siyam
ika-9999, pang-9999
10,000 sampung libo, sanlaksa diyes mil ikasampung libo, pansampung libo, ikalaksa, ikasanlaksa, pansanlaksa ika-10000, pang-10000 laksa 10000 (bilang)
100,000 sandaang libo, sangyuta siyento mil ikasandaang libo, pansandaang libo, ikayuta, pangyuta, ikasangyuta ika-100000, pang-100000 daang libo, yuta 100000 (bilang)
1,000,000 (106) sang-angaw, sang-angaw-angaw, sampung yuta, sanlibong-libo milyon ikasang-angaw, pansang-angaw, ikaangaw,
pang-angaw
, ikasang-angaw-angaw, ikasampung yuta
ika-1000000, pang-1000000 angaw 1000000 (bilang)
10,000,000 (107) sampung angaw, sangkati diyes milyones ikasampung angaw, pansampung angaw,
ikakati
, pangkati, ikasangkati
ika-10000000, pang-10000000 kati
100,000,000 (108) sandaang angaw, sambahala siyento milyones ikasandaang angaw, pansandaang angaw, ikabahala, pangbahala, ikasambahala ika-100000000, pang-100000000 bahala
1,000,000,000 (109) sanlibong-angaw, sanggatos bilyon ikasanlibong-angaw, pansanlibong-angaw, ikagatos, panggatos, ikasanggatos ika-1000000000, pang-1000000000 gatos 1000000000 (bilang)
1012 sang-angaw-na-angaw trilyon ikasang-angaw-na-angaw, pansang-angaw-na-angaw ika-1000000000000, pang-1000000000000 1000000000000 (bilang)

local export = {numbers = {}}

export.additional_number_types = {
	{key = "spanish_cardinal", after = "cardinal"},
	{key = "spanish_ordinal", after = "ordinal"},
	{key = "restrictive", after = "collective"}
}

local lang_tl = "tl"
local lang_es = "es"

local numbers = export.numbers

--- Table operations for simpler use

local function table_merge(t1,t2)
	local merged = {}
    for key, value in pairs(t1) do
        merged[key] = value
    end
    for key, value in pairs(t2) do
    	merged[key] = value
    end
    return merged
end

local function table_append(t1,t2)
	local appended = {}
    for key, value in pairs(t1) do
        table.insert(appended, value)
    end
    for key, value in pairs(t2) do
    	table.insert(appended, value)
    end
    return appended
end

-- canonicalize multiple spaces and remove leading and trailing spaces
local function canon_spaces(text)
	text = text:gsub("%s+", " ")
	text = text:gsub("^ ", "")
	text = text:gsub(" $", "")
	return text
end

-- List down preset names

local number_names = {
	ones = {
		[lang_tl] = {"isa", "dalawa", "tatlo", "apat", "lima", "anim", "pito", "walo", "siyam"},
		[lang_es] = {"uno", "dos", "tres", "kuwatro", "singko", "seis", "siyete", "otso", "nuwebe"}
	},
	tens = {
		[lang_es] = {"diyes", "beynte", "treynta", "kuwarenta", "singkuwenta", "sesenta", "setenta", "otsenta", "nobenta"}
	},
	nteens = {
		[lang_es] = {"onse", "dose", "trese", "katorse", "kinse"}
	},
	hundreds = {
		[lang_tl] = {"sandaan", "dalawang daan", "tatlong daan", "apatnaraan", "limang daan", "animnaraan", "pitong daan", "walong daan", "siyamnaraan"},
		[lang_es] = {"siyento", "dosyentos", "tresyentos", "kuwatrosiyentos", "kinyentos", "seissiyentos", "setesiyentos", "otsosiyentos", "nobesiyentos"} 
	},
	power_10 = {
		[lang_tl] = {"", "pu", "daan", "libo", "laksa", "yuta", "angaw", "kati", "bahala", "libong-angaw", "", "", "angaw-na-angaw"},
		[lang_es] = {"mil", "milyon", "bilyon", "trilyon"}
	},
	ordinals = {
		[lang_es] = {
			{"primero", "primera"},  
			{"segundo", "segunda"}, 
			{"tersero", "tersera"},
			"kuwarta",
			{"kinto", "kinta"},
			nil,
			nil,
			{"oktabo", "oktaba"},
			nil
		}
	}
}

local number_data_preset = {
	[1] = {
		ordinal = {"una", "pang-una", "ikaisa" },
		adverbial = "minsan",
		fractional = "buo"
	},
	[2] = {
		ordinal = {"ikalawa", "pangalawa"},
		adverbial = {{"makalawa"}, "?"},
		fractional = {"kalahati"},
		multiplier = {"doble", "?"}
	},
	[3] = {
		ordinal = {"ikatlo", "ikatatlo", "pangatlo"},
		adverbial = {{"makatlo", "makaitlo"}, "?"},
		fractional = {"katlo", "sangkatlo", "saikatlo"},
		multiplier = {{"triple"}, "?"}
	},
	[4] = {
		adverbial =  {"?", {"makaipat"}},
		fractional = {"kapat", "sangkapat", "saikapat"}
	},
	[6] = {
		fractional = {{"kanim", "sangkanim", "saikanim"}, "?"}
	},
	[10] = {
		ordinal = {{"ikapu"}, "?"},
		fractional = {{"kapu", "ikapu", "saikapu"}, "?"},
		collective = {"pu", "desena"}
	},
	[12] = {
		collective = "dosena"
	},
	[100] = {
		distributive = {"manaan", "mandaan", "tigsandaan", "sanda-sandaan", "sandaanan"},
		fractional = {"ikaraan", "ikasandaan", "saikaraan", "saikasandaan"},
		collective = "daan"
	},
	[10^3] = {
		adverbial = {{"makalibo", "makalilibo"}, "?"},
		ordinal = {{"ikalibo", "panlibo"}, "?"},
		distributive = {{"libo-libo", "panlibo"}, "?"},
		collective = "libo"
	},
	[10^4] = {
		cardinal = {'?', {"sanlaksa"}},
		ordinal = {'?', {"ikalaksa", "ikasanlaksa", "pansanlaksa"}},
		collective = "laksa"
	},
	[10^5] = {
		cardinal = {'?', {"sangyuta"}},
		ordinal = {'?', {"ikayuta", "pangyuta", "ikasangyuta"}},
		collective = {'daang libo', "yuta"}
	},
	[10^6] = {
		cardinal = {'?', {"sang-angaw-angaw", "sampung yuta", "sanlibong-libo"}},
		ordinal = {'?', {"ikaangaw", "<br>pang-angaw", "ikasang-angaw-angaw", "ikasampung yuta"}},
		collective = "angaw"
	},
	[10^7] = {
		cardinal = {'?', {"sangkati"}},
		ordinal = {'?', {"<br>ikakati", "pangkati", "ikasangkati"}},
		collective = "kati"
	},
	[10^8] = {
		cardinal = {'?', {"sambahala"}},
		ordinal = {'?', {"ikabahala", "pangbahala", "ikasambahala"}},
		collective = "bahala"
	},
	[10^9] = {
		cardinal = {'?', {"sanggatos"}},
		ordinal = {'?', {"ikagatos", "panggatos", "ikasanggatos"}},
		collective = "gatos"
	}
}

local affixes = {
	["ordinal"] = {"ika", "pang-"},
	["adverbial"] = {"maka"},
	["grouping"] = {"-an"},
	["distributive"] = {"tig-"},
	["tens"] = {"labing-"},
	["es_tens"] = {"disi"},
	["fractional"] = {"ka", "sangka", "ika", "saika"}
}

local function append_affix(affixes, root, nasal, br)
	affixed_list = {}
	new_root = tostring(root)
	nasal = nasal or "none"

	if type(root) == "number" then
		new_root = '-' .. new_root	
	end
	
	if type(affixes) ~= "table" then
		affixes = { affixes }
	end
	
	for idx, affix in pairs(affixes) do
		if affix:match("^-") then
			-- If affix is a suffix, do the following:
			new_root = new_root:gsub("o$", "u")
			if new_root:match("[aeiou]$") and not new_root:match("pu$") then
				new_root = new_root .. "h"
			end
			table.insert(affixed_list, new_root .. affix:sub(2))
		else
			if affix:match("-$") and not new_root:match("^[aeiou]") then
				-- If affix is a prefix and root is starting with a consonant
				affix = affix:sub(1, -2)
				if nasal ~= "none" then
					affix = affix:gsub("ng$", (new_root:match("^[bp]") and "m") or (new_root:match("^[dlst]") and "n") or "ng")
					if nasal == "total" then
						new_root = new_root:sub(2)
					end
				end
			end
			table.insert(affixed_list, (br and #affixed_list > 0 and "<br>" or '') .. affix .. new_root)
		end
	end
	
	if #affixed_list == 1 then
		affixed_list = affixed_list[1]
	end
	
	return affixed_list
end

local function syllable_rdp(word, rdp_type)
	local words =  mw.text.split(word, " ") -- Multiple word, just apply repetition on the first word
	syll_temp = words[1]
	syll_result = ""
	
	if type(rdp_type) == "number" then
		--Find reduplication
		syll_temp = syll_temp:gsub("([aeiou])", "%1.")
		syll_temp = mw.text.split(syll_temp, "%.")
		
		if not syll_temp[#syll_temp]:match("[aeiou]") then
			syll_temp[#syll_temp-1] = syll_temp[#syll_temp-1] .. syll_temp[#syll_temp]
			table.remove(syll_temp, #syll_temp)
		end
		
		if rdp_type == #syll_temp then
			syll_result = words[1] .. "-"
		elseif rdp_type == 1 then
			syll_result = syll_temp[1]:sub(1,1) .. 	(syll_temp[1]:len() > 1 and  syll_temp[1]:sub(-1,-1) or '') -- Fix clusters
		else
			for i = 1, rdp_type do
				syll_result = syll_result .. syll_temp[i] or ""	
			end
			syll_result = syll_result .. "-"
		end
	elseif rdp_type == "full" then
		syll_result = words[1] .. "-"
	end
	
	words[1] = syll_result .. words[1]
	return table.concat(words, " ")
end

local function enclitic(word, append, space)
	result = ""
	encl = "ng"
	space = space or " "
	if not word:match("[aeioun]$") then
		result = word .. space .. "na" .. space .. append
	else
		if word:match("n$") then
			encl = "g"
		end
		
		word = word .. encl
		if space == "" then
			local root_replace = (append:match("^[bp]") and "m") or (append:match("^[dlst]") and "n") or "ng"
			word = word:gsub("ong$", "u" .. root_replace)
			word = word:gsub("ng$", root_replace)
		end
		
		result = word .. space .. append
	end
	return result
end

local function make_number(number)
	local num_table = {} 
	if number == 0 then
		num_table =  {
			cardinal = "wala",
			spanish_cardinal = "sero"
		}
	else
		local comma_separated = tostring(number)
		comma_separated = comma_separated:gsub("(%d)(%d%d%d)$", "%1,%2")
		while comma_separated:match("(%d)(%d%d%d)(,)") do
			comma_separated = comma_separated:gsub("(%d)(%d%d%d)(,)", "%1,%2%3")
		end	
		
		local place_values = mw.text.split(comma_separated, ",")
		
		local hundred = 0
		local tens = 0
		local ones = 0
		
		local tl_name = {}
		local es_name = {}
		
		for idx1, temp_places in pairs(place_values) do
			places = tonumber(temp_places)
			
			local thousands_name = {}
			local thousands_name_es = {}
			
			hundreds = places - (places % 100)
			tens_ones = (places % 100)
			tens = (places % 100) - (places % 10)
			ones = (places % 10)
			
			if places ~= 0 then
				values_names = {
					['hundreds'] = {},
					['tens'] = {},
					['ones'] = {}
				}
				
				if hundreds > 0 then
					values_names['hundreds'] = {
						cardinal =  number_names.hundreds[lang_tl][hundreds/100],
						spanish_cardinal =  number_names.hundreds[lang_es][hundreds/100]
					}
				end
				
				if tens_ones > 10 and tens_ones < 20 then
					values_names['ones'] = {
						cardinal = append_affix(affixes["tens"], number_names.ones[lang_tl][ones], "partial"),
						spanish_cardinal = number_names.nteens[lang_es][ones] or affixes["es_tens"][1] .. number_names.ones[lang_es][ones]
					}
				else
					if tens > 0 then
						if tens == 10 then
							num_param = append_affix("sang-", number_names.power_10[lang_tl][2], "partial")
						else
							num_param = enclitic(number_names.ones[lang_tl][tens/10], number_names.power_10[lang_tl][2], "")
						end
						
						values_names['tens'] = {
							cardinal = num_param,
							spanish_cardinal = number_names.tens[lang_es][tens/10],
						}
					end
					if ones > 0 then
						values_names['ones'] = 	{
							cardinal = number_names.ones[lang_tl][ones],
							spanish_cardinal = number_names.ones[lang_es][ones],
							spanish_ordinal = number_names.ordinals[lang_es][ones],
						}
					end
				end
				
				-- Build final name
				for idx2, key in pairs({'hundreds', 'tens', 'ones'}) do
					if values_names[key].cardinal ~= nil then
						table.insert(thousands_name, values_names[key].cardinal)
					end
					if values_names[key].spanish_cardinal ~= nil then
						table.insert(thousands_name_es, values_names[key].spanish_cardinal)
						if key == "tens" and tens >= 30 and ones > 0 then
							table.insert(thousands_name_es, "y")
						end
					end
				end
				
				table.insert(tl_name, table.concat(thousands_name, " at "))
				table.insert(es_name, table.concat(thousands_name_es, " "))
				
				if (idx1 < #place_values) and (#place_values > 1) then
					local place_distance = #place_values-idx1

					if tl_name[#tl_name] == "isa" then
						tl_name[#tl_name] =  append_affix("sang-", number_names.power_10[lang_tl][(3*place_distance)+1], "partial")
					else
						tl_name[#tl_name] = enclitic(tl_name[#tl_name], number_names.power_10[lang_tl][(3*place_distance)+1])
					end
					
					if es_name[#es_name] == "uno" then
						es_name[#es_name] = number_names.power_10[lang_es][place_distance]
					else
						table.insert(es_name, number_names.power_10[lang_es][place_distance])
						if place_distance > 1 then
							es_name[#es_name] = es_name[#es_name] .. "es"
						end
					end
				end
			end
			
			num_table = {
				cardinal = canon_spaces(table.concat(tl_name, " at ")),
				spanish_cardinal = canon_spaces(table.concat(es_name, " ")),
				spanish_ordinal = number < 10 and number_names.ordinals[lang_es][ones] or nil
			}
		end
	end
	num_table.cardinal =  num_table.cardinal:gsub("([aeiou]) (at)", "%1't")
	return num_table
end

-- Start list process

local number = 0

while (true) do
	local data = make_number(number)
	if number ~= 0 then
		local cardinal_num = data.cardinal
		data = table_merge(data, {
			ordinal = append_affix(affixes["ordinal"], cardinal_num, "partial", number == 9999),
			ordinal_abbr = append_affix(affixes["ordinal"], number, "partial"),
		})
		
		local limitation = require("Module:table").contains({
			number <= 21, 
			number % 10 == 0 and number <= 100,
			number == 99,
			number % 500 == 0 and number <= 1000
		}, true)
		if limitation then
			-- Limit the following data only to certain numbers for a cleaner table
			data = table_merge(data, {
				adverbial = append_affix(affixes["adverbial"], cardinal_num),
				multiplier =  ("[[" .. cardinal_num .. "|" .. canon_spaces(enclitic(cardinal_num, "")) .. "]] [[ibayo]]"),
				distributive = {
					append_affix(affixes["distributive"], cardinal_num),
					append_affix(affixes["grouping"], cardinal_num),
					syllable_rdp(cardinal_num, 2), 
				},
				restrictive = syllable_rdp(cardinal_num, 1),
				fractional = append_affix(affixes["fractional"], cardinal_num)
			})
			data.multiplier = data.multiplier:gsub(" na]]", "]] [[na]]")
		end
		
		if (number <= 20) or 
			(tostring(number):gsub("0", ""):len() == 1 and
			(number <= 10^6 and (number % 1000 and tostring(number):gsub("0", "") == "1") or math.log10(number) % 3 == 0)
		) then
			data.wplink = number .. " (bilang)"
		end
	
		local preset = number_data_preset[number]
		if preset then
			for num_type, num_vals in pairs(preset) do
				if type(preset[num_type]) == "table" then
					local new_preset_list = {}
					for index, value in pairs(preset[num_type]) do
						local insert_value = value
						if insert_value == "?" and data[num_type] then
							if type(data[num_type]) == "string" then
								data[num_type] = {data[num_type]}	
							end
							insert_value = data[num_type]
						end
						if type(insert_value) == "string" then
							insert_value = {insert_value}	
						end
						if number == 10 and num_type == "fractional" then
							insert_value[1] = "<br>" .. insert_value[1]
						end
						new_preset_list = table_append(new_preset_list, insert_value)
					end
					preset[num_type] = new_preset_list
				end
			end
			data = table_merge(data, preset)
		end
	end
	
	-- Set data to export
	numbers[number] = data
	
	if number < 100 or number == 9999 then
		number = number + 1
	elseif number <= 1100 then
		if number == 1100 then
			number = 2000
		else
			number = number + 100
		end
	elseif number < 10^4 then
		number = number + 1000
		if number == 10^4 then
			number = 9999
		end
	elseif number < 10^9 then
		number = number * 10
	elseif number < 10^12 then
		number = number * 10^3
	else
		break
	end
end

return export