„Modul:aewi.WortstrukturMarkerEntfernen“ – Versionsunterschied
Erscheinungsbild
Die Seite wurde neu angelegt: „local p = {} function p.main(frame) local richtung = mw.text.trim(frame.args[1] or 'and') local anzahl = tonumber(mw.text.trim(frame.args[2] or '1')) or 1 anzahl = math.max(0, math.floor(anzahl)) local name = mw.title.getCurrentTitle().text local laenge = mw.ustring.len(name) if anzahl == 0 then return name end if anzahl >= laenge then return '' end if richtung == 'end' then return mw.ustring.sub(name, 1, laenge - anzahl) end retu…“ |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
-- Zeichen, 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) | |||
-- Beispielsweise ä in a + kombinierte Umlautpunkte zerlegen. | |||
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 | |||
function p.main(frame) | function p.main(frame) | ||
local richtung = mw.text.trim(frame.args[1] or 'and') | |||
local anzahl = tonumber(mw.text.trim(frame.args[2] or '1')) or 1 | |||
local modus = mw.text.trim(frame.args[3] or '') | |||
anzahl = math.max(0, math.floor(anzahl)) | |||
local name = mw.title.getCurrentTitle().text | |||
local laenge = mw.ustring.len(name) | |||
local ergebnis | |||
if anzahl == 0 then | |||
ergebnis = name | |||
elseif anzahl >= laenge then | |||
ergebnis = '' | |||
elseif richtung == 'end' then | |||
ergebnis = mw.ustring.sub(name, 1, laenge - anzahl) | |||
else | |||
ergebnis = mw.ustring.sub(name, anzahl + 1) | |||
end | |||
if modus == 'sort' then | |||
ergebnis = grundbuchstaben(ergebnis) | |||
end | |||
return ergebnis | |||
end | end | ||
return p | return p | ||
Aktuelle Version vom 22. August 2026, 15:16 Uhr
Die Dokumentation für dieses Modul kann unter Modul:aewi.WortstrukturMarkerEntfernen/Doku erstellt werden
local p = {}
-- Zeichen, 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)
-- Beispielsweise ä in a + kombinierte Umlautpunkte zerlegen.
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
function p.main(frame)
local richtung = mw.text.trim(frame.args[1] or 'and')
local anzahl = tonumber(mw.text.trim(frame.args[2] or '1')) or 1
local modus = mw.text.trim(frame.args[3] or '')
anzahl = math.max(0, math.floor(anzahl))
local name = mw.title.getCurrentTitle().text
local laenge = mw.ustring.len(name)
local ergebnis
if anzahl == 0 then
ergebnis = name
elseif anzahl >= laenge then
ergebnis = ''
elseif richtung == 'end' then
ergebnis = mw.ustring.sub(name, 1, laenge - anzahl)
else
ergebnis = mw.ustring.sub(name, anzahl + 1)
end
if modus == 'sort' then
ergebnis = grundbuchstaben(ergebnis)
end
return ergebnis
end
return p