Dokumentacja modułu [zobacz] [edytuj] [historia] [odśwież]

Użycie edytuj

Moduł implementuje szablon {{RFC}} przygotowując wszystkie parametry cytowania na podstawie podanego numeru RFC i przekazując je do {{#invoke:Cytuj|custom}}.

Błędy edytuj

Błędy należy zgłaszać na stronie Wikipedia:Kawiarenka/Kwestie techniczne.


local index = mw.loadData("Moduł:RFC/index")
local isAlso = mw.loadData("Moduł:RFC/is-also")

function retrieveRFCInfo(number)
	local q = mw.loadData("Moduł:RFC/wd-index")[number]
	if not q then
		return nil
	end

	local title = mw.wikibase.getBestStatements(q, "P1476")
	if not title or (#title <= 0) then
		return nil
	end
	
	local result = {}
	local options = {}
	local snak = require("Moduł:Wikidane/format/snak")
	
	for i, v in ipairs(title) do
		local s = snak.format(v.mainsnak, options)
		if s and (#s > 0) then
			result[1] = s
			break
		end
	end
	
	if not result[1] then
		return nil
	end
	
	local author = mw.wikibase.getBestStatements(q, "P2093")
	if not author or (#author <= 0) then
		author =  mw.wikibase.getBestStatements(q, "P50")
	end
	
	if author then
		local authors = {}
		for i, v in ipairs(author) do
			local s = snak.format(v.mainsnak, options)
			table.insert(authors, s)
		end
		if #authors > 0 then
			result.autor = table.concat(authors, "; ")
		end
	end
	
	local date = mw.wikibase.getBestStatements(q, "P577")
	if date then
		for i, v in ipairs(date) do
			local s = snak.format(v.mainsnak, options)
			if s and (#s > 0) then
				result.data = s
				break
			end
		end
	end

	mw.logObject({number, q, result},"retrieveRFCInfo")
	return result
end

function formatRFC(number, data, odn, s)
	local num = tostring(number)
	local padnum = string.sub("0000"..num, -4)

	local desc = {}
	if isAlso.std[number] then
		table.insert(desc, "STD ") table.insert(desc, tostring(isAlso.std[number])) table.insert(desc, ", ")
	end
	if isAlso.bcp[number] then
		table.insert(desc, "BCP ") table.insert(desc, tostring(isAlso.bcp[number])) table.insert(desc, ", ")
	end
	if isAlso.fyi[number] then
		table.insert(desc, "FYI ") table.insert(desc, tostring(isAlso.fyi[number])) table.insert(desc, ", ")
	end
	local title = mw.title.getCurrentTitle()
	table.insert(desc, ((title.namespace == 0) and (title.text == "Request for Comments")) and "RFC&#32;" or "[[Request for Comments|RFC]] ") table.insert(desc, num)
	desc = table.concat(desc, "")

	local args = {
		autor = data and data.autor or nil,
		["tytuł"] = (data and data[1]) and data[1] or ("RFC&#32;"..num),
		data = data and data.data or nil,
		url = number == 1119 and "https://tools.ietf.org/pdf/rfc1119.pdf" or ("https://tools.ietf.org/html/rfc"..num),
		opis = (data and data[1]) and desc or nil,
		opublikowany = "[[Internet Engineering Task Force|IETF]]",
		issn = "2070-1721",
		oclc = "943595667",
		doi = "10.17487/RFC"..padnum,
		["język"] = "en",
		s = s,
		odn = odn ~= nil and odn or mw.getCurrentFrame():expandTemplate{ title="odn/id", args = {"RFC "..num}},
	}

	return require("Moduł:Cytuj").custom({args=args})
end

return {
	
cytuj = function(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		wrappers = "Szablon:RFC",
	})
	local number = args[1] or "{{{1}}}"
	local odn = args.odn
	local s = args.s
	number = tonumber(number) or number
	local data = index[number] or retrieveRFCInfo(number)
	return formatRFC(number, data, odn, s)
end,

index = function()
	local list = {}
	for k, v in pairs(index) do
		local item = { number = k, data = v }
		table.insert(list, { number = k, data = v })
	end
	
	table.sort(list, function(a, b) return a.number < b.number end)
	local result = {}
	for _, v in ipairs(list) do
		table.insert(result, "\n; ")
		table.insert(result, "RFC&#32;")
		table.insert(result, tostring(v.number))
		table.insert(result, " : ")
		table.insert(result, formatRFC(v.number, v.data))
	end
	
	return table.concat(result, "")
end,

}