יחידה:תאריך עברי – הבדלי גרסאות

מ שוחזר מעריכות של יוסף בן מלמד (שיחה) לעריכה האחרונה של מ. רובין
תגית: שחזור
מ. רובין (שיחה | תרומות)
אין תקציר עריכה
שורה 1: שורה 1:
mtable = {"ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני",
mtable = { "ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני",
"יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר", }
"יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר", }


monthtable = {
monthtable = {
["תשרי"] = 7, ["חשוון"] = 8, ["כסלו"] = 9, ["טבת"] = 10,
["תשרי"] = 7,
["שבט"] = 11, ["אדר א'"] = 12, ["אדר ב'"] = 13, ["אדר"] = 13,
["חשוון"] = 8,
["ניסן"] = 1, ["אייר"] = 2, ["סיוון"] = 3, ["תמוז"] = 4,
["כסלו"] = 9,
["אב"] = 5, ["אלול"] = 6,
["טבת"] = 10,
}
["שבט"] = 11,
["אדר א'"] = 12,
["אדר ב'"] = 13,
["אדר"] = 13,
["ניסן"] = 1,
["אייר"] = 2,
["סיוון"] = 3,
["תמוז"] = 4,
["אב"] = 5,
["אלול"] = 6,
}
 
typomonthtable = {
["כסליו"] = "כסלו",
["חשון"] = "חשוון",
["סיון"] = "סיוון",
["מרחשון"] = "חשוון",
["מרחשוון"] = "חשוון",
["מר-חשוון"] = "חשוון",
["מנחם אב"] = "אב",
["מנחם-אב"] = "אב",
["שבט (חודש)|שבט"] = "שבט",
["שבט (חודש)"] = "שבט"
}


typomonthtable = {["חשון"] = "חשוון", ["כסליו"] = "כסלו",
lastletters = { ["כ"] = "ך", ["מ"] = "ם", ["נ"] = "ן", ["פ"] = "ף", ["צ"] = "ץ" }
["חשון"] = "חשוון", ["סיון"] = "סיוון",
["מרחשון"] = "חשוון", ["מרחשוון"] = "חשוון", ["מר-חשוון"] = "חשוון",
["מנחם אב"] = "אב", ["מנחם-אב"] = "אב",
["שבט (חודש)|שבט"] = "שבט", ["שבט (חודש)"] = "שבט"
}


lastletters = {["כ"] = "ך", ["מ"] = "ם", ["נ"] = "ן", ["פ"] = "ף", ["צ"] = "ץ"}
local langObject = mw.getContentLanguage()


function sub1(str, from, to)
function sub1(str, from, to)
שורה 28: שורה 46:
function len1(s)
function len1(s)
if (s == nil) then
if (s == nil) then
return 0 end
return 0
end
return mw.ustring.len(s)
return mw.ustring.len(s)
end
end
שורה 34: שורה 53:
function hebnum(s)
function hebnum(s)
numberstable = {
numberstable = {
["א"] = 1, ["ב"] = 2, ["ג"] = 3, ["ד"] = 4, ["ה"] = 5,
["א"] = 1,
["ו"] = 6, ["ז"] = 7, ["ח"] = 8, ["ט"] = 9, ["י"] = 10,  
["ב"] = 2,
["כ"] = 20, ["ך"] = 20, ["ל"] = 30, ["מ"] = 40, ["ם"] = 40,  
["ג"] = 3,
["נ"] = 50, ["ן"] = 50, ["ס"] = 60, ["ע"] = 70, ["פ"] = 80,  
["ד"] = 4,
["ף"] = 80, ["צ"] = 90, ["ץ"] = 90, ["ק"] = 100, ["ר"] = 200,  
["ה"] = 5,
["ש"] = 300, ["ת"] = 400, ["'"] = 0, ["\""] = 0,}
["ו"] = 6,
["ז"] = 7,
["ח"] = 8,
["ט"] = 9,
["י"] = 10,
["כ"] = 20,
["ך"] = 20,
["ל"] = 30,
["מ"] = 40,
["ם"] = 40,
["נ"] = 50,
["ן"] = 50,
["ס"] = 60,
["ע"] = 70,
["פ"] = 80,
["ף"] = 80,
["צ"] = 90,
["ץ"] = 90,
["ק"] = 100,
["ר"] = 200,
["ש"] = 300,
["ת"] = 400,
["'"] = 0,
["\""] = 0,
}
local ans = 0
local ans = 0
local str = s
local str = s
שורה 50: שורה 93:


function mindate(fix)
function mindate(fix)
local indenttable = {176, 206, 235, 265, 294, 324, 0, 30, 59, 88, 117, 147, 147}
local indenttable = { 176, 206, 235, 265, 294, 324, 0, 30, 59, 88, 117, 147, 147 }
return same("28-08-" .. takeyear(fix[3]) .. " + " .. (indenttable[monthtable[sub1(fix[2], 2)]]
return same("28-08-" .. takeyear(fix[3]) .. " + " .. (indenttable[monthtable[sub1(fix[2], 2)]]
+ hebnum(fix[1]) - 1) .. " days")
+ hebnum(fix[1]) - 1) .. " days")
שורה 57: שורה 100:
function takeyear(year)
function takeyear(year)
local new
local new
if 0 < find1(year, "אלפים")
if 0 < find1(year, "אלפים") then
then new = hebnum(sub1(year, 1, 2)) * 1000
new = hebnum(sub1(year, 1, 2)) * 1000
else new = hebnum(sub1(year, 3, len1(year))) + 1000
else
* hebnum(sub1((year), 1, 2)) end
new = hebnum(sub1(year, 3, len1(year))) + 1000
return frame:callParserFunction("padleft", {new - 3761, 4})
* hebnum(sub1((year), 1, 2))
end
return frame:callParserFunction("padleft", { new - 3761, 4 })
end
end


שורה 74: שורה 119:
local diffs = diff(greg)
local diffs = diff(greg)
if diffs < 0 then diffs = 0 end
if diffs < 0 then diffs = 0 end
greg = same(greg .. " - ".. diffs .. "days")
greg = same(greg .. " - " .. diffs .. "days")
checkcasp(greg)
checkcasp(greg)
if makeformat then
if makeformat then
return frame:callParserFunction("#זמןמ:" .. makeformat, greg)
return langObject:formatDate(makeformat, greg)
end
end
return format(greg) end
return format(greg)
end
count = count + 1
count = count + 1
end
end
שורה 86: שורה 132:


function exacttdate1(hyear)
function exacttdate1(hyear)
local wyear = frame:callParserFunction("padleft", {hebnum(sub1(hyear, 3, len1(hyear))) + 1000
local wyear = frame:callParserFunction("padleft", { hebnum(sub1(hyear, 3, len1(hyear))) + 1000
* hebnum(sub1(hyear, 1, 2)) - 3761, 4})
* hebnum(sub1(hyear, 1, 2)) - 3761, 4 })
checkcasp("01-01-" .. wyear)
checkcasp("01-01-" .. wyear)
return wyear .. "-" .. frame:callParserFunction("padleft", {wyear + 1, 4})
return wyear .. "-" .. frame:callParserFunction("padleft", { wyear + 1, 4 })
end
end


function opposite(gdate, format)
function opposite(gdate, format)
if samesame == true
if samesame == true then
then samesame = false
samesame = false
return format(gdate) end
return format(gdate)
end
end
end


function from(gdate)
function from(gdate)
local ans = opposite(gdate, to)
local ans = opposite(gdate, to)
if ans ~= nil
if ans ~= nil then
then return ans end
return ans
if frame.args["links"] == "yes"
end
then return "[[" .. frame:callParserFunction("#זמןמ:xhxjj xjx", gdate) .. "]] [["
if frame.args["links"] == "yes" then
.. frame:callParserFunction("#זמןמ:xhxjY", gdate) .. "]]" end
return "[[" .. langObject:formatDate("xhxjj xjx", gdate) .. "]] [["
return frame:callParserFunction("#זמןמ:xhxjj xjx xhxjY", gdate)
.. langObject:formatDate("xhxjY", gdate) .. "]]"
end
return langObject:formatDate("xhxjj xjx xhxjY", gdate)
end
end


function frommonth(gdate)
function frommonth(gdate)
local ans = opposite(gdate, tomonth)
local ans = opposite(gdate, tomonth)
if ans ~= nil
if ans ~= nil then
then return ans end
return ans
if frame.args["links"] == "yes"
end
then return "[[" .. frame:callParserFunction("#זמןמ:xjF", gdate) .. "]] [["
if frame.args["links"] == "yes" then
.. frame:callParserFunction("#זמןמ:xhxjY", gdate) .. "]]" end
return "[[" .. langObject:formatDate("xjF", gdate) .. "]] [["
return frame:callParserFunction("#זמןמ:xjF xhxjY", gdate)
.. langObject:formatDate("xhxjY", gdate) .. "]]"
end
return langObject:formatDate("xjF xhxjY", gdate)
end
end


function fromonlymonth(gdate)
function fromonlymonth(gdate)
local ans = opposite(gdate, toonlymonth)
local ans = opposite(gdate, toonlymonth)
if ans ~= nil
if ans ~= nil then
then return ans end
return ans
if frame.args["links"] == "yes"
end
then return "[[" .. frame:callParserFunction("#זמןמ:xjF", gdate) .. "]]" end
if frame.args["links"] == "yes" then
return frame:callParserFunction("#זמןמ:xjF", gdate)
return "[[" .. langObject:formatDate("xjF", gdate) .. "]]"
end
return langObject:formatDate("xjF", gdate)
end
end


function fromyear(gdate)
function fromyear(gdate)
local ans = opposite(gdate, toyear)
local ans = opposite(gdate, toyear)
if ans ~= nil
if ans ~= nil then
then return ans end
return ans
if frame.args["links"] == "yes"
end
then return "[[" .. frame:callParserFunction("#זמןמ:xhxjY", gdate) .. "]]" end
if frame.args["links"] == "yes" then
return frame:callParserFunction("#זמןמ:xhxjY", gdate)
return "[[" .. langObject:formatDate("xhxjY", gdate) .. "]]"
end
return langObject:formatDate("xhxjY", gdate)
end
end


function same(gdate)
function same(gdate)
return frame:callParserFunction("#זמןמ:d-m-Y", gdate)
return langObject:formatDate("d-m-Y", gdate)
end
end


function makeyear(gdate)
function makeyear(gdate)
local year = frame:callParserFunction("#זמןמ:Y", gdate)
local year = langObject:formatDate("Y", gdate)
if tonumber(year) < 1000 and which
if tonumber(year) < 1000 and which
then year = sub1(year, 2)
then
year = sub1(year, 2)
end
end
return year
return year
שורה 150: שורה 206:
function to(gdate)
function to(gdate)
local year = makeyear(gdate)
local year = makeyear(gdate)
if frame.args["links"] == "yes"
if frame.args["links"] == "yes" then
then return "[[" .. frame:callParserFunction("#זמןמ:j בF", gdate) .. "]] [["
return "[[" .. langObject:formatDate("j בF", gdate) .. "]] [["
.. year .. "]]" end
.. year .. "]]"
return frame:callParserFunction("#זמןמ:j בF", gdate) .. " " .. year
end
return langObject:formatDate("j בF", gdate) .. " " .. year
end
end


function tomonth(gdate)
function tomonth(gdate)
local year = makeyear(gdate)
local year = makeyear(gdate)
if frame.args["links"] == "yes"
if frame.args["links"] == "yes" then
then return "[[" .. frame:callParserFunction("#זמןמ:F", gdate) .. "]] [["
return "[[" .. langObject:formatDate("F", gdate) .. "]] [["
.. year .. "]]" end
.. year .. "]]"
return frame:callParserFunction("#זמןמ:F", gdate) .. " " .. year
end
return langObject:formatDate("F", gdate) .. " " .. year
end
end


function toonlymonth(gdate)
function toonlymonth(gdate)
if frame.args["links"] == "yes"
if frame.args["links"] == "yes" then
then return "[[" .. frame:callParserFunction("#זמןמ:F", gdate) .. "]]" end
return "[[" .. langObject:formatDate("F", gdate) .. "]]"
return frame:callParserFunction("#זמןמ:F", gdate)
end
return langObject:formatDate("F", gdate)
end
end


function toyear(gdate)
function toyear(gdate)
local year = makeyear(gdate)
local year = makeyear(gdate)
if frame.args["links"] == "yes"
if frame.args["links"] == "yes" then
then return "[[" .. year .. "]]" end
return "[[" .. year .. "]]"
end
return year
return year
end
end
שורה 183: שורה 243:
for m, mm in pairs(typomonthtable) do
for m, mm in pairs(typomonthtable) do
point = find1(hdate, m)
point = find1(hdate, m)
if point > 0 and max < len1(m)
if point > 0 and max < len1(m) then
then max = len1(m)
max = len1(m)
place = m end
place = m
end
end
if max > 0 then
point = find1(hdate, place)
return sub1(hdate, 1, point - 1) .. typomonthtable[place] .. sub1(hdate, point + len1(place))
end
end
if max > 0
then point = find1(hdate, place)
return sub1(hdate, 1, point - 1) .. typomonthtable[place] .. sub1(hdate, point + len1(place)) end
return hdate
return hdate
end
end
שורה 195: שורה 257:
function fixdate(hdate1)
function fixdate(hdate1)
local hdate = fixmonth(hdate1)
local hdate = fixmonth(hdate1)
if 1 == find1(hdate, "ראש חודש")
if 1 == find1(hdate, "ראש חודש") then
then hdate = "א' ב" .. sub1(hdate, 10) end
hdate = "א' ב" .. sub1(hdate, 10)
end
local h1, h2, h3 = parts(hdate)
local h1, h2, h3 = parts(hdate)
--[=[
--[=[
local s1 = find1(hdate, " ")
local s1 = find1(hdate, " ")
local s2 = find1(hdate, " ", s1 + 1)
local s2 = find1(hdate, " ", s1 + 1)
שורה 209: שורה 272:
]=]
]=]
if (len1(h3) > 1 and sub1(h3, 2, 2) ~= "'") then
if (len1(h3) > 1 and sub1(h3, 2, 2) ~= "'") then
h3 = "ה'" .. h3 end
h3 = "ה'" .. h3
--[=[
end
--[=[
for m, mm in pairs(typomonthtable) do
for m, mm in pairs(typomonthtable) do
if h2 == "ב" .. m
if h2 == "ב" .. m
שורה 217: שורה 281:
]=]
]=]
for y, yy in pairs(lastletters) do
for y, yy in pairs(lastletters) do
if sub1(h3, len1(h3)) == y
if sub1(h3, len1(h3)) == y then
then h3 = sub1(h3, 1, len1(h3) - 1) .. yy end
h3 = sub1(h3, 1, len1(h3) - 1) .. yy
end
end
end
return {h1, h2, h3, h1 .. " " .. h2 .. " " .. h3}
return { h1, h2, h3, h1 .. " " .. h2 .. " " .. h3 }
end
end


function fixerror(message)
function fixerror(message)
if message == "---"
if message == "---" then
then return "" end
return ""
end
return frame:preprocess(message)
return frame:preprocess(message)
end
end
שורה 241: שורה 307:
for f, ff in pairs(mtable) do
for f, ff in pairs(mtable) do
if "ב" .. ff == h2 then
if "ב" .. ff == h2 then
return h1 .. "-" .. frame:callParserFunction("padleft", {f, 2})
return h1 .. "-" .. frame:callParserFunction("padleft", { f, 2 })
.. "-" .. frame:callParserFunction("padleft", {h3, 4}) end
.. "-" .. frame:callParserFunction("padleft", { h3, 4 })
end
end
end
end
end
שורה 249: שורה 316:
local s1 = find1(wdate, "-")
local s1 = find1(wdate, "-")
local s2 = find1(wdate, "-", s1 + 1)
local s2 = find1(wdate, "-", s1 + 1)
return {tonumber(sub1(wdate, 1, s1 - 1)),
return { tonumber(sub1(wdate, 1, s1 - 1)),
tonumber(sub1(wdate, s1 + 1, s2 - 1)),
tonumber(sub1(wdate, s1 + 1, s2 - 1)),
tonumber(sub1(wdate, s2 + 1, len1(wdate)))}
tonumber(sub1(wdate, s2 + 1, len1(wdate))) }
end
end


שורה 260: שורה 327:
local wmonth = wdate[2]
local wmonth = wdate[2]
local wyear = wdate[3]
local wyear = wdate[3]
if wyear > 1582 or (wyear == 1582 and (wmonth > 10 or (wmonth == 10 and wday > 14)))
if wyear > 1582 or (wyear == 1582 and (wmonth > 10 or (wmonth == 10 and wday > 14))) then
then ans = 0
ans = 0
else local ytable = {200, 300, 500, 600, 700, 900, 1000, 1100, 1300, 1400, 1500}
else
ans = 10
local ytable = { 200, 300, 500, 600, 700, 900, 1000, 1100, 1300, 1400, 1500 }
if wmonth < 3
ans = 10
then wyear = wyear - 1 end
if wmonth < 3 then
for y, yy in pairs(ytable) do
wyear = wyear - 1
if yy > wyear
end
then ans = ans - 1 end
for y, yy in pairs(ytable) do
end end
if yy > wyear then
ans = ans - 1
end
end
end
return ans
return ans
end
end


function remove(dateStr) -- Thanks to Eran
function remove(dateStr) -- Thanks to Eran
dateStr = mw.ustring.gsub( dateStr, "[%[%]]", "" )
dateStr = mw.ustring.gsub(dateStr, "[%[%]]", "")
dateStr = mw.ustring.gsub(dateStr, "(\127UNIQ[^\127]+QINU\127)", "")
dateStr = mw.ustring.gsub(dateStr, "(\127UNIQ[^\127]+QINU\127)", "")
dateStr = mw.ustring.gsub(dateStr, "&rlm;","")
dateStr = mw.ustring.gsub(dateStr, "&rlm;", "")
dateStr = mw.ustring.gsub(dateStr, "&lrm;","")
dateStr = mw.ustring.gsub(dateStr, "&lrm;", "")
return dateStr
return dateStr
end
end
שורה 284: שורה 355:
local wnumbers = numtonums(wdate)
local wnumbers = numtonums(wdate)
if wnumbers[3] < 360 or wnumbers[3] > 4357 or
if wnumbers[3] < 360 or wnumbers[3] > 4357 or
(wnumbers[3] == 1582 and wnumbers[2] == 10 and wnumbers[1] > 4 and wnumbers[1] < 15)
(wnumbers[3] == 1582 and wnumbers[2] == 10 and wnumbers[1] > 4 and wnumbers[1] < 15)
then error("The date is not in the allowed casp", 0) end
then
error("The date is not in the allowed casp", 0)
end
end
end


function fromhebrewyear(hyear)
function fromhebrewyear(hyear)
ans = fromhebrewdate("א' בניסן " .. hyear, toyear)
ans = fromhebrewdate("א' בניסן " .. hyear, toyear)
if frame.args["exact"] ~= "כן"
if frame.args["exact"] ~= "כן" then
then ans = ans .. "-" .. fromhebrewdate("א' בתשרי " .. hyear, toyear)
ans = ans .. "-" .. fromhebrewdate("א' בתשרי " .. hyear, toyear)
end
end
return ans
return ans
שורה 297: שורה 370:


function fromhebrewmonth(hdate)
function fromhebrewmonth(hdate)
if frame.args["exact"] == "כן"
if frame.args["exact"] == "כן" then
then return fromhebrewdate('ט"ו ב' .. hdate, tomonth) end
return fromhebrewdate('ט"ו ב' .. hdate, tomonth)
end
local date1 = fromhebrewdate("א' ב" .. hdate, same)
local date1 = fromhebrewdate("א' ב" .. hdate, same)
local month1 = toonlymonth(date1)
local month1 = toonlymonth(date1)
שורה 308: שורה 382:
local month2 = toonlymonth(date2)
local month2 = toonlymonth(date2)
local year2 = toyear(date2)
local year2 = toyear(date2)
if year1 ~= year2
if year1 ~= year2 then
then return month1 .. " " .. year1 .. " - " .. month2 .. " " .. year2
return month1 .. " " .. year1 .. " - " .. month2 .. " " .. year2
elseif month1 ~= month2
elseif month1 ~= month2 then
then return month1 .. "-" .. month2 .. " " .. year1
return month1 .. "-" .. month2 .. " " .. year1
else return month1 .. " " .. year1 end
else
return month1 .. " " .. year1
end
end
end


שורה 322: שורה 398:
function fromhebrew1(hdate)
function fromhebrew1(hdate)
local ht, rem = findhdatetype(fixmonth(hdate))
local ht, rem = findhdatetype(fixmonth(hdate))
if ht == "dmy"
if ht == "dmy" then
then return ifwhich(fromhebrewdate(rem, to))
return ifwhich(fromhebrewdate(rem, to))
elseif ht == "my"
elseif ht == "my" then
then return ifwhich(fromhebrewmonth(rem))
return ifwhich(fromhebrewmonth(rem))
elseif ht == "y"
elseif ht == "y" then
then return ifwhich(fromhebrewyear(rem))
return ifwhich(fromhebrewyear(rem))
else error("Wrong type: " .. ht, 0) end
else
error("Wrong type: " .. ht, 0)
end
end
end


שורה 334: שורה 412:
local rem = mw.text.trim(remove(hdate))
local rem = mw.text.trim(remove(hdate))
local day, month, year = parts(hdate)
local day, month, year = parts(hdate)
if day ~= nil
if day ~= nil then
then return "dmy", rem end
return "dmy", rem
if month ~= nil
end
then return "my", rem end
if month ~= nil then
return "my", rem
end
return "y", rem
return "y", rem
--[=[
--[=[
for m, mm in pairs(monthtable) do
for m, mm in pairs(monthtable) do
if find1(rem, m) == 1 then
if find1(rem, m) == 1 then
שורה 365: שורה 445:
which = false
which = false
local success, res = pcall(pick1, frame.args[1], frame.args[2], "[[קטגוריה:חוסר מתאם בין תאריך עברי לתאריך לועזי]]")
local success, res = pcall(pick1, frame.args[1], frame.args[2], "[[קטגוריה:חוסר מתאם בין תאריך עברי לתאריך לועזי]]")
if not success
if not success then
then res = "" end
res = ""
end
local ans = ""
local ans = ""
if f.args[2] ~= ""
if f.args[2] ~= "" then
then ans = tohebrew0(f.args[2]) end
ans = tohebrew0(f.args[2])
if f.args[1] ~= ""
end
then ans = ans .. fromhebrewandverify(f) end
if f.args[1] ~= "" then
ans = ans .. fromhebrewandverify(f)
end
return res .. ans
return res .. ans
end
end
שורה 378: שורה 461:
frame = f
frame = f
local success, res = pcall(fromhebrew1, frame.args[1])
local success, res = pcall(fromhebrew1, frame.args[1])
if success
if success then
then return ifwhich(res)
return ifwhich(res)
elseif frame.args["about"] == "כן" and
elseif frame.args["about"] == "כן" and
frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = frame.args[1]}}) ~= ""
frame:expandTemplate({ title = "גיל לערכי אישים/מקורב", args = { str = frame.args[1] } }) ~= "" then
then return ifwhich(frame.args[1], "[[קטגוריה:דפים עם תאריך עברי מקורב]]")
return ifwhich(frame.args[1], "[[קטגוריה:דפים עם תאריך עברי מקורב]]")
elseif frame.args["error"] == nil
elseif frame.args["error"] == nil then
then return aserror(res) end
return aserror(res)
end
return fixerror(frame.args["error"])
return fixerror(frame.args["error"])
end
end
שורה 390: שורה 474:
function tohebrewyear(gyear)
function tohebrewyear(gyear)
ans = tohebrewnum("01-01-" .. gyear, fromyear)
ans = tohebrewnum("01-01-" .. gyear, fromyear)
if frame.args["exact"] ~= "כן"
if frame.args["exact"] ~= "כן" then
then ans = ans .. "-" .. tohebrewnum("01-12-" .. gyear, fromyear)
ans = ans .. "-" .. tohebrewnum("01-12-" .. gyear, fromyear)
end
end
return ifwhich(ans)
return ifwhich(ans)
שורה 397: שורה 481:


function tohebrewmonth(wdate)
function tohebrewmonth(wdate)
if frame.args["exact"] == "כן"
if frame.args["exact"] == "כן" then
then return tohebrewdate("15 ב" .. wdate, frommonth) end
return tohebrewdate("15 ב" .. wdate, frommonth)
end
local date1 = tohebrewdate("1 ב" .. wdate, same)
local date1 = tohebrewdate("1 ב" .. wdate, same)
local month1 = fromonlymonth(date1)
local month1 = fromonlymonth(date1)
שורה 408: שורה 493:
local month2 = fromonlymonth(date2)
local month2 = fromonlymonth(date2)
local year2 = fromyear(date2)
local year2 = fromyear(date2)
if year1 ~= year2
if year1 ~= year2 then
then return ifwhich(month1 .. " " .. year1 .. " - " .. month2 .. " " .. year2)
return ifwhich(month1 .. " " .. year1 .. " - " .. month2 .. " " .. year2)
elseif month1 ~= month2
elseif month1 ~= month2 then
then return ifwhich(month1 .. "-" .. month2 .. " " .. year1)
return ifwhich(month1 .. "-" .. month2 .. " " .. year1)
else return ifwhich(month1 .. " " .. year1) end
else
return ifwhich(month1 .. " " .. year1)
end
end
end


שורה 418: שורה 505:
local s1 = find1(rem, " ")
local s1 = find1(rem, " ")
local s2 = find1(rem, " ", s1 + 1)
local s2 = find1(rem, " ", s1 + 1)
if len1(rem) - s2 == 3
if len1(rem) - s2 == 3 then
then rem = sub1(rem, 1, s2) .. "0" .. sub1(rem, s2 + 1) end
rem = sub1(rem, 1, s2) .. "0" .. sub1(rem, s2 + 1)
end
local take = takenumbers(rem)
local take = takenumbers(rem)
if remove(to(take)) ~= rem
if remove(to(take)) ~= rem then
then error("wrong date", 0) end
error("wrong date", 0)
end
checkcasp(take)
checkcasp(take)
take = same(take .. " + " .. diff(take) .. " days")
take = same(take .. " + " .. diff(take) .. " days")
שורה 429: שורה 518:


function tohebrewnum(wdate, format)
function tohebrewnum(wdate, format)
if find1(wdate, "-", 3) == 3 and find1(wdate, "-", 6) == 6 and len1(wdate) == 9
if find1(wdate, "-", 3) == 3 and find1(wdate, "-", 6) == 6 and len1(wdate) == 9 then
then wdate = sub1(wdate, 1, 6) .. "0" .. sub1(wdate, 7, 9) end
wdate = sub1(wdate, 1, 6) .. "0" .. sub1(wdate, 7, 9)
if same(wdate) ~= wdate
end
then error("wrong date", 0) end
if same(wdate) ~= wdate then
error("wrong date", 0)
end
checkcasp(wdate)
checkcasp(wdate)
wdate = same(wdate .. " + " .. diff(wdate) .. " days")
wdate = same(wdate .. " + " .. diff(wdate) .. " days")
שורה 441: שורה 532:
local rem = mw.text.trim(remove(wdate))
local rem = mw.text.trim(remove(wdate))
if find1(rem, "-") ~= 0 then
if find1(rem, "-") ~= 0 then
return "num", rem end
return "num", rem
end
for m, mm in pairs(mtable) do
for m, mm in pairs(mtable) do
if find1(rem, mm) == 1 then
if find1(rem, mm) == 1 then
return "my", rem end
return "my", rem
end
end
end
if tonumber(rem) ~= nil and tonumber(rem) .. "" == rem then
if tonumber(rem) ~= nil and tonumber(rem) .. "" == rem then
return "y", rem end
return "y", rem
end
return "dmy", rem
return "dmy", rem
end
end
שורה 453: שורה 547:
function tohebrew1(wdate)
function tohebrew1(wdate)
local w, rem = findwdatetype(wdate)
local w, rem = findwdatetype(wdate)
if w == "num"
if w == "num" then
then return tohebrewnum(rem, from)
return tohebrewnum(rem, from)
elseif w == "dmy"
elseif w == "dmy" then
then return tohebrewdate(rem, from)
return tohebrewdate(rem, from)
elseif w == "my"
elseif w == "my" then
then return tohebrewmonth(rem)
return tohebrewmonth(rem)
elseif w == "y"
elseif w == "y" then
then return tohebrewyear(rem)
return tohebrewyear(rem)
else error("Wrong type: " .. ht, 0) end
else
error("Wrong type: " .. ht, 0)
end
end
end


function pick1(hdate, wdate, cat)
function pick1(hdate, wdate, cat)
local ht, wt, hrem, wrem, hdw, wdh, hsuccess, wsuccess, thsuccess, twsuccess
local ht, wt, hrem, wrem, hdw, wdh, hsuccess, wsuccess, thsuccess, twsuccess
if cat == nil
if cat == nil then
then which = true
which = true
ht, hrem = findhdatetype(hdate)
ht, hrem = findhdatetype(hdate)
wt, wrem = findwdatetype(wdate)
wt, wrem = findwdatetype(wdate)
else thsuccess, ht, hrem = pcall(findhdatetype, hdate)
else
twsuccess, wt, wrem = pcall(findwdatetype, wdate)
thsuccess, ht, hrem = pcall(findhdatetype, hdate)
hsuccess = false
twsuccess, wt, wrem = pcall(findwdatetype, wdate)
wsuccess = false end
hsuccess = false
if hrem == ""
wsuccess = false
then ht = "empty"
end
else hsuccess, hdw = pcall(fromhebrew1, hrem)
if hrem == "" then
if not hsuccess
ht = "empty"
then ht = "about" end end
else
if wrem == ""
hsuccess, hdw = pcall(fromhebrew1, hrem)
then wt = "empty"
if not hsuccess then
else wsuccess, wdh = pcall(tohebrew1, wrem)
ht = "about"
if not wsuccess
end
then wt = "about" end end
end
if cat ~= nil
if wrem == "" then
then if ht == "dmy" and wt ~= "dmy"
wt = "empty"
then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך "  
else
.. frame.args["type"] .. " עברי מדויק]]" end
wsuccess, wdh = pcall(tohebrew1, wrem)
if ht ~= "dmy" and wt == "dmy"
if not wsuccess then
then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך "  
wt = "about"
.. frame.args["type"] .. " לועזי מדויק]]" end
end
-- if ht == "dmy" or ht == "my" or ht == "y"
end
-- then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך "  
if cat ~= nil then
-- .. frame.args["type"] .. " לועזי מדויק]]" end
if ht == "dmy" and wt ~= "dmy"
return "" end
then
if wsuccess and hsuccess
return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך "
then if wt == "dmy" then return wdate
.. frame.args["type"] .. " עברי מדויק]]"
elseif ht == "dmy" then return hdw
end
elseif wt == "my" then return wdate
if ht ~= "dmy" and wt == "dmy" then
elseif ht == "my" then return hdw
return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך "
elseif wt == "y" then return wdate
.. frame.args["type"] .. " לועזי מדויק]]"
else return hdw end
end
elseif wsuccess then return wdate
-- if ht == "dmy" or ht == "my" or ht == "y"
elseif hsuccess then return hdw
-- then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך "
elseif wt == "about" then return wdate
-- .. frame.args["type"] .. " לועזי מדויק]]" end
else return hdate end
return ""
end
if wsuccess and hsuccess then
if wt == "dmy" then
return wdate
elseif ht == "dmy" then
return hdw
elseif wt == "my" then
return wdate
elseif ht == "my" then
return hdw
elseif wt == "y" then
return wdate
else
return hdw
end
elseif wsuccess then
return wdate
elseif hsuccess then
return hdw
elseif wt == "about" then
return wdate
else
return hdate
end
end
end


function checkcat(adate, cat)
function checkcat(adate, cat)
if cat == nil
if cat == nil then
then return adate end
return adate
end
return cat
return cat
end
end
שורה 520: שורה 641:
local habout = false
local habout = false
local wabout = false
local wabout = false
if frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = hebrew}}) ~= ""
if frame:expandTemplate({ title = "גיל לערכי אישים/מקורב", args = { str = hebrew } }) ~= ""
then hebrew = ""
then
habout = true end
hebrew = ""
if frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = world}}) ~= ""
habout = true
then world = ""
end
wabout = true end
if frame:expandTemplate({ title = "גיל לערכי אישים/מקורב", args = { str = world } }) ~= ""
then
world = ""
wabout = true
end
local success, res = pcall(pick1, hebrew, world)
local success, res = pcall(pick1, hebrew, world)
if success
if success then
then if habout and world == ""
if habout and world == "" then
then return frame.args["hebrew"] end
return frame.args["hebrew"]
if wabout and hebrew == ""
end
then return frame.args["world"] end
if wabout and hebrew == "" then
return res
return frame.args["world"]
elseif frame.args["error"] == nil
end
then return aserror(res) end
return res
elseif frame.args["error"] == nil then
return aserror(res)
end
return fixerror(frame.args["error"])
return fixerror(frame.args["error"])
end
end
שורה 540: שורה 668:
function tohebrew0(wdate)
function tohebrew0(wdate)
local success, res = pcall(tohebrew1, wdate)
local success, res = pcall(tohebrew1, wdate)
if success
if success then
then return res
return res
elseif frame.args["about"] == "כן" and
elseif frame.args["about"] == "כן" and
frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = wdate}}) ~= ""
frame:expandTemplate({ title = "גיל לערכי אישים/מקורב", args = { str = wdate } }) ~= "" then
then return ifwhich(frame.args[1], "[[קטגוריה:דפים עם תאריך מקורב]]")
return ifwhich(frame.args[1], "[[קטגוריה:דפים עם תאריך מקורב]]")
elseif frame.args["error"] == nil
elseif frame.args["error"] == nil then
then return aserror(res) end
return aserror(res)
end
return fixerror(frame.args["error"])
return fixerror(frame.args["error"])
end
end
שורה 564: שורה 693:


function ifwhich(ans, noans)
function ifwhich(ans, noans)
if noans == nil
if noans == nil then
then noans = "" end
noans = ""
if which
end
then return ans
if which then
else return noans end
return ans
else
return noans
end
end
end


function parts(hdate)
function parts(hdate)
local funcs = {
local funcs = {
{function() return w[1] end},
{ function() return w[1] end },
{function() return w[2], w[1] end,
{ function() return w[2], w[1] end,
function() return c(w[2], w[1]) end},
function() return c(w[2], w[1]) end },
{function() return w[3], w[2], w[1] end,
{ function() return w[3], w[2], w[1] end,
function() return c(w[3], w[2]), w[1] end,
function() return c(w[3], w[2]), w[1] end,
function() return w[3], c(w[2], w[1]) end},
function() return w[3], c(w[2], w[1]) end },
{function() return w[4], c(w[3], w[2]), w[1] end,
{ function() return w[4], c(w[3], w[2]), w[1] end,
function() return c(w[4], w[3]), w[2], w[1] end,
function() return c(w[4], w[3]), w[2], w[1] end,
nil,
nil,
function() return c(w[4], w[3]), c(w[2], w[1]) end},
function() return c(w[4], w[3]), c(w[2], w[1]) end },
{nil,
{ nil,
function() return c(w[5], w[4]), c(w[3], w[2]), w[1] end}}
function() return c(w[5], w[4]), c(w[3], w[2]), w[1] end } }
function c(x, y) return y .. " " .. x end
function c(x, y) return y .. " " .. x end
w = takewords(hdate)
w = takewords(hdate)
local code = 1
local code = 1
if 0 < find1(hdate, "אלפים")
if 0 < find1(hdate, "אלפים") then
then code = code + 1 end
code = code + 1
if 1 == find1(hdate, "אדר א")
end
then code = code + 2 end
if 1 == find1(hdate, "אדר א") then
if 1 == find1(hdate, "אדר ב")
code = code + 2
then code = code + 2 end
end
if 1 == find1(hdate, "אדר ב") then
code = code + 2
end
local year, month, day = funcs[#w][code]()
local year, month, day = funcs[#w][code]()
return day, month, year
return day, month, year
שורה 611: שורה 747:
end
end


return {fromhebrew = fromhebrew, tohebrew = tohebrew, verify = verify, pick = pick, samedate = samedate,
return {
fromhebrewformat = fromhebrewformat}
fromhebrew = fromhebrew,
tohebrew = tohebrew,
verify = verify,
pick = pick,
samedate = samedate,
fromhebrewformat = fromhebrewformat
}