Zum Inhalt springen

„Modul:AdressenSort“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
KKeine Bearbeitungszusammenfassung
fix für Umbrüche in Adressen (erzeugen linter errors)
 
(14 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
local p = {}
local p = {}

function p.convert(frame)
function p.convert(frame)
-- Lese Parameter
-- Lade externe Module
local rohadresse = frame.args[1]
local Sort = require( "Module:Sort" ).Sort()
local Text = require( "Module:Text" ).Text()
-- Ersetze eckige Klammern
local WLink = require( "Module:WLink" ).WLink()
local adresse = mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(rohadresse,'%<',''),'%|',''),'%]',''),'%[','')
local hausnummer, sortadresse, strasse, ziffernzahl
-- Ermittle die Gesamtlänge des Strings
-- Lese Parameter und entferne sämtliche Wiki-Syntax
local adresslaenge = mw.ustring.len(adresse)
local rohadresse = WLink.getPlain(Text.getPlain(frame.args[1]))
-- Finde heraus, wo die Hausnummer beginnt (erstes Auftreten einer Ziffer)
-- Entferne alle bis auf die erste Hausnummer einer Aufzählung
local nummernstart = mw.ustring.find(adresse, '%d')
-- Falls es überhaupt Ziffern gibt
-- 1. Entferne alles nach Umbrüchen
local adresse = rohadresse:gsub("\n.*",""):gsub(" /.*",""):gsub("/.*",""):gsub(", %d*%a*",""):gsub(" bis %d*%a*", ""):gsub(" und %d*%a*", ""):gsub("; %d%a*", ""):gsub("(%d.*) %(.*%)","%1")
if nummernstart then
-- Suche nach der Hausnummer = finde letztes Auftreten eines Ziffer-"Wortes"
-- Extrahiere den Straßennamen
local strasse = mw.ustring.sub(adresse,1,nummernstart-1)
strasse, hausnummer = mw.ustring.match(adresse, "^(.+) (%d[%-–/%d]*%a?)$")
if hausnummer then
-- Extrahiere die Hausnummer
-- Prüfe, ob die Nummer vom Format "10-12" ist
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')
local punctuation = mw.ustring.find(hausnummer,'%p')
-- Prüfe, ob die Nummer vom Format "10a" ist
-- Prüfe, ob die Nummer vom Format "10a" ist
local alpha = mw.ustring.find(hausnummer,'%a')
local alpha = mw.ustring.find(hausnummer,'%a')
-- Werte das aus und reduziere ggf. die beachtete Ziffernzahl
-- Werte das aus und reduziere ggf. die beachtete Ziffernzahl
local ziffernzahl = 0
ziffernzahl = 0
if punctuation then
if punctuation then
ziffernzahl = punctuation - 1
ziffernzahl = punctuation - 1
Zeile 37: Zeile 37:
ziffernzahl = mw.ustring.len(hausnummer)
ziffernzahl = mw.ustring.len(hausnummer)
end
end
end
-- Baue jetzt die Ausgabe zusammen, füge dabei 0en ein, so dass die (erste) Hausnummer 5 Stellen hat
-- Ersetze Sonderzeichen usw.
sortadresse = mw.ustring.toNFD(strasse) .. mw.ustring.rep('0',5-ziffernzahl) .. hausnummer
if hausnummer then
sortadresse = Sort.lex(strasse, "latin") .. " " ..
mw.ustring.rep('0',5-ziffernzahl) .. hausnummer
else
else
sortadresse = Sort.lex(adresse, "latin")
-- Falls es keine Ziffern gibt, kann einfach die Adresse normalisiert zurückgegeben werden
sortadresse = mw.ustring.toNFD(adresse)
end
end
-- Gebe den SortKey zurück
-- Gebe den SortKey zurück
return sortadresse
return sortadresse
end
end
return p
return p

Aktuelle Version vom 18. Januar 2018, 13:48 Uhr

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)
     --  Lade externe Module
     local Sort  = require( "Module:Sort" ).Sort()
     local Text  = require( "Module:Text" ).Text()
     local WLink = require( "Module:WLink" ).WLink()
     local hausnummer, sortadresse, strasse, ziffernzahl
     -- Lese Parameter und entferne sämtliche Wiki-Syntax
     local rohadresse = WLink.getPlain(Text.getPlain(frame.args[1]))
     -- Entferne alle bis auf die erste Hausnummer einer Aufzählung
     -- 1. Entferne alles nach Umbrüchen
     local adresse = rohadresse:gsub("\n.*",""):gsub(" /.*",""):gsub("/.*",""):gsub(", %d*%a*",""):gsub(" bis %d*%a*", ""):gsub(" und %d*%a*", ""):gsub("; %d%a*", ""):gsub("(%d.*) %(.*%)","%1")
     -- Suche nach der Hausnummer = finde letztes Auftreten eines Ziffer-"Wortes"
     strasse, hausnummer = mw.ustring.match(adresse, "^(.+) (%d[%-–/%d]*%a?)$")
    if hausnummer then
        -- Prüfe, ob die Nummer vom Format "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
        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
     end
     -- Ersetze Sonderzeichen usw.
     if hausnummer then
             sortadresse = Sort.lex(strasse, "latin") .. " " ..
                           mw.ustring.rep('0',5-ziffernzahl) .. hausnummer
     else
             sortadresse = Sort.lex(adresse, "latin")
     end
     -- Gebe den SortKey zurück
     return sortadresse
end
return p