This module contains data on various types of numbers in เยอรมันสูงกลาง.

จำนวน เชิงการนับ เชิงอันดับที่
1 ein ērste
2 zwēne ander
3 drī dritte
4 vier vierde
5 fünf fünfte
6 sëhs sëhste
7 siben sibende, sibte
8 ahte ahtede, ahte
9 niun niunde
10 zëhen zëhende
11 einlif einlifde
12 zwelf zwelfde
13 drīzëhen drīzëhende
14 vierzëhen vierzëhende
15 fünfzëhen fünfzëhende
16 sëhszëhen sëhszëhende
17 sibenzëhen sibenzëhende
18 ahtzëhen ahtzëhende
19 niunzëhen niunzëhende
20 zweinzic zweinzigeste
21 ein und zweinzic ein und zweinzigeste
22 zwēne und zweinzic zwēne und zweinzigeste
23 drī und zweinzic drī und zweinzigeste
24 vier und zweinzic vier und zweinzigeste
25 fünf und zweinzic fünf und zweinzigeste
26 sëhs und zweinzic sëhs und zweinzigeste
27 siben und zweinzic siben und zweinzigeste
28 ahte und zweinzic ahte und zweinzigeste
29 niun und zweinzic niun und zweinzigeste
30 drīȥic drīȥigeste
31 ein und drīȥic ein und drīȥigeste
32 zwēne und drīȥic zwēne und drīȥigeste
33 drī und drīȥic drī und drīȥigeste
34 vier und drīȥic vier und drīȥigeste
35 fünf und drīȥic fünf und drīȥigeste
36 sëhs und drīȥic sëhs und drīȥigeste
37 siben und drīȥic siben und drīȥigeste
38 ahte und drīȥic ahte und drīȥigeste
39 niun und drīȥic niun und drīȥigeste
40 vierzic vierzigeste
41 ein und vierzic ein und vierzigeste
42 zwēne und vierzic zwēne und vierzigeste
43 drī und vierzic drī und vierzigeste
44 vier und vierzic vier und vierzigeste
45 fünf und vierzic fünf und vierzigeste
46 sëhs und vierzic sëhs und vierzigeste
47 siben und vierzic siben und vierzigeste
48 ahte und vierzic ahte und vierzigeste
49 niun und vierzic niun und vierzigeste
50 fünfzic fünfzigeste
51 ein und fünfzic ein und fünfzigeste
52 zwēne und fünfzic zwēne und fünfzigeste
53 drī und fünfzic drī und fünfzigeste
54 vier und fünfzic vier und fünfzigeste
55 fünf und fünfzic fünf und fünfzigeste
56 sëhs und fünfzic sëhs und fünfzigeste
57 siben und fünfzic siben und fünfzigeste
58 ahte und fünfzic ahte und fünfzigeste
59 niun und fünfzic niun und fünfzigeste
60 sëhszic sëhszigeste
61 ein und sëhszic ein und sëhszigeste
62 zwēne und sëhszic zwēne und sëhszigeste
63 drī und sëhszic drī und sëhszigeste
64 vier und sëhszic vier und sëhszigeste
65 fünf und sëhszic fünf und sëhszigeste
66 sëhs und sëhszic sëhs und sëhszigeste
67 siben und sëhszic siben und sëhszigeste
68 ahte und sëhszic ahte und sëhszigeste
69 niun und sëhszic niun und sëhszigeste
70 sibenzic sibenzigeste
71 ein und sibenzic ein und sibenzigeste
72 zwēne und sibenzic zwēne und sibenzigeste
73 drī und sibenzic drī und sibenzigeste
74 vier und sibenzic vier und sibenzigeste
75 fünf und sibenzic fünf und sibenzigeste
76 sëhs und sibenzic sëhs und sibenzigeste
77 siben und sibenzic siben und sibenzigeste
78 ahte und sibenzic ahte und sibenzigeste
79 niun und sibenzic niun und sibenzigeste
80 ahtzic ahtzigeste
81 ein und ahtzic ein und ahtzigeste
82 zwēne und ahtzic zwēne und ahtzigeste
83 drī und ahtzic drī und ahtzigeste
84 vier und ahtzic vier und ahtzigeste
85 fünf und ahtzic fünf und ahtzigeste
86 sëhs und ahtzic sëhs und ahtzigeste
87 siben und ahtzic siben und ahtzigeste
88 ahte und ahtzic ahte und ahtzigeste
89 niun und ahtzic niun und ahtzigeste
90 niunzic niunzigeste
91 ein und niunzic ein und niunzigeste
92 zwēne und niunzic zwēne und niunzigeste
93 drī und niunzic drī und niunzigeste
94 vier und niunzic vier und niunzigeste
95 fünf und niunzic fünf und niunzigeste
96 sëhs und niunzic sëhs und niunzigeste
97 siben und niunzic siben und niunzigeste
98 ahte und niunzic ahte und niunzigeste
99 niun und niunzic niun und niunzigeste
100 hundert, zëhenzic hundertste, zëhenzigeste
200 zwei hundert, zwei hunt zwei hundertste, zwei huntste
300 driu hundert, driu hunt driu hundertste, driu huntste
400 vier hundert, vier hunt vier hundertste, vier huntste
500 fünf hundert, fünf hunt fünf hundertste, fünf huntste
600 sëhs hundert, sëhs hunt sëhs hundertste, sëhs huntste
700 siben hundert, siben hunt siben hundertste, siben huntste
800 ahte hundert, ahte hunt ahte hundertste, ahte huntste
900 niun hundert, niun hunt niun hundertste, niun huntste
1,000 tūsent tūsentste
2,000 zwei tūsent zwei tūsentste
3,000 driu tūsent driu tūsentste
4,000 vier tūsent vier tūsentste
5,000 fünf tūsent fünf tūsentste
6,000 sëhs tūsent sëhs tūsentste
7,000 siben tūsent siben tūsentste
8,000 ahte tūsent ahte tūsentste
9,000 niun tūsent niun tūsentste

local export = {numbers = {}}

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

local numbers = export.numbers

local lcfirst = function(text) return mw.getContentLanguage():lcfirst(text) end
local ucfirst = function(text) return mw.getContentLanguage():ucfirst(text) end

local function add_ordinal_suffix(num, term)
	term = lcfirst(term):gsub("c$", "ge")
	if type(num) == "number" and num < 20 then
		return term .. "de"
	else
		return term .. "ste"
	end
end

local function make_number(num, props, card_base)
	local numstr = m_numutils.format_fixed(num)

	card_base = card_base or props.cardinal
	props.ordinal = props.ordinal or map(function(card) return add_ordinal_suffix(num, card) end, card_base)
	props.ordinal_abbr = ordinal_abbr
	if props.fractional == true then
		props.fractional = map(function(ord) return ucfirst(ord) .. "l" end, props.ordinal)
	end
	if props.sequence_adverb == true then
		props.sequence_adverb = map(function(ord) return ord .. "ns" end, props.ordinal)
	end

	numbers[num] = props
end

make_number(1, {
	cardinal = "ein",
	ordinal = "ērste",
}, "ein")
make_number(2, {
	cardinal = "zwēne",
	ordinal = "ander",
})

-- Do numbers 3 through 12.
for i, cardinal in ipairs { "drī", "vier", "fünf", "sëhs", "siben", "ahte", "niun", "zëhen", "einlif", "zwelf" } do
	local num = i + 2
	local ordinal
	if num == 3 then
		ordinal = "dritte"
	elseif num == 5 then
		ordinal = "fünfte"
	elseif num == 6 then
		ordinal = "sëhste"
	elseif num == 7 then
		ordinal = {"sibende", "sibte"}
	elseif num == 8 then
		ordinal = {"ahtede", "ahte"}
	else
		ordinal = cardinal .. "de"
	end
	make_number(num, {
		cardinal = cardinal,
		ordinal = ordinal,
	})
end

-- Do numbers 13 through 19.
for i, teen in ipairs {
	"drīzëhen", "vierzëhen", "fünfzëhen", "sëhszëhen", "sibenzëhen", "ahtzëhen", "niunzëhen"
} do
	local num = i + 12
	make_number(num, {
		cardinal = teen,
	})
end

-- Do numbers 20 through 99.
for i, tens_cardinal in ipairs {
	"zweinzic", "drīȥic", "vierzic", "fünfzic",
	"sëhszic", "sibenzic", "ahtzic", "niunzic",
} do
	local tens = (i + 1) * 10
	for ones = 0, 9 do
		local num = tens + ones
		local ones_prefix
		if ones == 0 then
			ones_prefix = ""
		else
			ones_prefix = numbers[ones].cardinal .. " und "
		end
		local cardinal = map(function(tens_card) return ones_prefix .. tens_card end, tens_cardinal)
		make_number(num, {
			cardinal = cardinal,
		})
	end
end

make_number(100, {
	cardinal = {"hundert", "zëhenzic"},
	ordinal = {"hundertste", "zëhenzigeste"},
}, "hundert")

make_number(200, {
	cardinal = {"zwei hundert", "zwei hunt"},
})

make_number(300, {
	cardinal = {"driu hundert", "driu hunt"},
})

-- Do numbers 200 through 900 by 100.
for i=400, 900, 100 do
	make_number(i, {
		cardinal = {numbers[i / 100].cardinal .. " hundert", numbers[i / 100].cardinal .. " hunt"},
	})
end

make_number(1000, {
	cardinal = "tūsent",
}, "tūsent")

make_number(2000, {
	cardinal = "zwei tūsent",
})

make_number(3000, {
	cardinal = "driu tūsent",
})

local function make_large_number(num, cardinal, card_base)
	make_number(num, {
		cardinal = cardinal,
	}, card_base)
end

-- Do numbers 2000 through 9000 by 1000.
for i=4000, 9000, 1000 do
	make_large_number(i, numbers[i / 1000].cardinal .. " tūsent")
end

return export