„Modul:AdressenSort“ – Versionsunterschied
Erscheinungsbild
[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) |
||
-- |
-- Lade externe Module |
||
local |
local Sort = require( "Module:Sort" ).Sort() |
||
local Text = require( "Module:Text" ).Text() |
|||
⚫ | |||
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') |
|||
-- |
-- 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" |
|||
-- Extrahiere den Straßennamen |
|||
strasse, hausnummer = mw.ustring.match(adresse, "^(.+) (%d[%-–/%d]*%a?)$") |
|||
if hausnummer then |
|||
-- Extrahiere die Hausnummer |
|||
⚫ | |||
local hausnummer = mw.ustring.sub(adresse,nummernstart,adresslaenge) |
|||
⚫ | |||
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 |
||
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 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
sortadresse = Sort.lex(strasse, "latin") .. " " .. |
|||
⚫ | |||
else |
else |
||
⚫ | |||
-- Falls es keine Ziffern gibt, kann einfach die Adresse normalisiert zurückgegeben werden |
|||
⚫ | |||
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