Modul:Vorlage:BGBl
Vorlagenprogrammierung | Diskussionen | Lua | Unterseiten | ||
Modul | Deutsch
|
Modul: | Dokumentation |
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
local function fault(alert)
-- Format message with class="error"
-- alert -- string, with message
-- Returns message with markup
return string.format("<span class=\"error\">%s [[Vorlage:BGBl|(Hilfe)]]</span>[[Kategorie:Wikipedia:Vorlagenfehler/Vorlage:BGBl]]", alert)
end -- fault()
local function generate(text, lbl, abbr, url)
-- Generate link
local lbl2
if text == "{{{text}}}" or text == "" then
text = string.format("<abbr title=\"%s\">%s</abbr>", abbr, lbl)
elseif not string.match(text, "<abbr ") then
text = string.format("<abbr title=\"%s\">%s</abbr>", abbr, text)
end
if url == '' then
return text
else
return string.format("[%s %s]", url, text)
end
end -- generate()
-- 1 Promille der Dateinamen von bgbl.de sind unsystematisch:
filter={["bgbl106s0437.pdf"]="bgbl106d0437.pdf",
["bgbl106s0438.pdf"]="bgbl106d0438.pdf",
["bgbl106s0444.pdf"]="bgbl106d0444.pdf",
["bgbl106s0454.pdf"]="bgbl106d0454.pdf",
["bgbl106s0464.pdf"]="bgbl106d0464.pdf",
["bgbl106s0465.pdf"]="bgbl106d0465.pdf",
["bgbl106s0466a.pdf"]="bgbl106d0466a.pdf",
["bgbl106s0466b.pdf"]="bgbl106d0466b.pdf",
["bgbl106s0467a.pdf"]="bgbl106d0467a.pdf",
["bgbl106s0467b.pdf"]="bgbl106d0467b.pdf",
["bgbl107s2893.pdf"]="bgbl107065s2893.pdf",
["bgbl107s2894.pdf"]="bgbl107065s2894.pdf",
["bgbl107s2897.pdf"]="bgbl107065s2897.pdf",
["bgbl107s2904.pdf"]="bgbl107065s2904.pdf",
["bgbl107s2930.pdf"]="bgbl107065s2930.pdf",
["bgbl107s2936.pdf"]="bgbl107065s2936.pdf",
["bgbl107s2937.pdf"]="bgbl107065s2937.pdf",
["bgbl107s2938.pdf"]="bgbl107065s2938.pdf",
["bgbl107s2942.pdf"]="bgbl107065s2942.pdf",
["bgbl107s2945.pdf"]="bgbl107065s2945.pdf",
["bgbl107s2961.pdf"]="bgbl107065s2961.pdf",
["bgbl107s2962a.pdf"]="bgbl107065s2962a.pdf",
["bgbl107s2962b.pdf"]="bgbl107065s2962b.pdf",
["bgbl107s2964.pdf"]="bgbl107065s2964.pdf",
["bgbl108s0393.pdf"]="bgbl108010s0393.pdf",
["bgbl108s0394.pdf"]="bgbl108010s0394.pdf",
["bgbl108s0399.pdf"]="bgbl108010s0399.pdf",
["bgbl108s0408.pdf"]="bgbl108010s0408.pdf",
["bgbl108s0414.pdf"]="bgbl108010s0414.pdf",
["bgbl108s0415.pdf"]="bgbl108010s0415.pdf",
["bgbl108s0416.pdf"]="bgbl108010s0416.pdf",
["bgbl206s0825.pdf"]="bgbl206024s825.pdf",
["bgbl206s0826.pdf"]="bgbl206024s826.pdf",
["bgbl206s0827.pdf"]="bgbl206024s827.pdf",
["bgbl206s0830.pdf"]="bgbl206024s830.pdf",
["bgbl206s0832.pdf"]="bgbl206024s832.pdf",
["bgbl206s0834.pdf"]="bgbl206024s834.pdf",
["bgbl206s0836.pdf"]="bgbl206024s836.pdf",
["bgbl206s0837.pdf"]="bgbl206024s837.pdf",
["bgbl206s0838a.pdf"]="bgbl206024s838a.pdf",
["bgbl206s0838b.pdf"]="bgbl206024s838b.pdf",
["bgbl207s1401.pdf"]="bgbl207028s1401.pdf",
["bgbl207s1402.pdf"]="bgbl207028s1402.pdf",
["bgbl207s1416a.pdf"]="bgbl207028s1416a.pdf",
["bgbl207s1416b.pdf"]="bgbl207028s1416b.pdf",
["bgbl207s1418.pdf"]="bgbl207028s1418.pdf",
["bgbl207s1419.pdf"]="bgbl207028s1419.pdf",
["bgbl207s1420.pdf"]="bgbl207028s1420.pdf",
["bgbl207s1423.pdf"]="bgbl207028s1423.pdf",
["bgbl207s1425.pdf"]="bgbl207028s1425.pdf",
["bgbl207s1427.pdf"]="bgbl207028s1427.pdf",
["bgbl207s1428.pdf"]="bgbl207028s1428.pdf",
["bgbl207s1937.pdf"]="bgbl207040s1937.pdf",
["bgbl207s1938.pdf"]="bgbl207040s1938.pdf",
["bgbl207s1950.pdf"]="bgbl207040s1950.pdf",
["bgbl207s1953.pdf"]="bgbl207040s1953.pdf",
["bgbl207s1962.pdf"]="bgbl207040s1962.pdf",
["bgbl207s1967a.pdf"]="bgbl207040s1967a.pdf",
["bgbl207s1967b.pdf"]="bgbl207040s1967b.pdf",
["bgbl207s1968.pdf"]="bgbl207040s1968.pdf",
["bgbl207s1969.pdf"]="bgbl207040s1969.pdf",
["bgbl207s1970.pdf"]="bgbl207040s1970.pdf",
["bgbl207s1971.pdf"]="bgbl207040s1971.pdf",
["bgbl207s1972.pdf"]="bgbl207040s1972.pdf",
["bgbl207s1974a.pdf"]="bgbl207040s1974a.pdf",
["bgbl207s1974b.pdf"]="bgbl207040s1974b.pdf",
["bgbl207s1975a.pdf"]="bgbl207040s1975a.pdf",
["bgbl207s1976.pdf"]="bgbl207040s1976.pdf",
["bgbl208s0781.pdf"]="bgbl208s781.pdf",
["bgbl208s0782.pdf"]="bgbl208s782.pdf",
["bgbl208s0786.pdf"]="bgbl208s786.pdf",
["bgbl208s0790.pdf"]="bgbl208s790.pdf",
["bgbl208s0792.pdf"]="bgbl208s792.pdf",
["bgbl208s0793a.pdf"]="bgbl208s793a.pdf",
["bgbl208s0793b.pdf"]="bgbl208s793b.pdf",
["bgbl208s0794.pdf"]="bgbl208s794.pdf",
["bgbl208s0795.pdf"]="bgbl208s795.pdf",
["bgbl208s0796.pdf"]="bgbl208s796.pdf",
["bgbl211s0010.pdf"]="bgbl2110010.pdf",
["bgbl213s0681.pdf"]="bgbl2130681.pdf",
["bgbl213s0682.pdf"]="bgbl2130682.pdf",
["bgbl213s0763.pdf"]="bgbl2130763.pdf",
["bgbl290s0885.pdf"]="bgbl290s0885_gross.pdf"} -- Einigungsvertrag (zwar nicht fehlerhaft, aber so nicht lesbar)
-- Export
local p = { }
function p.linkBGBl(arglist)
local name = arglist[1]
local text = arglist.text
-- Die nächsten Zeilen sind ausschließlich für direkten Modultest sinnvoll.
if not name then name = "{{{1}}}" end
if not text then text = "{{{text}}}" end
--
local gesetzblatt = "BGBl"
local teil = ''
local jahr = ''
local seite = ''
local zusatz = ''
local lbl = ''
local abbr = ''
local panchor = ''
local iseite = ''
local wartung = ''
local austria = false
-- Parse Eingabe
if string.match(name, "BGBl. ") then
gesetzblatt = "BGBl"
name = string.gsub(name, "BGBl. ", "")
end
if string.match(name, "StGBl. ") then
gesetzblatt = "StGBl"
name = string.gsub(name, "StGBl. ", "")
end
if string.match(name, "GBlÖ. ") then
gesetzblatt = "GBlÖ"
name = string.gsub(name, "GBlÖ. ", "")
end
if string.match(name, "RGBl. ") then
return fault("Verwende Vorlage <nowiki>{{RGBl|...}}</nowiki> für Reichsgesetzblatt.")
end
tmp = string.match(name, " ")
if tmp then
return fault("&nbsp; nicht erlaubt")
end
tmp = string.match(name, " ") or string.match(name, "/ ") or string.match(name, " [/,%.a-z]")
if tmp then
return fault("überschüssiges Leerzeichen")
end
tmp = string.match(name, "nI") or string.match(name, "%dI") or string.match(name, "I[SN]") or string.match(name, "[,%.]%d")
if tmp then
return fault("fehlendes Leerzeichen")
end
jahr, sichtbar, teil, seite, zusatz, iseite, trash = string.match(name, "(%d+)(n*) (%a+) S. (%d+)([a-d]*),* *(%d*)([^ \t\n,0-9]*)")
if trash and string.len(trash) > 0 then
return fault("überschüssige Zeichen am Ende")
end
if not seite then
jahr, sichtbar, teil, nummer = string.match(name, "(%d+)(n*) (%a+) Nr. (%d+)")
end
if not teil then
austria = true
teil, nummer, jahr = string.match(name, "(I+) Nr. (%d+a*)/(%d+)")
if not teil then
nummer, jahr = string.match(name, "Nr. (%d+a*)/(%d+)")
teil = ""
if not jahr then
return fault('"S." oder "Nr." fehlt')
end
end
end
if teil == "I" then
ateil = 1
elseif teil == "II" then
ateil = 2
elseif teil == "III" then
ateil = 3
elseif teil == "" then
ateil = 0
else
return fault("Angabe zum Teil nicht erkannt")
end
if (jahr + 0) > 2040 then return fault("Ungültige Jahreszahl") end
-- Generiere Ausgaben
-- Österreich
if austria then
-- Für Rückwärtskompatibilität
if gesetzblatt == "BGBl" and (jahr+0) == 1945 and (nummer+0) > 1 then gesetzblatt = "StGBl" end
if gesetzblatt == "BGBl" then
if (jahr + 0) >= 1997 and ateil==0 then return fault("BGBl in Österreich benötigt ab 1997 Angabe von Teil") end
if (jahr + 0) < 1997 and ( not (jahr + 0) == 1934 ) and ateil > 0 then return fault("BGBl in Österreich erlaubt erst ab 1997 Angabe von Teil") end
if (jahr + 0) == 1934 and ateil > 2 then return fault("BGBl in Österreich erlaubt 1934 keinen Teil III") end
if ateil == 0 then
lbl = string.format("BGBl. Nr. %s/%d", nummer, jahr)
else
lbl = string.format("BGBl. %s Nr. %s/%d", teil, nummer, jahr)
end
if (jahr + 0) >= 1997 then
abbr = string.format("Bundesgesetzblatt für die Republik Österreich, Teil %s, Nummer %s, Jahrgang %d [PDF]", teil, nummer, jahr)
elseif (jahr + 0) >= 1945 then
abbr = string.format("Bundesgesetzblatt für die Republik Österreich, Nummer %s, Jahrgang %d [PDF]", nummer, jahr)
elseif (jahr + 0) > 1934 or ( (jahr + 0) == 1934 and ateil > 0 ) then
abbr = string.format("Bundesgesetzblatt für den Bundesstaat Österreich, Nummer %s, Jahrgang %d", nummer, jahr)
elseif (jahr + 0) >= 1920 then
abbr = string.format("Bundesgesetzblatt für die Republik Österreich, Nummer %s, Jahrgang %d", nummer, jahr)
else
return fault("BGBl in Österreich nur 1920 bis 1938 und ab 1945")
end
if (jahr + 0) >= 2004 then
url = string.format("https://www.ris.bka.gv.at/Dokumente/BgblAuth/BGBLA_%d_%s_%s/BGBLA_%d_%s_%s.pdfsig", jahr, teil, nummer, jahr, teil, nummer)
elseif (jahr + 0) >= 1945 then
-- Unsystematischer URL für einziges BGBl aus 1945
if (jahr + 0) == 1945 and (nummer + 0) == 1 then nummer = 0 end
url = string.format("https://www.ris.bka.gv.at/Dokumente/BgblPdf/%d_%s_%d/%d_%s_%d.pdf", jahr, nummer, ateil, jahr, nummer, ateil)
elseif (jahr + 0) > 1934 or ( (jahr + 0) == 1934 and ateil > 1) then
url = string.format("https://www.ris.bka.gv.at/Ergebnis.wxe?Abfrage=BgblAlt&Bgblnummer=%s/%d&SkipToDocumentPage=True&VonKundmachungsdatum=01.05.1934&BisKundmachungsdatum=14.03.1938", nummer, jahr)
else
url = string.format("https://www.ris.bka.gv.at/Ergebnis.wxe?Abfrage=BgblAlt&Bgblnummer=%s/%d&SkipToDocumentPage=True&VonKundmachungsdatum=10.11.1920&BisKundmachungsdatum=30.04.1934", nummer, jahr)
end
elseif gesetzblatt == "GBlÖ" then
if (jahr + 0) < 1938 or (jahr + 0) > 1940 then return fault("GlBÖ in Österreich nur 1938-1940") end
lbl = string.format("GBlÖ. Nr. %s/%d", nummer, jahr)
abbr = string.format("Gesetzblatt für das Land Österreich, Nummer %s, Jahrgang %d", nummer, jahr)
url = string.format("https://www.ris.bka.gv.at/Ergebnis.wxe?Abfrage=BgblAlt&Bgblnummer=%s/%d&SkipToDocumentPage=True&VonKundmachungsdatum=15.03.1938", nummer, jahr)
elseif gesetzblatt == "StGBl" then
lbl = string.format("StGBl. Nr. %d/%d", nummer, jahr)
if jahr == '1945' then
abbr = string.format("Staatsgesetzblatt für die Republik Österreich, Nummer %s, Jahrgang %d [PDF]", nummer, jahr)
url = string.format("https://www.ris.bka.gv.at/Dokumente/BgblPdf/%d_%s_%d/%d_%s_%d.pdf", jahr, nummer, ateil, jahr, nummer, ateil)
elseif (jahr + 0) >= 1918 and (jahr + 0) <= 1920 then
if (jahr + 0) == 1918 or ( (jahr + 0) == 1919 and (nummer + 0) <= 484 ) then
abbr = string.format("Staatsgesetzblatt für den Staat Deutschösterreich, Nummer %s, Jahrgang %d", nummer, jahr)
else
abbr = string.format("Staatsgesetzblatt für die Republik Österreich, Nummer %s, Jahrgang %d", nummer, jahr)
end
url = string.format("https://www.ris.bka.gv.at/Ergebnis.wxe?Abfrage=BgblAlt&Bgblnummer=%s/%d&SkipToDocumentPage=True&VonKundmachungsdatum=15.11.1918&BisKundmachungsdatum=09.11.1920", nummer, jahr)
else
return fault("StGBl In Österreich nur 1918-1920 und 1945")
end
else
return fault("Unbekanntes Gesetzblatt")
end
return generate(text, lbl, abbr, url) .. wartung
end
-- Bundesrepublik Deutschland
if (jahr + 0) < 1949 then return fault("BGBl in Deutschland erst ab 1949") end
if not gesetzblatt == "BGBl" then return fault("Unbekanntes Gesetzblatt") end
if not zusatz then zusatz = "" end
if not sichtbar then sichtbar = "" end
if not iseite or iseite == "" then
iseite = ""
else
panchor = '#page=' .. (iseite - seite + 1)
end
ajahr = jahr % 100
if sichtbar == "n" then
lbl = "BGBl."
else
lbl = string.format("BGBl. %d", jahr)
end
if jahr + 0 > 1950 then
lbl = string.format("%s %s", lbl, teil)
abbr = string.format("Bundesgesetzblatt Jahrgang %d Teil %s", jahr, teil)
else
abbr = string.format("Bundesgesetzblatt Jahrgang %d", jahr)
end
if seite then
url = string.format("bgbl%d%02ds%04d%s.pdf", ateil, ajahr, seite, zusatz)
url = filter[url] or url
url = string.format("https://www.bgbl.de/xaver/bgbl/start.xav?startbk=Bundesanzeiger_BGBl&jumpTo=%s", url)
lbl = string.format("%s S. %d", lbl, seite)
if string.len(iseite) > 0 then
lbl = lbl .. ", " .. iseite
end
abbr = string.format("%s Seite %d [PDF], ausgegeben zu Bonn", abbr, seite)
else
if jahr + 0 >= 2023 then
url = string.format("https://www.recht.bund.de/bgbl/%d/%d/%d/VO", ateil, jahr, nummer)
else
url = string.format("https://www.bgbl.de/xaver/bgbl/start.xav?startbk=Bundesanzeiger_BGBl&jumpTo=bgbl%d%02d%03d.pdf", ateil, ajahr, nummer)
end
lbl = string.format("%s Nr. %d", lbl, nummer)
abbr = string.format("%s Nummer %d [PDF], ausgegeben zu Bonn", abbr, nummer)
end
if ateil == 3 then
return generate(text, lbl, abbr, "") .. wartung
else
return generate(text, lbl, abbr, url .. panchor) .. wartung
end
end
function p.getbgbl(frame)
local lucky, r = pcall(p.linkBGBl, frame.args)
if not lucky then
r = fault("Parameterfehler in [[Vorlage:BGBl]]: " .. r)
end
return r
end
return p