وحدة:Get year

من دار الحكمة
اذهب إلى التنقلاذهب الى البحث

الاستخدام

تعمل الوحدة على سنة معينة، ويمكن استخدامها للحصول على ما يلي:

  • إضافة سنة إلى العنوان مثلًا إذا أردنا زيادة/إنقاص سنة إلى عنوان مقالة وليكن "قالب:السينما في 2022" فسنحصل على "قالب:السينما في 2023".
    • {{#invoke:get_year|get|قالب:السينما في 2022|title+1}} ← قالب:السينما في 2021
  • إظهار السنة فقط وإضافة/إنقاص سنة.
    • {{#invoke:get_year|get|دوري كرة القدم 2022-23|+1}} ← 2023-24
  • الحصول على السنة من العنوان.
    • {{#invoke:get_year|get|قالب:السينما في 2010-11|y}} ← 2010-11
  • إزالة السنة من العنوان
    • {{#invoke:get_year|get|قالب:السينما في 2022|noy}} ← قالب:السينما في

العمل على السنة فقط

اشارة -
  • {{#invoke:get_year|year|+1|y=2016}} ← 2017
  • {{#invoke:get_year|year|-1|y=2000-01}} ← 1999-2000
  • {{#invoke:get_year|year|-1|y=1999–2000}} ← 1998–99
endash
  • {{#invoke:get_year|year|+1|y=2016–17}} ← 2017–18
  • {{#invoke:get_year|year|+1|y=1998–99}} ← 1999–2000

العمل على العنوان بالكامل

  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 2010-11|-1}} ← 2009-10
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 2010-11|+1}} ← 2011-12
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 2010-11|title-1}} ← قالب:طواف أمريكا للدراجات 2009-10
اشارة -
  • {{#invoke:get_year|get|طواف أمريكا للدراجات 2010-11|title+1}} ← طواف أمريكا للدراجات 2009-10
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 1998–99|title+1}} ← قالب:طواف أمريكا للدراجات 1997–98
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 2010-11|noy}} ← قالب:طواف أمريكا للدراجات
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 2010-11|y}} ← 2010-11
endash
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 2010–11|title-1}} ← قالب:طواف أمريكا للدراجات 2009–10
  • {{#invoke:get_year|get|طواف أمريكا للدراجات 1999–00|title+1}} ← طواف أمريكا للدراجات 1998–99
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 2010–11|noy}} ← قالب:طواف أمريكا للدراجات
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 1998–99|y}} ← 1998–99
مثال خاطئ
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 2011-1|y}}
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 2011-1|y}}
  • {{#invoke:get_year|get|قالب:طواف أمريكا للدراجات 20111|y}}

local p = {}
-- {{#invoke:Get year|year|+1|y=2016}}
-- {{#invoke:Get year|year|+1|y=2016–17}}
-- {{#invoke:Get year|year|+1|y=2016–17}}
local function trim(s)
	-- from PiL2 20.4
	return (s:gsub("^%s*(.-)%s*$", "%1"))
end
local function get_year(y, Type)
	if mw.ustring.match(y, "^%d%d%d%d$") then
		return tonumber(y) + (Type == "+1" and 1 or -1)
	end
	local hyph, finish = mw.ustring.match(y, "%d([%–-])(%d+)")
	finish = finish or ""
	if not string.match(finish, "^%d+$") then
		local finish_fixed = mw.ustring.match(finish, "^%s*(%d%d?%d?%d?)%D")
		if finish_fixed then
			finish = finish_fixed
		else
			return ''
		end
	elseif string.len(finish) >= 5 then
		return ''
	end
	local start = string.match(y, "^%d+") or ""
	if not string.match(start, "^%d%d?%d?%d?$") then
		local start_fixed = mw.ustring.match(start, "^%s*(%d%d?%d?%d?)%D")
		if start_fixed then
			start = start_fixed
		end
	end
	local nstart = tonumber(start)
	local nfinish = tonumber(finish)
	local t = 1
	while t <= 10 do
		local nish = nstart + t
		if nish == nfinish or string.match(nish, "%d?%d$") == finish then
			break
		end
		if t == 10 then
			local errors =
				p.errorclass(
					'Function nav_hyphen can\'t determine a reasonable term length for "' ..
					start .. hyph .. finish .. '".'
				)
			return p.failedcat(errors, "K")
		end
		t = t + 1
	end
	local i = Type == "+1" and 1 or -1
	local hgap = 0
	local from = nstart + i * (t + hgap)
	local from2 = string.match(from, "%d?%d$")
	local to = tostring(from + t)
	local to2 = string.match(to, "%d?%d$")
	local tofinal = (t > 1 or (from2 - to2) > 0) and to or to2
	local full = from .. hyph .. tofinal
	local abbr = from .. hyph .. to2
	return full
end
function p.year(frame)
	local args = frame.args
	local y = args.y or args.year or ""
	local Type = args["1"] or args.ty or args.type or ""
	if y == "" or Type == "" then
		return ""
	end
	return get_year(y, Type)
end
function p.get(frame)
	local args = frame.args
	local title = args["1"] or args.pa or args.page or args.title
	local Type = args["2"] or args.ty or args.type
	if title == "" or Type == "" then
		return ""
	end
	title = trim(title)
	Type = trim(Type)
	local year =
		mw.ustring.match(title, "%s%d%d%d%d[%–-]%d%d%d%d$", 1) or mw.ustring.match(title, "%s%d%d[%–-]%d%d%d%d$", 1) or
		mw.ustring.match(title, "%s%d%d%d%d[%–-]%d%d$", 1) or
		mw.ustring.match(title, "%s%d%d%d%d$", 1) or
		mw.ustring.match(title, "^%d%d%d%d%s", 1) or
		mw.ustring.match(title, "%s%d%d%d%d%s", 1) or
		""
	year = trim(year)
	if year == "" then
		mw.log("no year")
		return ""
	end
	mw.log("year:" .. year .. ";Type:" .. Type .. ";title:" .. title)
	local y2 = year:gsub("%-", "%%-")
	if Type == "year" or Type == "y" then
		return year
	elseif Type == "noyear" or Type == "noy" then
		local t3 = title:gsub("^(.-)%s" .. y2, "%1")
		return t3
	elseif Type == "+1" or Type == "-1" then
		return get_year(year, Type)
	elseif Type == "title+1" or Type == "title-1" then
		local tyt = "+1" and Type == "title+1" or "-1"
		local year_2 = get_year(year, tyt)
		local title3 = title:gsub("^(.-)%s" .. y2, "%1") .. " " .. year_2
		return title3
	end
end
return p