<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AHijri</id>
	<title>وحدة:Hijri - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AHijri"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Hijri&amp;action=history"/>
	<updated>2026-06-05T19:08:28Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.43.7</generator>
	<entry>
		<id>https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Hijri&amp;diff=2304&amp;oldid=prev</id>
		<title>عبد العزيز: إصلاح عدم ظهور الاسماء الهجرية من وحدة الإعدادات</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Hijri&amp;diff=2304&amp;oldid=prev"/>
		<updated>2022-06-03T12:57:28Z</updated>

		<summary type="html">&lt;p&gt;إصلاح عدم ظهور الاسماء الهجرية من وحدة الإعدادات&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحة جديدة&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local cfg= mw.loadData(&amp;#039;Module:Hijri/Configuration&amp;#039;)&lt;br /&gt;
local core = require &amp;#039;Module:Hijri/core&amp;#039;&lt;br /&gt;
--[[ ----------------- I M P O R T --------------]]&lt;br /&gt;
gregorian2jd = core.gregorian2jd&lt;br /&gt;
jd2hijri = core.jd2hijri&lt;br /&gt;
hijri2jd = core.hijri2jd&lt;br /&gt;
hijri_days_in_month = core.hijri_days_in_month&lt;br /&gt;
hijri_isleap = core.hijri_isleap&lt;br /&gt;
hijri_yday = core.hijri_yday&lt;br /&gt;
jd2unix = core.jd2unix&lt;br /&gt;
unix2jd = core.unix2jd&lt;br /&gt;
jd2wday = core.jd2wday&lt;br /&gt;
jd2gregorian = core.jd2gregorian&lt;br /&gt;
gre_isleap = core.gre_isleap&lt;br /&gt;
gre_yday = core.gre_yday&lt;br /&gt;
gre_days_in_month = core.gre_days_in_month&lt;br /&gt;
jd2julian = core.jd2julian&lt;br /&gt;
julian2jd = core.julian2jd&lt;br /&gt;
julian_isleap = core.julian_isleap&lt;br /&gt;
julian_yday = core.julian_yday&lt;br /&gt;
julian_days_in_month = core.julian_days_in_month&lt;br /&gt;
gregorian2hijri = core.gregorian2hijri&lt;br /&gt;
hijri2gregorian = core.hijri2gregorian&lt;br /&gt;
Date = core.Date&lt;br /&gt;
hijri_check = core.hijri_check&lt;br /&gt;
string = mw.ustring&lt;br /&gt;
local str_hijri_mode = select(cfg.hijri_mode + 1, &amp;#039;hijri_tabular&amp;#039;, &amp;#039;hijri_adjusted_umalqura&amp;#039;, &amp;#039;hijri_umalqura&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
--[[---------------------- utilty function ----------------- ]]&lt;br /&gt;
local gtonumber = tonumber&lt;br /&gt;
&lt;br /&gt;
local function tonumber(str)&lt;br /&gt;
	if not str then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local thenumber = gtonumber(str) or mw.language.getContentLanguage():parseFormattedNumber(str)&lt;br /&gt;
	if not thenumber then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return math.floor(thenumber)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function substitute( msg, args )&lt;br /&gt;
	return args and mw.message.newRawMessage( msg, args ):plain() or msg;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function error( msg, args )&lt;br /&gt;
	return substitute( cfg.presentation.error, substitute( msg, args ) );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function towdigit(number)&lt;br /&gt;
	return ((number&amp;lt;10) and &amp;#039;0&amp;#039; or &amp;#039;&amp;#039;) .. number&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hijri_month_name(index)&lt;br /&gt;
	if cfg.hijri_months then&lt;br /&gt;
		return cfg.hijri_months[index]&lt;br /&gt;
	else&lt;br /&gt;
		return mw.message.new(&amp;#039;hijri-calendar-m&amp;#039; .. index):plain()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wday_name(index)&lt;br /&gt;
	if cfg.wday_name  then&lt;br /&gt;
		return cfg.wday_name[index]&lt;br /&gt;
	else&lt;br /&gt;
		return mw.message.new(select(index +1 ,&amp;#039;Sunday&amp;#039;,&amp;#039;Monday&amp;#039;, &amp;#039;Tuesday&amp;#039;, &amp;#039;Wednesday&amp;#039;, &amp;#039;Thursday&amp;#039;, &amp;#039;Friday&amp;#039;, &amp;#039;Saturday&amp;#039;)):plain()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function julian_month_name(index)&lt;br /&gt;
	if cfg.gregorian_months  then&lt;br /&gt;
		return cfg.gregorian_months[index]&lt;br /&gt;
	else&lt;br /&gt;
		return mw.message.new(select(index, &amp;#039;january&amp;#039;, &amp;#039;february&amp;#039;, &amp;#039;march&amp;#039;, &amp;#039;april&amp;#039;, &amp;#039;may_long&amp;#039;, &amp;#039;june&amp;#039;, &amp;#039;july&amp;#039;, &amp;#039;august&amp;#039;, &amp;#039;september&amp;#039;, &amp;#039;october&amp;#039;, &amp;#039;november&amp;#039;, &amp;#039;december&amp;#039;)):plain()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local format_func = {&lt;br /&gt;
	towdigit = towdigit,&lt;br /&gt;
	hijri_month_name = hijri_month_name,&lt;br /&gt;
	wday_name = wday_name,&lt;br /&gt;
	julian_month_name = julian_month_name&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function substitute( msg, args )&lt;br /&gt;
	return args and mw.message.newRawMessage( msg, args ):plain() or msg;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function error( msg, args )&lt;br /&gt;
	return substitute( cfg.presentation.error, substitute( msg, args ) );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function argument_wrapper(arg)&lt;br /&gt;
	local nilargs = {}&lt;br /&gt;
	return setmetatable({},&lt;br /&gt;
	{&lt;br /&gt;
		__index = function ( tbl, k )&lt;br /&gt;
			local v = rawget(tbl,k)&lt;br /&gt;
			if v then&lt;br /&gt;
				return v&lt;br /&gt;
			elseif nilargs[k] then&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
			local list = cfg.aliases[k];&lt;br /&gt;
			for _,arglist in ipairs(arg) do&lt;br /&gt;
				if type( list ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
					for _, alias_key in ipairs( list ) do&lt;br /&gt;
						if arglist[alias_key] then&lt;br /&gt;
							v = arglist[alias_key]&lt;br /&gt;
							break;&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				elseif list ~= nil then&lt;br /&gt;
					v = arglist[list]&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if v then&lt;br /&gt;
					break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if v == nil then&lt;br /&gt;
				nilargs[k] = true&lt;br /&gt;
			else&lt;br /&gt;
				rawset( tbl, k, v )&lt;br /&gt;
			end&lt;br /&gt;
			return v&lt;br /&gt;
		end,&lt;br /&gt;
	});&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_value_from_aliaes(aliases_tbl, arg_value)&lt;br /&gt;
	if arg_value  and aliases_tbl then&lt;br /&gt;
		for k, v_list in pairs(aliases_tbl) do&lt;br /&gt;
			if type(v_list) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
				if arg_value == v_list then&lt;br /&gt;
					return k&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				for _, v_value in ipairs(v_list) do&lt;br /&gt;
					if arg_value == v_value then&lt;br /&gt;
						return k&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
--[[ -------------------- frame functions ---------------------------------------]]&lt;br /&gt;
local function test(frame)&lt;br /&gt;
	return mw.language.getContentLanguage():formatDate(&amp;quot;Y n j&amp;quot;, &amp;#039;@-86400&amp;#039; ,true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_gregorian_from_hijri(frame)&lt;br /&gt;
	return mw.text.listToText({ hijri2gregorian(tonumber(frame.args[1]),tonumber(frame.args[2]),tonumber(frame.args[3])) },&amp;quot;-&amp;quot;,&amp;quot;-&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_hijri_from_gregorian(frame)&lt;br /&gt;
	d= Date(str_hijri_mode)&lt;br /&gt;
	d:from_gregorian(tonumber(frame.args[1]),tonumber(frame.args[2]),tonumber(frame.args[3]))&lt;br /&gt;
	return d&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function lua_format_date(A)&lt;br /&gt;
	local theformat = A.format or &amp;#039;xmj xmF xmY&amp;#039;&lt;br /&gt;
	local cDate&lt;br /&gt;
	if A.year and A.day and A.month then&lt;br /&gt;
		local year, month, day = tonumber(A.year), tonumber(A.month), tonumber(A.day)&lt;br /&gt;
		local source_cal = get_value_from_aliaes(cfg.cal_aliases, A.source_cal)&lt;br /&gt;
		if not source_cal then&lt;br /&gt;
			if day&amp;gt;30 or year &amp;gt; 1500 then&lt;br /&gt;
				source_cal = &amp;#039;gregorian&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				source_cal=&amp;#039;hijri&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local wday = get_value_from_aliaes(cfg.wday_aliases, A.wday)&lt;br /&gt;
		if source_cal == &amp;#039;hijri&amp;#039; then&lt;br /&gt;
			cDate = Date(str_hijri_mode)&lt;br /&gt;
			if wday then&lt;br /&gt;
				cDate:from_hijri(year,month,day,wday,cfg.hijri_mode)&lt;br /&gt;
			else&lt;br /&gt;
				cDate:set_date(year,month,day,true)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			cDate = Date(source_cal)&lt;br /&gt;
			if string.sub(source_cal,1,5) == &amp;#039;hijri&amp;#039; and wday then&lt;br /&gt;
				cDate:from_hijri(year,month,day,wday)&lt;br /&gt;
			else&lt;br /&gt;
				cDate:set_date(year,month,day)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif A.date then&lt;br /&gt;
		local tmpdate = mw.language.getContentLanguage():formatDate(&amp;#039;Y/n/j&amp;#039;, A.date)&lt;br /&gt;
		if tmpdate then&lt;br /&gt;
			local gre = mw.text.split(tmpdate,&amp;#039;/&amp;#039;)&lt;br /&gt;
			cDate = Date(&amp;#039;gregorian&amp;#039;,tonumber(gre[1]), tonumber(gre[2]), tonumber(gre[3]))&lt;br /&gt;
		else&lt;br /&gt;
			cDate = Date(&amp;#039;gregorian&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		cDate = Date(&amp;#039;gregorian&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if string.find(theformat, &amp;#039;x[muwg][jFntYyzdm]&amp;#039;) or string.find(theformat, &amp;#039;~[هميغ][يشرسلةع]0?&amp;#039;) then&lt;br /&gt;
		local lc_hijri_mode = get_value_from_aliaes(cfg.cal_aliases, A.hijri_cal_type) or str_hijri_mode&lt;br /&gt;
		-- date replaces&lt;br /&gt;
		local symbols = cfg.symbol_replace.symbols&lt;br /&gt;
		local dr = cfg.symbol_replace.calendars&lt;br /&gt;
		local pat, cal_type&lt;br /&gt;
		for drk,drv in pairs(dr) do&lt;br /&gt;
			cal_type = (drk == &amp;#039;hijri&amp;#039;) and lc_hijri_mode or drv.type&lt;br /&gt;
			for sym_pre_i, sym_pre in ipairs(drv.sym_pre) do&lt;br /&gt;
				if drv.symbols_pattern then&lt;br /&gt;
					pat = drv.symbols_pattern[sym_pre_i]&lt;br /&gt;
				else&lt;br /&gt;
					pat = sym_pre .. cfg.symbol_replace.default_symbol_pattern[sym_pre_i]&lt;br /&gt;
				end&lt;br /&gt;
				if string.find(theformat,pat) then&lt;br /&gt;
					cDate:set_type(cal_type)&lt;br /&gt;
					local tempformat,sy = theformat,&amp;#039;&amp;#039;&lt;br /&gt;
					local ss,se = string.find(tempformat,pat)&lt;br /&gt;
					theformat = &amp;#039;&amp;#039;&lt;br /&gt;
					while ss do&lt;br /&gt;
						sy = string.sub(tempformat,ss,se)&lt;br /&gt;
&lt;br /&gt;
						if ss &amp;gt; 1 then&lt;br /&gt;
							theformat = theformat .. string.sub(tempformat,1,ss-1)&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						if se &amp;lt; #tempformat then&lt;br /&gt;
							tempformat = string.sub(tempformat,se+1)&lt;br /&gt;
						else&lt;br /&gt;
							tempformat = &amp;#039;&amp;#039;&lt;br /&gt;
						end&lt;br /&gt;
					&lt;br /&gt;
						for sym, symv in pairs(symbols[sym_pre_i]) do&lt;br /&gt;
							if sy == sym_pre .. sym then&lt;br /&gt;
								if symv.func then&lt;br /&gt;
									if format_func[symv.func] then&lt;br /&gt;
										theformat = theformat .. format_func[symv.func](cDate[symv.rep])&lt;br /&gt;
									elseif format_func[drv.func[symv.func]] then&lt;br /&gt;
										theformat = theformat .. format_func[drv.func[symv.func]](cDate[symv.rep])&lt;br /&gt;
									else&lt;br /&gt;
										error(&amp;#039;Can`t find fromating function&amp;#039;)&lt;br /&gt;
									end&lt;br /&gt;
								else&lt;br /&gt;
									theformat = theformat .. cDate[symv.rep]&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						ss,se = string.find(tempformat,pat)&lt;br /&gt;
					end&lt;br /&gt;
					theformat = theformat .. tempformat&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if string.find(theformat,&amp;quot;[a-zA-Z]&amp;quot;) and (not A.pass_mw_time or A.pass_mw_time == &amp;#039;1&amp;#039; or A.pass_mw_time == &amp;#039;نعم&amp;#039;)  then&lt;br /&gt;
		cDate:set_type(&amp;#039;gregorian&amp;#039;)&lt;br /&gt;
		return  mw.language.getContentLanguage():formatDate(theformat, cDate.timestamp and (&amp;quot;@&amp;quot; .. cDate.timestamp) or cDate ,true)&lt;br /&gt;
	else&lt;br /&gt;
		return theformat&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function format_date(frame)&lt;br /&gt;
	local A = argument_wrapper({frame:getParent().args, frame.args})&lt;br /&gt;
	return lua_format_date(A)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return { test = test,&lt;br /&gt;
	get_gregorian_from_hijri = get_gregorian_from_hijri,&lt;br /&gt;
	get_hijri_from_gregorian =get_hijri_from_gregorian,&lt;br /&gt;
	format_date = format_date,&lt;br /&gt;
	lua_format_date=lua_format_date,&lt;br /&gt;
	julian_month_name = julian_month_name,&lt;br /&gt;
	hijri_month_name = hijri_month_name&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>