Modul:aewi.ZeichenEntfernen
Erscheinungsbild
Die Dokumentation für dieses Modul kann unter Modul:aewi.ZeichenEntfernen/Doku erstellt werden
local p = {}
-- Sonderzeichen, die durch die Unicode-Zerlegung nicht
-- automatisch in Grundbuchstaben zerlegt werden.
local sonderzeichen = {
['ß'] = 'ss',
['ẞ'] = 'SS',
['Æ'] = 'AE',
['æ'] = 'ae',
['Œ'] = 'OE',
['œ'] = 'oe',
['Ø'] = 'O',
['ø'] = 'o',
['Ł'] = 'L',
['ł'] = 'l',
['Đ'] = 'D',
['đ'] = 'd',
['Ð'] = 'D',
['ð'] = 'd',
['Þ'] = 'TH',
['þ'] = 'th'
}
local function istKombinationszeichen(codepoint)
return
(codepoint >= 0x0300 and codepoint <= 0x036F) or
(codepoint >= 0x1AB0 and codepoint <= 0x1AFF) or
(codepoint >= 0x1DC0 and codepoint <= 0x1DFF) or
(codepoint >= 0x20D0 and codepoint <= 0x20FF) or
(codepoint >= 0xFE20 and codepoint <= 0xFE2F)
end
local function grundbuchstaben(text)
text = mw.ustring.toNFD(text) or text
local ergebnis = {}
for codepoint in mw.ustring.gcodepoint(text) do
if not istKombinationszeichen(codepoint) then
local zeichen = mw.ustring.char(codepoint)
table.insert(ergebnis, sonderzeichen[zeichen] or zeichen)
end
end
return table.concat(ergebnis)
end
local function zahlOderStandardwert(wert, standardwert)
local zahl = tonumber(mw.text.trim(wert or ''))
if zahl == nil then
zahl = standardwert
end
return math.max(0, math.floor(zahl))
end
function p.main(frame)
local anfangEntfernen = 0
local endeEntfernen = 0
local sortieren = false
-- Höchste vorhandene numerische Parameternummer ermitteln.
local hoechsterParameter = 0
for schluessel in pairs(frame.args) do
if type(schluessel) == 'number'
and schluessel > hoechsterParameter then
hoechsterParameter = schluessel
end
end
local position = 1
while position <= hoechsterParameter do
local modus = mw.text.trim(frame.args[position] or '')
if modus == 'and' then
anfangEntfernen =
zahlOderStandardwert(frame.args[position + 1], 1)
position = position + 2
elseif modus == 'end' then
endeEntfernen =
zahlOderStandardwert(frame.args[position + 1], 1)
position = position + 2
elseif modus == 'sort' then
sortieren = true
position = position + 1
else
position = position + 1
end
end
local name = mw.title.getCurrentTitle().text
local laenge = mw.ustring.len(name)
local ersterIndex = anfangEntfernen + 1
local letzterIndex = laenge - endeEntfernen
local ergebnis
if ersterIndex > letzterIndex then
ergebnis = ''
else
ergebnis = mw.ustring.sub(
name,
ersterIndex,
letzterIndex
)
end
if sortieren then
ergebnis = grundbuchstaben(ergebnis)
end
return ergebnis
end
return p