Zum Inhalt springen

„Modul:AdressenSort“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Stellen runter, Erkenne auch Hausnummern mit nachgestelltem Buchstaben in Listen
fix für Umbrüche in Adressen (erzeugen linter errors)
 
(6 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 2: Zeile 2:


function p.convert(frame)
function p.convert(frame)
-- Lade externe Module
-- lade Sort-Modul, um später Sonderzeichen umwandeln zu können
local lucky, Sort = pcall( require, "Module:Sort" )
local Sort = require( "Module:Sort" ).Sort()
Sort = Sort.Sort()
local Text = require( "Module:Text" ).Text()
local WLink = require( "Module:WLink" ).WLink()
local hausnummer, sortadresse, strasse, ziffernzahl
local hausnummer, sortadresse, strasse, ziffernzahl
-- Lese Parameter
-- Lese Parameter und entferne sämtliche Wiki-Syntax
local rohadresse = frame.args[1]
local rohadresse = WLink.getPlain(Text.getPlain(frame.args[1]))
-- Entferne alle bis auf die erste Hausnummer einer Aufzählung
-- Ersetze eckige Klammern
-- 1. Entferne alles nach Umbrüchen
local adresse = rohadresse:gsub("[()%[%]|<>]", ""):gsub(", %d*%a*",""):gsub(" bis %d*%a*", ""):gsub(" und %d*%a*", ""):gsub("/%d*%a*",""):gsub("; %d%a*", "")
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; letztes Auftreten eines Ziffer-"Wortes"
-- Suche nach der Hausnummer = finde letztes Auftreten eines Ziffer-"Wortes"
strasse, hausnummer = mw.ustring.match(adresse, "^(.+) (%d[%-–/%d]*%a?)$")
strasse, hausnummer = mw.ustring.match(adresse, "^(.+) (%d[%-–/%d]*%a?)$")
if hausnummer then
if hausnummer then
Zeile 38: Zeile 40:
-- Ersetze Sonderzeichen usw.
-- Ersetze Sonderzeichen usw.
if hausnummer then
if hausnummer then
sortadresse = Sort.lex(strasse, "latin") ..
sortadresse = Sort.lex(strasse, "latin") .. " " ..
mw.ustring.rep('0',5-ziffernzahl) .. hausnummer
mw.ustring.rep('0',5-ziffernzahl) .. hausnummer
else
else

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