Modul:AdressenSort

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 18. Dezember 2013 um 12:17 Uhr durch CherryX (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.
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