Zum Inhalt springen

Modul:Aux

Aus Wikipedia

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

local p = {}

function getLang()
	return mw.language.getContentLanguage():getCode()
end

function writeDate(sISO, sEtc)
	if not (type(sISO) == type("")) then
		return nil
	end
	sISO = mw.ustring.match(sISO, "%S.*")
	local nY = tonumber(mw.ustring.match(sISO, "^[-]?[0-9]+"))
	sISO = mw.ustring.gsub(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]+"))
	sISO = mw.ustring.gsub(sISO, "^[0-9]+", "")
	if not nM then
		if mw.ustring.match(sISO, "^%s*$") then
			if nY < 0 then
				return -nY .. " v. Chr" .. (
					sEtc and mw.ustring.match(sEtc, "^.") == "." and "" or "."
				)
			else
				return nY .. ""
			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]+"))
	sISO = mw.ustring.gsub(sISO, "^[0-9]+", "")
	local tM = {
		"Jänna";
		"Feba";
		"Maez";
		"Aprü";
		"Mai";
		"Juni";
		"Juli";
		"August";
		"Septemba";
		"Oktoba";
		"Novemba";
		"Dezemba";
	}
	local s = ""
	if nY < 0 then
		s = s .. -nY .. " v. Chr" .. (
			sEtc and mw.ustring.match(sEtc, "^.") == "." and "" or "."
		)
	else
		s = s .. nY
	end
	if not nD then
		if mw.ustring.match(sISO, "^%s*$") then
			return tM[nM] .. " " .. s
		else
			return nil
		end
	elseif nD > ({
		31;
		(nY % 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 (not sLang) or sLang == getLang() then
		return nil
	else
		sLang = mw.language.fetchLanguageName(sLang, getLang()) 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.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 p.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 == "" 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