Die Dokumentation für dieses Modul kann unter Modul:Vorlage:BGBl/Doku erstellt werden

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:Regiowiki:Vorlagenfehler/Vorlage:BGBl]]", alert)
end -- fault()

-- 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 teil = arglist.teil
	local jahr = arglist.jahr
	local seite = arglist.seite
	local zusatz = arglist.zusatz
	local lbl = arglist.text
	local prelbl
	local preabbr
	local panchor = ''
	local iseite = ''
	local wartung = ''
	local austria = false
-- Die nächsten Zeilen sind ausschließlich für direkten Modultest sinnvoll.
	if not name then name = "{{{1}}}" end
	if not zusatz then zusatz = "{{{zusatz}}}" end
	if not lbl then lbl = "{{{text}}}" end
--
	if zusatz == "{{{zusatz}}}" then
		zusatz = ""
	end
	if name == "{{{1}}}" then
		if teil == "1" then
			teil = "I"
		else
			teil = "II"
		end
		wartung = "[[Kategorie:Regiowiki:Vorlagenfehler/Vorlage:BGBl]]"
	else
		
		tmp = string.match(name, "&nbsp;")
		if tmp then
			return fault("&amp;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
				if (jahr + 0) > 1996 then wartung = "[[Kategorie:Regiowiki:Vorlagenfehler/Vorlage:BGBl]]" end
			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) < 1945 then wartung = "[[Kategorie:Regiowiki:Vorlagenfehler/Vorlage:BGBl]]" end
	if (jahr + 0) > 2040 then wartung = "[[Kategorie:Regiowiki:Vorlagenfehler/Vorlage:BGBl]]" end
	if austria then
		if ateil == 0 then
			if (jahr + 0) == 1945 then
				if nummer == '0' then
					lbl = string.format("<abbr title=\"Bundesgesetzblatt für die Republik Österreich, Nummer %d, Jahrgang %d (PDF)\">BGBl. Nr. %d/%d</abbr>", 1, jahr, 1, jahr)
				else
					lbl = string.format("<abbr title=\"Staatsgesetzblatt für die Republik Österreich, Nummer %s, Jahrgang %d (PDF)\">StGBl. Nr. %d/%d</abbr>", nummer, jahr, nummer, jahr)
				end
			else
				lbl = string.format("<abbr title=\"Bundesgesetzblatt für die Republik Österreich, Nummer %d, Jahrgang %d (PDF)\">BGBl. Nr. %d/%d</abbr>", nummer, jahr, nummer, jahr)
			end
		else
			if (jahr + 0) < 1997 then wartung = "[[Kategorie:Regiowiki:Vorlagenfehler/Vorlage:BGBl]]" end
			if (jahr + 0) < 1945 then
				lbl = string.format("<abbr title=\"Bundesgesetzblatt für den Bundesstaat Österreich, Teil %s, Nummer %s, Jahrgang %d (PDF)\">BGBl. %s Nr. %s/%d</abbr>", teil, nummer, jahr, teil, nummer, jahr)
			else
				lbl = string.format("<abbr title=\"Bundesgesetzblatt für die Republik Österreich, Teil %s, Nummer %s, Jahrgang %d (PDF)\">BGBl. %s Nr. %s/%d</abbr>", teil, nummer, jahr, teil, nummer, jahr)
			end
		end
		if (jahr + 0) >= 2004 then
			url = string.format("http://www.ris.bka.gv.at/Dokumente/BgblAuth/BGBLA_%d_%s_%s/BGBLA_%d_%s_%s.pdf", jahr, teil, nummer, jahr, teil, nummer)
		elseif ateil == 0 then
			url = string.format("http://www.ris.bka.gv.at/Dokumente/BgblPdf/%d_%s_%d/%d_%s_%d.pdf", jahr, nummer, ateil, jahr, nummer, ateil)
		elseif (jahr + 0) < 1945 then
			url = string.format("http://alex.onb.ac.at/cgi-content/alex?aid=bgl&datum=%d", jahr) --, nummer, ateil, jahr, nummer, ateil)
		else
			url = string.format("http://www.ris.bka.gv.at/Dokumente/BgblPdf/%d_%s_%d/%d_%s_%d.pdf", jahr, nummer, ateil, jahr, nummer, ateil)
		end
		return '[' .. url .. ' ' .. lbl .. ']' .. wartung
	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
		prelbl = "BGBl."
	else
		prelbl = string.format("BGBl. %d", jahr)
	end
	if jahr + 0 > 1950 then
		prelbl = string.format("%s %s", prelbl, teil)
		preabbr = string.format("<abbr title=\"Bundesgesetzblatt Jahrgang %d Teil %s", jahr, teil)
	else
		preabbr = string.format("<abbr title=\"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/banzxaver/bgbl/start.xav?startbk=Bundesanzeiger_BGBl&jumpTo=%s", url)
		if lbl == "{{{text}}}" then
			lbl = string.format("%s S. %d", prelbl, seite)
			if string.len(iseite) > 0 then
				lbl = lbl..", "..iseite
			end
		end
		if not string.match(lbl, "<abbr ") then
			lbl = string.format("%s Seite %d (PDF), ausgegeben zu Bonn\">%s</abbr>", preabbr, seite, lbl)
		end
	else
		url = string.format("https://www.bgbl.de/banzxaver/bgbl/start.xav?startbk=Bundesanzeiger_BGBl&jumpTo=bgbl%d%02d%03d.pdf", ateil, ajahr, nummer)
		if lbl == "{{{text}}}" then
			lbl = string.format("%s Nr. %d", prelbl, nummer)
		end
		if not string.match(lbl, "<abbr ") then
			lbl = string.format("%s Nummer %d (PDF), ausgegeben zu Bonn\">%s</abbr>", preabbr, nummer, lbl)
		end
	end
	if ateil == 3 then
		return lbl .. wartung
	else
		return '[' ..url .. panchor .. ' ' .. lbl .. ']' .. 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