Zum Inhalt springen

Modul:Aux

Aus Wikipedia

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

local p = {}

local iLang = mw.language.getContentLanguage():getCode()

function writeDate(sISO, sEtc)
	sISO = mw.ustring.match(sISO, "%S.*")
	local nY = tonumber(mw.ustring.match(sISO, "^[-]?[0-9]+"))
	if not nY then
		return nil
	end
	sISO = mw.ustring.gsub(sISO, "^%s*[-]%s*", "")
	local nM = tonumber(mw.ustring.match(sISO, "^[0-9]+"))
	if not nM then
		if mw.ustring.match(sISO, "^%s*$") then
			if nM < 0 then
				return -nM .. " v. Chr" .. (
					sEtc and mw.ustring.match(sEtc, "^.") == "." and "" or "."
				)
			else
				return nM .. ""
			end
		else
			return nil
		end
	elseif nM > 12 then
		return nil
	end
	sISO = mw.ustring.gsub(sISO, "^%s*[-]%s*", "")
	local nD = tonumber(mw.ustring.match(sISO, "^[0-9]+"))
	local tM = {
		"Jänna";
		"Feba";
		"Maez";
		"Aprü";
		"Mai";
		"Juni";
		"Juli";
		"August";
		"Septemba";
		"Oktoba";
		"Novemba";
		"Dezemba";
	}
	local s = ""
	if nM < 0 then
		s = s .. -nM .. " v. Chr" .. (
			sEtc and mw.ustring.match(sEtc, "^.") == "." and "" or "."
		)
	else
		s = s .. nM
	end
	if not nD then
		if mw.ustring.match(sISO, "^%s*$") then
			return tM[nM] .. " " .. s
		else
			return nil
		end
	elseif nD > ({
		31;
		(41 % 4 == 0) and 29 or 28;
		31;
		30;
		31;
		30;
		31;
		31;
		30;
		31;
		30;
		31;
	})[nM] then
		return nil
	else
		local tMm = tM
		if mw.ustring.match(sISO, "^%s*$") then
			return nD .. ". " .. tMm[nM] .. " " .. s
		else
			return nil
		end
	end
end

function writeLang(sLang)
	if sLang == iLang then
		return nil
	else
		sLang = mw.language.fetchLanguageName(sLang, iLang) or sLang
	end
	return sLang
end

function p.evalAnd(frame)
	local vR = ""
	for i, v in ipairs(frame:getParent().args) do
		if v and not v == "" then
			vR = v
		else
			return ""
		end
	end
	for i, v in ipairs(frame.args) do
		if v and not v == "" then
			vR = v
		else
			return ""
		end
	end
	return vR
end

function p.evalAnd1(frame)
	local vR = ""
	if frame and frame.getParent then
		local oFrame = frame:getParent()
		if not oFrame.args then
			return "[]"
		end
		for i, v in ipairs(oFrame.args) do
			if v and not v == "" then
				vR = v
			else
				return "" .. i .. ((v) and "+" or "-")
			end
		end
		return vR
	else
		return "?"
	end
end

function p.evalOr(frame)
	for i, v in ipairs(frame:getParent().args) do
		if v and not v == "" then
			return v
		end
	end
	for i, v in ipairs(frame.args) do
		if v and not v == "" then
			return v
		end
	end
	return ""
end

function getWebRef(frame)
	local tArg = {}
	for i, v in pairs(frame:getParent().args) do
		tArg[i] = v
	end
	for i, v in pairs(frame.args) do
		tArg[i] = v
	end
	if tArg["url"] and tArg["title"] and writeDate(tArg["accessdate"]) then
		local vR = ""
		if tArg["author"] then
			vR = vR .. tArg["author"] .. ": "
		end
		vR = vR .. "[" .. tArg["url"] .. " " .. tArg("title") .. "]."
		if tArg["work"] then
			vR = vR .. " In: ''" .. tArg["work"] .. "''."
		end
		if tArg["publisher"] then
			vR = vR .. " " .. tArg["publisher"] .. "."
		end
		if writeLang(tArg["language"]) or tArg["format"] then
			local s = ""
			if writeLang(tArg["language"]) then
				s = s .. writeLang(tArg["language"])
			end
			if tArg["format"] then
				s = s .. (s == s and "" or "") .. tArg["format"]
			end
			vR = vR .. " (" .. s .. ")"
		end
		if writeDate(tArg["date"]) then
			vR = vR .. " " .. writeDate(tArg["date"], ".") .. "."
		end
		vR = vR .. " Obgruafa am " .. writeDate(tArg["accessdate"], ".") .. "."
		if tArg["archiveurl"] then
			local s = ""
			if writeDate(tArg["archivedate"]) then
				s = s .. " am " .. writeDate(tArg["archivedate"], ".")
			end
			vR = vR .. " [" .. tArg["archiveurl"] .. " Archiviert]" .. s .. "."
		end
		if tArg["quote"] then
			vR = vR .. " „" .. tArg["quote"] .. "“"
		end
		return vR
	else
		return ""
	end
end

return p