Vorlagenprogrammierung | Diskussionen | Lua | Unterseiten | ||
Modul | Deutsch
|
Modul: | Dokumentation |
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
local p = {}
function p.convert(frame)
-- Lese Parameter
local rohadresse = frame.args[1]
-- Ersetze eckige Klammern
local adresse = mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(rohadresse,'%<',''),'%|',''),'%]',''),'%[','')
-- Ermittle die Gesamtlänge des Strings
local adresslaenge = mw.ustring.len(adresse)
-- Finde heraus, wo die Hausnummer beginnt (erstes Auftreten einer Ziffer)
local nummernstart = mw.ustring.find(adresse, '%d')
-- Falls es überhaupt Ziffern gibt
if nummernstart then
-- Extrahiere den Straßennamen
local strasse = mw.ustring.sub(adresse,1,nummernstart-1)
-- Extrahiere die Hausnummer
local hausnummer = mw.ustring.sub(adresse,nummernstart,adresslaenge)
-- Prüfe, ob die Nummer vom Format "10-12" oder "10/12" ist
local punctuation = mw.ustring.find(hausnummer,'%p')
-- Prüfe, ob die Nummer vom Format "10a" ist
local alpha = mw.ustring.find(hausnummer,'%a')
-- Werte das aus und reduziere ggf. die beachtete Ziffernzahl
local ziffernzahl = 0
if punctuation then
ziffernzahl = punctuation - 1
-- Falls zuerst ein Buchstabe kommt
if alpha and (alpha-punctuation < 0) then
ziffernzahl = alpha - 1
end
elseif alpha then
ziffernzahl = alpha - 1
-- Falls zuerst ein Satzzeichen kommt
if punctuation and (punctuation-alpha < 0) then
ziffernzahl = punctuation - 1
end
else
-- Wenn es keine Spezialfälle gibt, bestimme einfach die Länge
ziffernzahl = mw.ustring.len(hausnummer)
end
-- Baue jetzt die Ausgabe zusammen, füge dabei 0en ein, so dass die (erste) Hausnummer 5 Stellen hat
sortadresse = mw.ustring.toNFD(strasse) .. mw.ustring.rep('0',5-ziffernzahl) .. hausnummer
else
-- Falls es keine Ziffern gibt, kann einfach die Adresse normalisiert zurückgegeben werden
sortadresse = mw.ustring.toNFD(adresse)
end
-- Gebe den SortKey zurück
return sortadresse
end
return p