Modul:Lautsortierung
Modul:Lautsortierung/Doku
Zweck des Moduls
Dieses Modul erzeugt automatisch einen Sortierschlüssel für deutschsprachige Begriffe auf Basis einer vordefinierten Lauttrennung.
Das Modul dient zur Unterstützung von MediaWiki-Seiten, bei denen eine lautliche Sortierung sinnvoll oder notwendig ist, insbesondere bei der Arbeit mit Semantic MediaWiki (SMW).
Anwendung
1. Lauttrennung angeben
In die Wiki-Seite ist die Lauttrennung manuell einzutragen:
Die Lauttrennung erfolgt durch - getrennte Lautbestandteile.
2. Sortierschlüssel anzeigen lassen
Für die visuelle Kontrolle:
Beispielausgabe:
3. Sortierschlüssel für SMW ausgeben
Zur Verwendung in SMW-Properties oder Vorlagen:
Beispielausgabe:
Funktionsweise
Das Modul arbeitet zweistufig:
| Schritt | Quelle | Beschreibung</thead> |
|---|---|---|
| 1 | SMW-Abfrage | Die Lauttrennung wird über #show aus SMW ausgelesen.
|
| 2 | Fallback | Falls SMW kein Ergebnis liefert, wird der Seitentext (getContent()) direkt durchsucht.
|
Lautersetzung
Die Zuordnung der Lautfolgen zu Sortierzeichen erfolgt über die Seite:
Format:
Debug-Modus
Im Modul kann der Debug-Modus aktiviert werden:
Dann gibt das Modul zusätzlich technische Statusmeldungen aus, um die Verarbeitung sichtbar zu machen.
-- Modul:Lautsortierung (mehrsprachig, mit Sprachstufe)
local p = {}
-- Debug Modus: true = Debug-Ausgabe aktiv, false = keine Debug-Ausgabe
local debugMode = true
-- Hilfsfunktion: Laden der Lautersetzungstabelle aus MediaWiki-Seite
local function ladeSortierzeichentabelle(name)
local seite = mw.title.new(name, "MediaWiki")
if not seite then
return nil, "Seitentitel konnte nicht erstellt werden."
end
local content = seite:getContent() or ""
if content == "" then
return nil, "Seite existiert, aber ist leer."
end
local map = {}
for zeile in content:gmatch("[^\n]+") do
local key, value = zeile:match("^%s*(.-)%s*=%s*(.-)%s*$")
if key and value then
map[key] = value
end
end
return map, nil
end
-- Hilfsfunktion: Sprachcode aus Sprachstufe extrahieren (letztes Element)
local function getSprachcode()
local title = mw.title.getCurrentTitle()
local query = "#show:" .. title.prefixedText .. "|?Sprachstufe="
local result = mw.smw and mw.smw.ask and mw.smw.ask(query)
local stufe = nil
if result and result[1] and result[1]["Sprachstufe"] then
stufe = result[1]["Sprachstufe"]
else
local content = title:getContent() or ""
stufe = content:match("%[%[Sprachstufe::(.-)%]%]")
end
if not stufe then
return nil, "Keine Sprachstufe gefunden."
end
local teile = mw.text.split(stufe, "%-")
return mw.text.trim(teile[#teile]), nil
end
-- Hilfsfunktion: Lauttrennung holen (erst SMW, dann Fallback auf Quelltext)
local function getLauttrennung()
local title = mw.title.getCurrentTitle()
local query = '#show:' .. title.prefixedText .. '|?Lauttrennung='
local result = mw.smw and mw.smw.ask and mw.smw.ask(query)
if result and result[1] and result[1]["Lauttrennung"] then
return result[1]["Lauttrennung"]
end
-- Fallback: Aus Seitentext
local content = title:getContent() or ""
return content:match("%[%[Lauttrennung::(.-)%]%]")
end
-- Funktion: Anzeige des Sortierschlüssels nach Lauttrennung
function p.anzeigen(frame)
local lauttrennung = getLauttrennung()
local sprachcode, fehler = getSprachcode()
if not lauttrennung then
return debugMode and "Keine Lauttrennung gefunden in Seite " .. mw.title.getCurrentTitle().text or "Keine Lauttrennung gefunden"
end
if not sprachcode then
return debugMode and "Fehler beim Ermitteln der Sprachstufe: " .. (fehler or "") or "Sprachstufe fehlt"
end
local tabelle, ladefehler = ladeSortierzeichentabelle("LautSortierTabelle-" .. sprachcode)
if not tabelle then
return debugMode and "LautSortierTabelle zu '" .. sprachcode .. "' konnte nicht geladen werden: " .. (ladefehler or "") or "Lautsortiertabelle fehlt"
end
local sortkey = p.verarbeiteLauttrennung(lauttrennung, tabelle)
return debugMode and "[" .. sprachcode .. "] → " .. sortkey or sortkey
end
-- Funktion: Rohwert-Ausgabe für SMW-Property
function p.roh(frame)
local lauttrennung = getLauttrennung()
local sprachcode, _ = getSprachcode()
local tabelle, _ = ladeSortierzeichentabelle("LautSortierTabelle-" .. sprachcode)
if lauttrennung and tabelle then
return p.verarbeiteLauttrennung(lauttrennung, tabelle)
else
return ""
end
end
-- Kernfunktion: Verarbeitung der Lauttrennung in Sortierzeichen
function p.verarbeiteLauttrennung(lauttrennung, lautmap)
local sortiername = ""
for laut in mw.text.gsplit(lauttrennung, "-", true) do
laut = mw.text.trim(laut)
sortiername = sortiername .. (lautmap[laut] or laut)
end
return sortiername
end
return p