This module contains data on various types of numbers in กาลิเซีย.

จำนวน เชิงการนับ เชิงอันดับที่ ตัวย่อเชิงอันดับที่ ตัวคูณ เศษส่วน (⅟…) Wikipedia link
0 standard: cero
reintegrationist: zero
cero
1 standard / masculine: un
standard / feminine: unha
reintegrationist / masculine: um
reintegrationist / feminine: umha, uma
primeiro un
2 masculine: dous
standard / feminine: dúas
reintegrationist / feminine: duas
segundo standard: (noun) dobre
(default): (adjective) duplo
reintegrationist: (noun) dobro
standard: (adjective) medio
reintegrationist: (adjective) meio
(default): (noun) metade
dous
3 standard: tres
reintegrationist: três
terceiro triplo standard: terzo
reintegrationist: terço
tres
4 standard: catro
reintegrationist: quatro
standard: cuarto
reintegrationist: quarto
standard: cuádruplo
reintegrationist: quádruplo
catro
5 cinco quinto quíntuplo cinco
6 seis sexto standard: séxtuplo
reintegrationist: sêxtuplo
seis
7 sete sétimo séptuplo sete
8 oito oitavo óctuplo oito
9 nove standard: noveno
reintegrationist: nono
nónuplo nove
10 dez décimo 10º décuplo dez
11 standard: once
reintegrationist: onze
undécimo, décimo primeiro 11º standard: onceavo
reintegrationist: onze avos
12 standard: doce
reintegrationist: doze
duodécimo, décimo segundo 12º standard: doceavo
reintegrationist: doze avos
13 standard: trece
reintegrationist: treze
décimo terceiro 13º standard: treceavo
reintegrationist: treze avos
14 standard: catorce
reintegrationist: catorze
standard: décimo cuarto
reintegrationist: décimo quarto
14º standard: catorceavo
reintegrationist: catorze avos
15 standard: quince
reintegrationist: quinze
décimo quinto 15º standard: quinceavo
reintegrationist: quinze avos
16 standard: dezaseis
reintegrationist: dezasseis
décimo sexto 16º standard: dezaseisavo
reintegrationist: dezasseis avos
17 standard: dezasete
reintegrationist: dezassete
décimo sétimo 17º standard: dezaseteavo
reintegrationist: dezassete avos
18 standard: dezaoito
reintegrationist: dezoito
décimo oitavo 18º standard: dezaoitoavo
reintegrationist: dezoito avos
19 dezanove standard: décimo noveno
reintegrationist: décimo nono
19º standard: dezanoveavo
reintegrationist: dezanove avos
20 vinte standard: vixésimo
reintegrationist: vigésimo
20º standard: vinteavo
reintegrationist: vinte avos
21 standard / masculine: vinte e un
standard / feminine: vinte e unha
reintegrationist / masculine: vinte e um
reintegrationist / feminine: vinte e umha, vinte e uma
standard: vixésimo primeiro
reintegrationist: vigésimo primeiro
21º standard: vinte e unavo
reintegrationist: vinte e um avos
22 masculine: vinte e dous
standard / feminine: vinte e dúas
reintegrationist / feminine: vinte e duas
standard: vixésimo segundo
reintegrationist: vigésimo segundo
22º standard: vinte e dousavo
reintegrationist: vinte e dous avos
23 standard: vinte e tres
reintegrationist: vinte e três
standard: vixésimo terceiro
reintegrationist: vigésimo terceiro
23º standard: vinte e tresavo
reintegrationist: vinte e três avos
24 standard: vinte e catro
reintegrationist: vinte e quatro
standard: vixésimo cuarto
reintegrationist: vigésimo quarto
24º standard: vinte e catroavo
reintegrationist: vinte e quatro avos
25 vinte e cinco standard: vixésimo quinto
reintegrationist: vigésimo quinto
25º standard: vinte e cincoavo
reintegrationist: vinte e cinco avos
26 vinte e seis standard: vixésimo sexto
reintegrationist: vigésimo sexto
26º standard: vinte e seisavo
reintegrationist: vinte e seis avos
27 vinte e sete standard: vixésimo sétimo
reintegrationist: vigésimo sétimo
27º standard: vinte e seteavo
reintegrationist: vinte e sete avos
28 vinte e oito standard: vixésimo oitavo
reintegrationist: vigésimo oitavo
28º standard: vinte e oitoavo
reintegrationist: vinte e oito avos
29 vinte e nove standard: vixésimo noveno
reintegrationist: vigésimo nono
29º standard: vinte e noveavo
reintegrationist: vinte e nove avos
30 trinta standard: trixésimo
reintegrationist: trigésimo
30º standard: trintaavo
reintegrationist: trinta avos
31 standard / masculine: trinta e un
standard / feminine: trinta e unha
reintegrationist / masculine: trinta e um
reintegrationist / feminine: trinta e umha, trinta e uma
standard: trixésimo primeiro
reintegrationist: trigésimo primeiro
31º standard: trinta e unavo
reintegrationist: trinta e um avos
32 masculine: trinta e dous
standard / feminine: trinta e dúas
reintegrationist / feminine: trinta e duas
standard: trixésimo segundo
reintegrationist: trigésimo segundo
32º standard: trinta e dousavo
reintegrationist: trinta e dous avos
33 standard: trinta e tres
reintegrationist: trinta e três
standard: trixésimo terceiro
reintegrationist: trigésimo terceiro
33º standard: trinta e tresavo
reintegrationist: trinta e três avos
34 standard: trinta e catro
reintegrationist: trinta e quatro
standard: trixésimo cuarto
reintegrationist: trigésimo quarto
34º standard: trinta e catroavo
reintegrationist: trinta e quatro avos
35 trinta e cinco standard: trixésimo quinto
reintegrationist: trigésimo quinto
35º standard: trinta e cincoavo
reintegrationist: trinta e cinco avos
36 trinta e seis standard: trixésimo sexto
reintegrationist: trigésimo sexto
36º standard: trinta e seisavo
reintegrationist: trinta e seis avos
37 trinta e sete standard: trixésimo sétimo
reintegrationist: trigésimo sétimo
37º standard: trinta e seteavo
reintegrationist: trinta e sete avos
38 trinta e oito standard: trixésimo oitavo
reintegrationist: trigésimo oitavo
38º standard: trinta e oitoavo
reintegrationist: trinta e oito avos
39 trinta e nove standard: trixésimo noveno
reintegrationist: trigésimo nono
39º standard: trinta e noveavo
reintegrationist: trinta e nove avos
40 standard: corenta
reintegrationist: quarenta
standard: cuadraxésimo
reintegrationist: quadragésimo
40º standard: corentaavo
reintegrationist: quarenta avos
41 standard / masculine: corenta e un
standard / feminine: corenta e unha
reintegrationist / masculine: quarenta e um
reintegrationist / feminine: quarenta e umha, quarenta e uma
standard: cuadraxésimo primeiro
reintegrationist: quadragésimo primeiro
41º standard: corenta e unavo
reintegrationist: quarenta e um avos
42 standard / masculine: corenta e dous
standard / feminine: corenta e dúas
reintegrationist / masculine: quarenta e dous
reintegrationist / feminine: quarenta e duas
standard: cuadraxésimo segundo
reintegrationist: quadragésimo segundo
42º standard: corenta e dousavo
reintegrationist: quarenta e dous avos
43 standard: corenta e tres
reintegrationist: quarenta e três
standard: cuadraxésimo terceiro
reintegrationist: quadragésimo terceiro
43º standard: corenta e tresavo
reintegrationist: quarenta e três avos
44 standard: corenta e catro
reintegrationist: quarenta e quatro
standard: cuadraxésimo cuarto
reintegrationist: quadragésimo quarto
44º standard: corenta e catroavo
reintegrationist: quarenta e quatro avos
45 standard: corenta e cinco
reintegrationist: quarenta e cinco
standard: cuadraxésimo quinto
reintegrationist: quadragésimo quinto
45º standard: corenta e cincoavo
reintegrationist: quarenta e cinco avos
46 standard: corenta e seis
reintegrationist: quarenta e seis
standard: cuadraxésimo sexto
reintegrationist: quadragésimo sexto
46º standard: corenta e seisavo
reintegrationist: quarenta e seis avos
47 standard: corenta e sete
reintegrationist: quarenta e sete
standard: cuadraxésimo sétimo
reintegrationist: quadragésimo sétimo
47º standard: corenta e seteavo
reintegrationist: quarenta e sete avos
48 standard: corenta e oito
reintegrationist: quarenta e oito
standard: cuadraxésimo oitavo
reintegrationist: quadragésimo oitavo
48º standard: corenta e oitoavo
reintegrationist: quarenta e oito avos
49 standard: corenta e nove
reintegrationist: quarenta e nove
standard: cuadraxésimo noveno
reintegrationist: quadragésimo nono
49º standard: corenta e noveavo
reintegrationist: quarenta e nove avos
50 standard: cincuenta
reintegrationist: cinqüenta, cinquenta
standard: quincuaxésimo
reintegrationist: qüinquagésimo, quinquagésimo
50º standard: cincuentaavo
reintegrationist: cinqüenta avos, cinquenta avos
51 standard / masculine: cincuenta e un
standard / feminine: cincuenta e unha
reintegrationist / masculine: cinqüenta e um, cinquenta e um
reintegrationist / feminine: cinqüenta e umha, cinquenta e umha, cinqüenta e uma, cinquenta e uma
standard: quincuaxésimo primeiro
reintegrationist: qüinquagésimo primeiro, quinquagésimo primeiro
51º standard: cincuenta e unavo
reintegrationist: cinqüenta e um avos, cinquenta e um avos
52 standard / masculine: cincuenta e dous
standard / feminine: cincuenta e dúas
reintegrationist / masculine: cinqüenta e dous, cinquenta e dous
reintegrationist / feminine: cinqüenta e duas, cinquenta e duas
standard: quincuaxésimo segundo
reintegrationist: qüinquagésimo segundo, quinquagésimo segundo
52º standard: cincuenta e dousavo
reintegrationist: cinqüenta e dous avos, cinquenta e dous avos
53 standard: cincuenta e tres
reintegrationist: cinqüenta e três, cinquenta e três
standard: quincuaxésimo terceiro
reintegrationist: qüinquagésimo terceiro, quinquagésimo terceiro
53º standard: cincuenta e tresavo
reintegrationist: cinqüenta e três avos, cinquenta e três avos
54 standard: cincuenta e catro
reintegrationist: cinqüenta e quatro, cinquenta e quatro
standard: quincuaxésimo cuarto
reintegrationist: qüinquagésimo quarto, quinquagésimo quarto
54º standard: cincuenta e catroavo
reintegrationist: cinqüenta e quatro avos, cinquenta e quatro avos
55 standard: cincuenta e cinco
reintegrationist: cinqüenta e cinco, cinquenta e cinco
standard: quincuaxésimo quinto
reintegrationist: qüinquagésimo quinto, quinquagésimo quinto
55º standard: cincuenta e cincoavo
reintegrationist: cinqüenta e cinco avos, cinquenta e cinco avos
56 standard: cincuenta e seis
reintegrationist: cinqüenta e seis, cinquenta e seis
standard: quincuaxésimo sexto
reintegrationist: qüinquagésimo sexto, quinquagésimo sexto
56º standard: cincuenta e seisavo
reintegrationist: cinqüenta e seis avos, cinquenta e seis avos
57 standard: cincuenta e sete
reintegrationist: cinqüenta e sete, cinquenta e sete
standard: quincuaxésimo sétimo
reintegrationist: qüinquagésimo sétimo, quinquagésimo sétimo
57º standard: cincuenta e seteavo
reintegrationist: cinqüenta e sete avos, cinquenta e sete avos
58 standard: cincuenta e oito
reintegrationist: cinqüenta e oito, cinquenta e oito
standard: quincuaxésimo oitavo
reintegrationist: qüinquagésimo oitavo, quinquagésimo oitavo
58º standard: cincuenta e oitoavo
reintegrationist: cinqüenta e oito avos, cinquenta e oito avos
59 standard: cincuenta e nove
reintegrationist: cinqüenta e nove, cinquenta e nove
standard: quincuaxésimo noveno
reintegrationist: qüinquagésimo nono, quinquagésimo nono
59º standard: cincuenta e noveavo
reintegrationist: cinqüenta e nove avos, cinquenta e nove avos
60 standard: sesenta
reintegrationist: sessenta
standard: sesaxésimo
reintegrationist: sexagésimo
60º standard: sesentaavo
reintegrationist: sessenta avos
61 standard / masculine: sesenta e un
standard / feminine: sesenta e unha
reintegrationist / masculine: sessenta e um
reintegrationist / feminine: sessenta e umha, sessenta e uma
standard: sesaxésimo primeiro
reintegrationist: sexagésimo primeiro
61º standard: sesenta e unavo
reintegrationist: sessenta e um avos
62 standard / masculine: sesenta e dous
standard / feminine: sesenta e dúas
reintegrationist / masculine: sessenta e dous
reintegrationist / feminine: sessenta e duas
standard: sesaxésimo segundo
reintegrationist: sexagésimo segundo
62º standard: sesenta e dousavo
reintegrationist: sessenta e dous avos
63 standard: sesenta e tres
reintegrationist: sessenta e três
standard: sesaxésimo terceiro
reintegrationist: sexagésimo terceiro
63º standard: sesenta e tresavo
reintegrationist: sessenta e três avos
64 standard: sesenta e catro
reintegrationist: sessenta e quatro
standard: sesaxésimo cuarto
reintegrationist: sexagésimo quarto
64º standard: sesenta e catroavo
reintegrationist: sessenta e quatro avos
65 standard: sesenta e cinco
reintegrationist: sessenta e cinco
standard: sesaxésimo quinto
reintegrationist: sexagésimo quinto
65º standard: sesenta e cincoavo
reintegrationist: sessenta e cinco avos
66 standard: sesenta e seis
reintegrationist: sessenta e seis
standard: sesaxésimo sexto
reintegrationist: sexagésimo sexto
66º standard: sesenta e seisavo
reintegrationist: sessenta e seis avos
67 standard: sesenta e sete
reintegrationist: sessenta e sete
standard: sesaxésimo sétimo
reintegrationist: sexagésimo sétimo
67º standard: sesenta e seteavo
reintegrationist: sessenta e sete avos
68 standard: sesenta e oito
reintegrationist: sessenta e oito
standard: sesaxésimo oitavo
reintegrationist: sexagésimo oitavo
68º standard: sesenta e oitoavo
reintegrationist: sessenta e oito avos
69 standard: sesenta e nove
reintegrationist: sessenta e nove
standard: sesaxésimo noveno
reintegrationist: sexagésimo nono
69º standard: sesenta e noveavo
reintegrationist: sessenta e nove avos
70 setenta standard: septuaxésimo
reintegrationist: septuagésimo
70º standard: setentaavo
reintegrationist: setenta avos
71 standard / masculine: setenta e un
standard / feminine: setenta e unha
reintegrationist / masculine: setenta e um
reintegrationist / feminine: setenta e umha, setenta e uma
standard: septuaxésimo primeiro
reintegrationist: septuagésimo primeiro
71º standard: setenta e unavo
reintegrationist: setenta e um avos
72 masculine: setenta e dous
standard / feminine: setenta e dúas
reintegrationist / feminine: setenta e duas
standard: septuaxésimo segundo
reintegrationist: septuagésimo segundo
72º standard: setenta e dousavo
reintegrationist: setenta e dous avos
73 standard: setenta e tres
reintegrationist: setenta e três
standard: septuaxésimo terceiro
reintegrationist: septuagésimo terceiro
73º standard: setenta e tresavo
reintegrationist: setenta e três avos
74 standard: setenta e catro
reintegrationist: setenta e quatro
standard: septuaxésimo cuarto
reintegrationist: septuagésimo quarto
74º standard: setenta e catroavo
reintegrationist: setenta e quatro avos
75 setenta e cinco standard: septuaxésimo quinto
reintegrationist: septuagésimo quinto
75º standard: setenta e cincoavo
reintegrationist: setenta e cinco avos
76 setenta e seis standard: septuaxésimo sexto
reintegrationist: septuagésimo sexto
76º standard: setenta e seisavo
reintegrationist: setenta e seis avos
77 setenta e sete standard: septuaxésimo sétimo
reintegrationist: septuagésimo sétimo
77º standard: setenta e seteavo
reintegrationist: setenta e sete avos
78 setenta e oito standard: septuaxésimo oitavo
reintegrationist: septuagésimo oitavo
78º standard: setenta e oitoavo
reintegrationist: setenta e oito avos
79 setenta e nove standard: septuaxésimo noveno
reintegrationist: septuagésimo nono
79º standard: setenta e noveavo
reintegrationist: setenta e nove avos
80 oitenta standard: octoxésimo
reintegrationist: octogésimo
80º standard: oitentaavo
reintegrationist: oitenta avos
81 standard / masculine: oitenta e un
standard / feminine: oitenta e unha
reintegrationist / masculine: oitenta e um
reintegrationist / feminine: oitenta e umha, oitenta e uma
standard: octoxésimo primeiro
reintegrationist: octogésimo primeiro
81º standard: oitenta e unavo
reintegrationist: oitenta e um avos
82 masculine: oitenta e dous
standard / feminine: oitenta e dúas
reintegrationist / feminine: oitenta e duas
standard: octoxésimo segundo
reintegrationist: octogésimo segundo
82º standard: oitenta e dousavo
reintegrationist: oitenta e dous avos
83 standard: oitenta e tres
reintegrationist: oitenta e três
standard: octoxésimo terceiro
reintegrationist: octogésimo terceiro
83º standard: oitenta e tresavo
reintegrationist: oitenta e três avos
84 standard: oitenta e catro
reintegrationist: oitenta e quatro
standard: octoxésimo cuarto
reintegrationist: octogésimo quarto
84º standard: oitenta e catroavo
reintegrationist: oitenta e quatro avos
85 oitenta e cinco standard: octoxésimo quinto
reintegrationist: octogésimo quinto
85º standard: oitenta e cincoavo
reintegrationist: oitenta e cinco avos
86 oitenta e seis standard: octoxésimo sexto
reintegrationist: octogésimo sexto
86º standard: oitenta e seisavo
reintegrationist: oitenta e seis avos
87 oitenta e sete standard: octoxésimo sétimo
reintegrationist: octogésimo sétimo
87º standard: oitenta e seteavo
reintegrationist: oitenta e sete avos
88 oitenta e oito standard: octoxésimo oitavo
reintegrationist: octogésimo oitavo
88º standard: oitenta e oitoavo
reintegrationist: oitenta e oito avos
89 oitenta e nove standard: octoxésimo noveno
reintegrationist: octogésimo nono
89º standard: oitenta e noveavo
reintegrationist: oitenta e nove avos
90 noventa standard: nonaxésimo
reintegrationist: nonagésimo
90º standard: noventaavo
reintegrationist: noventa avos
91 standard / masculine: noventa e un
standard / feminine: noventa e unha
reintegrationist / masculine: noventa e um
reintegrationist / feminine: noventa e umha, noventa e uma
standard: nonaxésimo primeiro
reintegrationist: nonagésimo primeiro
91º standard: noventa e unavo
reintegrationist: noventa e um avos
92 masculine: noventa e dous
standard / feminine: noventa e dúas
reintegrationist / feminine: noventa e duas
standard: nonaxésimo segundo
reintegrationist: nonagésimo segundo
92º standard: noventa e dousavo
reintegrationist: noventa e dous avos
93 standard: noventa e tres
reintegrationist: noventa e três
standard: nonaxésimo terceiro
reintegrationist: nonagésimo terceiro
93º standard: noventa e tresavo
reintegrationist: noventa e três avos
94 standard: noventa e catro
reintegrationist: noventa e quatro
standard: nonaxésimo cuarto
reintegrationist: nonagésimo quarto
94º standard: noventa e catroavo
reintegrationist: noventa e quatro avos
95 noventa e cinco standard: nonaxésimo quinto
reintegrationist: nonagésimo quinto
95º standard: noventa e cincoavo
reintegrationist: noventa e cinco avos
96 noventa e seis standard: nonaxésimo sexto
reintegrationist: nonagésimo sexto
96º standard: noventa e seisavo
reintegrationist: noventa e seis avos
97 noventa e sete standard: nonaxésimo sétimo
reintegrationist: nonagésimo sétimo
97º standard: noventa e seteavo
reintegrationist: noventa e sete avos
98 noventa e oito standard: nonaxésimo oitavo
reintegrationist: nonagésimo oitavo
98º standard: noventa e oitoavo
reintegrationist: noventa e oito avos
99 noventa e nove standard: nonaxésimo noveno
reintegrationist: nonagésimo nono
99º standard: noventa e noveavo
reintegrationist: noventa e nove avos
100 standard: (alone or followed by a noun or higher numeral) cen
(default): (followed by a lower numeral) cento
reintegrationist: (alone or followed by a noun or higher numeral) cem
centésimo 100º centésimo
200 standard: douscentos
reintegrationist: duzentos
ducentésimo 200º ducentésimo
300 standard: trescentos
reintegrationist: trezentos
standard: tricentésimo
reintegrationist: trecentésimo
300º standard: tricentésimo
reintegrationist: trecentésimo
400 standard: catrocentos
reintegrationist: quatrocentos
standard: cuadrixentésimo
reintegrationist: quadrigentésimo
400º standard: cuadrixentésimo
reintegrationist: quadrigentésimo
500 standard: cincocentos, quiñentos
reintegrationist: quinhentos
standard: quinxentésimo
reintegrationist: qüingentésimo, quingentésimo
500º standard: quinxentésimo
reintegrationist: qüingentésimo, quingentésimo
600 seiscentos (default): sexcentésimo
reintegrationist: seiscentésimo
600º (default): sexcentésimo
reintegrationist: seiscentésimo
700 setecentos standard: septinxentésimo
reintegrationist: septingentésimo
700º standard: septinxentésimo
reintegrationist: septingentésimo
800 oitocentos standard: octinxentésimo
reintegrationist: octingentésimo
800º standard: octinxentésimo
reintegrationist: octingentésimo
900 novecentos standard: noninxentésimo
reintegrationist: nongentésimo
900º standard: noninxentésimo
reintegrationist: nongentésimo
1,000 mil milésimo 1000º milésimo

local export = {numbers = {}}

local m_numutils = require("Module:number list/utils")
local m_table = require("Module:table")
local map = m_numutils.map
local append = m_numutils.append
local power_of = m_numutils.power_of

local numbers = export.numbers

-- Construct a number given the cardinal(s), ordinal(s), optional local Wikipedia link, and optional fractional.
-- We also add the ordinal abbreviation automatically. If the fractional isn't specified, it defaults to the ordinal
-- if >= 2 and <= 10, otherwise it is constructed from the cardinal by concatenating 'avo' to the cardinal (for the
-- standard norm) or adding 'avos' as a separate word to the cardinal (for the reintegrationist norm). If the value of
-- `fractional` is true, include the ordinal along with the 'avo(s)' variant. All values passed in can be single items
-- or lists.
local function make_number(num, cardinal, ordinal, wplink, fractional)
	local numstr = m_numutils.format_fixed(num)
	local thousands_numstr = #numstr < 10 and m_numutils.add_thousands_separator(numstr, "&nbsp;") or nil
	numbers[num] = {
		cardinal = cardinal,
		ordinal = ordinal,
		ordinal_abbr = thousands_numstr and thousands_numstr .. "º" or nil,
		fractional = fractional,
		wplink = wplink,
	}
end

local standard_ones_cardinal = {
	{"un<tag:masculine>", "unha<tag:feminine>"},
	{"dous<tag:masculine>", "dúas<tag:feminine>"},
	"tres",
	"catro",
	"cinco",
	"seis",
	"sete",
	"oito",
	"nove",
	"dez",
}

local reintegrationist_ones_cardinal = {
	{"um<tag:masculine>", "umha<tag:feminine>", "uma<tag:feminine>"},
	{"dous<tag:masculine>", "duas<tag:feminine>"},
	"três",
	"quatro",
	"cinco",
	"seis",
	"sete",
	"oito",
	"nove",
	"dez",
}

local standard_ones_ordinal = {
	"primeiro",
	"segundo",
	"terceiro",
	"cuarto",
	"quinto",
	"sexto",
	"sétimo",
	"oitavo",
	"noveno",
	"décimo",
}

local reintegrationist_ones_ordinal = {
	"primeiro",
	"segundo",
	"terceiro",
	"quarto",
	"quinto",
	"sexto",
	"sétimo",
	"oitavo",
	"nono",
	"décimo",
}

local standard_ones_multiplier = {
	{},
	{"dobre<q:noun>", "duplo<q:adjective>"},
	"triplo",
	"cuádruplo",
	"quíntuplo",
	"séxtuplo",
	"séptuplo",
	"óctuplo",
	"nónuplo",
	"décuplo",
}

local reintegrationist_ones_multiplier = {
	{},
	{"dobro<q:noun>", "duplo<q:adjective>"},
	"triplo",
	"quádruplo",
	"quíntuplo",
	"sêxtuplo",
	"séptuplo",
	"óctuplo",
	"nónuplo",
	"décuplo",
}

local standard_tens_cardinal = {
	"vinte",
	"trinta",
	"corenta",
	"cincuenta",
	"sesenta",
	"setenta",
	"oitenta",
	"noventa",
}

local reintegrationist_tens_cardinal = {
	"vinte",
	"trinta",
	"quarenta",
	{"cinqüenta", "cinquenta"},
	"sessenta",
	"setenta",
	"oitenta",
	"noventa",
}

local standard_tens_ordinal = {
	"vixésimo",
	"trixésimo",
	"cuadraxésimo",
	"quincuaxésimo",
	"sesaxésimo",
	"septuaxésimo",
	"octoxésimo",
	"nonaxésimo",
}

local reintegrationist_tens_ordinal = {
	"vigésimo",
	"trigésimo",
	"quadragésimo",
	{"qüinquagésimo", "quinquagésimo"},
	"sexagésimo",
	"septuagésimo",
	"octogésimo",
	"nonagésimo",
}

local standard_teens_cardinal = {
	"once",
	"doce",
	"trece",
	"catorce",
	"quince",
	"dezaseis",
	"dezasete",
	"dezaoito",
	"dezanove",
}

local reintegrationist_teens_cardinal = {
	"onze",
	"doze",
	"treze",
	"catorze",
	"quinze",
	"dezasseis",
	"dezassete",
	"dezoito",
	"dezanove",
}

local standard_hundreds_cardinal = {
	{"cen<q:alone or followed by a noun or higher numeral>", "cento<q:followed by a lower numeral>"},
	"douscentos",
	"trescentos",
	"catrocentos",
	{"cincocentos", "quiñentos"},
	"seiscentos",
	"setecentos",
	"oitocentos",
	"novecentos",
}

local reintegrationist_hundreds_cardinal = {
	{"cem<q:alone or followed by a noun or higher numeral>", "cento<q:followed by a lower numeral>"},
	"duzentos",
	"trezentos",
	"quatrocentos",
	"quinhentos",
	"seiscentos",
	"setecentos",
	"oitocentos",
	"novecentos",
}

local standard_hundreds_ordinal = {
	"centésimo",
	"ducentésimo",
	"tricentésimo",
	"cuadrixentésimo",
	"quinxentésimo",
	"sexcentésimo",
	"septinxentésimo",
	"octinxentésimo",
	"noninxentésimo",
}

local reintegrationist_hundreds_ordinal = {
	"centésimo",
	"ducentésimo",
	"trecentésimo",
	"quadrigentésimo",
	{"qüingentésimo", "quingentésimo"},
	{"sexcentésimo", "seiscentésimo"},
	"septingentésimo",
	"octingentésimo",
	"nongentésimo",
}

-- Combine tens values in `tens` with ones values in `ones`, either of which may be a single string or a list.
-- The `ones` values may have tags added for masculine/feminine so we map over them in the outer loop, so we get all
-- masculine followed by all feminine.
local function combine_tens_ones(tens, ones, sep)
	return map(function(one)
		return map(function(ten)
			return ten .. sep .. one
		end, tens)
	end, ones)
end

-- Append the standard and reintegrationist forms for a given number. If a form occurs in both, it should occur
-- once in the output with no tag, otherwise it should be tagged according to the norm.
local function combine_standard_reinteg(standard, reinteg)
	if type(standard) ~= "table" then
		standard = {standard}
	end
	if type(reinteg) ~= "table" then
		reinteg = {reinteg}
	end
	local retval = {}
	local occurs_in_both = {}
	for _, st in ipairs(standard) do
		if m_table.contains(reinteg, st) then
			occurs_in_both[st] = true
			table.insert(retval, st)
		else
			table.insert(retval, st .. "<tag:standard>")
		end
	end
	for _, re in ipairs(reinteg) do
		if not occurs_in_both[re] then
			table.insert(retval, re .. "<tag:reintegrationist>")
		end
	end
	if #retval == 1 then
		return retval[1]
	else
		return retval
	end
end

numbers[0] = {
	cardinal = {"cero<tag:standard>", "zero<tag:reintegrationist>"},
	wplink = "cero",
}

-- Do one through ten
for ones = 1, 10 do
	local num = ones
	local cardinal = combine_standard_reinteg(standard_ones_cardinal[ones], reintegrationist_ones_cardinal[ones])
	local ordinal = combine_standard_reinteg(standard_ones_ordinal[ones], reintegrationist_ones_ordinal[ones])
	local fractional
	if num == 2 then
		fractional = {"medio<q:adjective><tag:standard>", "meio<q:adjective><tag:reintegrationist>", "metade<q:noun>"}
	elseif num == 3 then
		fractional = {"terzo<tag:standard>", "terço<tag:reintegrationist>"}
	else
		-- autogenerated from ordinal
	end
	local wplink
	if num == 1 then
		wplink = "un"
	elseif num == 2 then
		wplink = "dous"
	else
		-- Galician Wikipedia has entries 0 through 10; that's basically it.
		wplink = standard_ones_cardinal[ones]
	end
	make_number(num, cardinal, ordinal, wplink, fractional)
	numbers[num].multiplier =
		combine_standard_reinteg(standard_ones_multiplier[ones], reintegrationist_ones_multiplier[ones])
end

local function make_fractional(standard_cardinal, reintegrationist_cardinal)
	local function remove_feminines(items)
		return map(function(item)
			if item:find("<tag:feminine>") then
				return {}
			else
				return item:gsub("<tag:masculine>", "")
			end
		end,
		items, "include modifiers")
	end
	local standard_form = map(function(card)
		return card .. "avo<tag:standard>"
	end, remove_feminines(standard_cardinal))
	local reinteg_form = map(function(card)
		if not card:find("%[") then
			card = ("[[%s]]"):format(card)
		end
		return ("%s [[avo]]s<tag:reintegrationist>"):format(card)
	end, remove_feminines(reintegrationist_cardinal))
	return append(standard_form, reinteg_form)
end

-- Do 11 through 19
for ones = 1, 9 do
	local num = 10 + ones
	local cardinal = combine_standard_reinteg(standard_teens_cardinal[ones], reintegrationist_teens_cardinal[ones])
	local single_word_ordinal
	if num == 11 then
		single_word_ordinal = "undécimo"
	elseif num == 12 then
		single_word_ordinal = "duodécimo"
	end
	local standard_multi_word_ordinal = map(function(ord) return "décimo " .. ord end, standard_ones_ordinal[ones])
	local reinteg_multi_word_ordinal = map(function(ord) return "décimo " .. ord end, reintegrationist_ones_ordinal[ones])
	local ordinal = combine_standard_reinteg(standard_multi_word_ordinal, reinteg_multi_word_ordinal)
	if single_word_ordinal then
		ordinal = append(single_word_ordinal, ordinal)
	end
	make_number(num, cardinal, ordinal, nil,
		make_fractional(standard_teens_cardinal[ones], reintegrationist_teens_cardinal[ones]))
end

-- Do 20 through 99
for tens_index = 1, 8 do
	local tens = (tens_index + 1) * 10

	local tens_cardinal = combine_standard_reinteg(standard_tens_cardinal[tens_index],
		reintegrationist_tens_cardinal[tens_index])
	local tens_ordinal = combine_standard_reinteg(standard_tens_ordinal[tens_index],
		reintegrationist_tens_ordinal[tens_index])
	make_number(tens, tens_cardinal, tens_ordinal, nil, make_fractional(standard_tens_cardinal[tens_index],
		reintegrationist_tens_cardinal[tens_index]))

	for ones_index = 1, 9 do
		local ones = ones_index
		local num = tens + ones
		local standard_cardinal =
			combine_tens_ones(standard_tens_cardinal[tens_index], standard_ones_cardinal[ones_index], " e ")
		local reintegrationist_cardinal =
			combine_tens_ones(reintegrationist_tens_cardinal[tens_index], reintegrationist_ones_cardinal[ones_index],
				" e ")
		local cardinal = combine_standard_reinteg(standard_cardinal, reintegrationist_cardinal)
		local standard_ordinal =
			combine_tens_ones(standard_tens_ordinal[tens_index], standard_ones_ordinal[ones_index], " ")
		local reintegrationist_ordinal =
			combine_tens_ones(reintegrationist_tens_ordinal[tens_index], reintegrationist_ones_ordinal[ones_index],
				" ")
		local ordinal = combine_standard_reinteg(standard_ordinal, reintegrationist_ordinal)
		make_number(num, cardinal, ordinal, nil, make_fractional(standard_cardinal, reintegrationist_cardinal))
	end
end

-- Do 100 through 900
for ones = 1, 9 do
	local num = 100 * ones
	local cardinal =
		combine_standard_reinteg(standard_hundreds_cardinal[ones], reintegrationist_hundreds_cardinal[ones])
	local ordinal = combine_standard_reinteg(standard_hundreds_ordinal[ones], reintegrationist_hundreds_ordinal[ones])
	make_number(num, cardinal, ordinal, nil, ordinal)
end

make_number(1000, "mil", "milésimo", nil, "milésimo")

return export