Die Dokumentation für dieses Modul kann unter Modul:Benutzer:Aktenstapel/Doku erstellt werden

local function fault(s)
	return string.format('<span class="error">%s</span>', s)
end

local function f(line)
	local prefix = ""
	local vo
	local abs
	local rest
	vo, abs, rest = string.match(line, "^(Abs%.?)[ @](%d+[a-zA-Z]*)[ @](.*)")
	if vo then
		prefix = '<abbr title="Absatz">Abs.</abbr> '..abs..' '
		line = rest
	end
	vo, rest = string.match(line, "^(VO)[ @](.*)")
	if vo then
		return prefix..'<abbr title="der Verordnung">VO</abbr> '..rest
	else
		vo, rest = string.match(line, "^(G)[ @](.*)")
	end
	if vo then
		return prefix..'<abbr title="des Gesetzes">G</abbr> '..rest
	else
		vo, rest = string.match(line, "^(VwV)[ @](.*)")
	end
	if vo then
		return prefix..'<abbr title="der Verwaltungsvorschrift">VwV</abbr> '..rest
	else
		return line
	end
end

function restoreNbsp(line)
	return string.gsub(line, "@", "&nbsp;")
end

-- Export
local p = { }

function p.lastChange(arglist)
	local line = arglist[1]
	local sect
	local art
	local rest
	local xline
	local jahr
	local teil
	local seite
	local bgblref
	if not line then
		return "line is null[[Kategorie:Wikipedia:Vorlagenfehler/Vorlage:Infobox Gesetz]]"
	end
	sect = string.match(line, "@")
	if sect then
		return line.."[[Kategorie:Wikipedia:Vorlagenfehler/Vorlage:Infobox Gesetz]]"
	end
	xline = string.gsub(line, "^ *", "")
	xline = string.gsub(xline, "&nbsp;", "@")
	sect, art, rest = string.match(xline, "^(Art%.?)[ @]?([IVX%d]+%a*)[ @](.*)")
	if sect then
		jahr, teil, seite = string.match(rest, "Jahrgang (%d+) Teil (I) Seite (%d+)")
		bgblref = table.concat({jahr, teil, seite}, "+")
		if bgblref == '' or (jahr + 0) < 2006 then
			return restoreNbsp('<abbr title="Artikel">Art.</abbr> '..art..' '..f(rest))
		else
			return restoreNbsp('[http://www.buzer.de/s1.htm?g='..bgblref..'&amp;a='..art..' <abbr title="Artikel '..art..' bei buzer.de abrufen">Art. '..art..'</abbr>] '..f(rest))
		end
	end
	sect, art, rest = string.match(xline, "^(§)[ @]?([IVX%d]+%a*)[ @](.*)")
	if sect then
		return restoreNbsp('§ '..art..' '..f(rest))
	else
		art, rest = string.match(xline, "^(G)[ @](.*)")
	end
	if art then
		return restoreNbsp('<abbr title="Gesetz">G</abbr> '..rest)
	else
		art, rest = string.match(xline, "^(VO)[ @](.*)")
	end
	if art then
		return restoreNbsp('<abbr title="Verordnung">VO</abbr> '..rest)
	else
		art, rest = string.match(xline, "^(VwV)[ @](.*)")
	end
	if art then
		return restoreNbsp('<abbr title="Verwaltungsvorschrift">VwV</abbr> '..rest)
	else
		return line
	end
end

function p.letzteAenderung(frame)
	local lucky
	local r
	lucky, r = pcall(p.lastChange, frame.args)
	if not lucky then
		r = fault("Parameterfehler in [[Aktenstapel]]: "..r.."[[Kategorie:Wikipedia:Vorlagenfehler/Aktenstapel]]")
	end
	return r
end

return p