יחידה:תאריך עברי: הבדלים בין גרסאות בדף

אין תקציר עריכה
מ 197 גרסאות של הדף wikipedia:he:יחידה:תאריך_עברי יובאו
 
(62 גרסאות ביניים של 5 משתמשים אינן מוצגות)
שורה 9: שורה 9:
}
}


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


lastletters = {["כ"] = "ך", ["מ"] = "ם", ["נ"] = "ן", ["פ"] = "ף", ["צ"] = "ץ"}
lastletters = {["כ"] = "ך", ["מ"] = "ם", ["נ"] = "ן", ["פ"] = "ף", ["צ"] = "ץ"}
שורה 22: שורה 23:


function find1(str, what, where)
function find1(str, what, where)
local ans = mw.ustring.find(str, what, where, true)
return mw.ustring.find(str, what, where, true) or 0
if (ans == nil) then
ans = 0 end
return ans
end
end


שורה 53: שורה 51:
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-" .. frame:callParserFunction("padleft", {hebnum(sub1(fix[3], 3, len1(fix[3]))) + 1000
return same("28-08-" .. takeyear(fix[3]) .. " + " .. (indenttable[monthtable[sub1(fix[2], 2)]]
* hebnum(sub1((fix[3]), 1, 2)) - 3761, 4}) .. " + " .. (indenttable[monthtable[sub1(fix[2], 2)]]
+ hebnum(fix[1]) - 1) .. " days")
+ hebnum(fix[1]) - 1) .. " days")
end
function takeyear(year)
local new
if 0 < find1(year, "אלפים")
then new = hebnum(sub1(year, 1, 2)) * 1000
else new = hebnum(sub1(year, 3, len1(year))) + 1000
* hebnum(sub1((year), 1, 2)) end
return frame:callParserFunction("padleft", {new - 3761, 4})
end
end


שורה 64: שורה 70:
while (count < 82) do
while (count < 82) do
ans = mindate .. " + " .. count .. " days"
ans = mindate .. " + " .. count .. " days"
if (from(ans) == hdate) then
if (remove(from(ans)) == hdate) then
greg = same(ans)
greg = same(ans)
local diffs = diff(greg)
local diffs = diff(greg)
שורה 70: שורה 76:
greg = same(greg .. " - ".. diffs .. "days")
greg = same(greg .. " - ".. diffs .. "days")
checkcasp(greg)
checkcasp(greg)
if makeformat then
return frame:callParserFunction("#זמןמ:" .. makeformat, greg)
end
return format(greg) end
return format(greg) end
count = count + 1
count = count + 1
end
end
error("Date not found")
error("Date not found", 0)
end
end


שורה 81: שורה 90:
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
function opposite(gdate, format)
if samesame == true
then samesame = false
return format(gdate) end
end
end


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


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


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


function fromyear(gdate)
function fromyear(gdate)
local ans = opposite(gdate, toyear)
if ans ~= nil
then return ans end
if frame.args["links"] == "yes"
then return "[[" .. frame:callParserFunction("#זמןמ:xhxjY", gdate) .. "]]" end
return frame:callParserFunction("#זמןמ:xhxjY", gdate)
return frame:callParserFunction("#זמןמ:xhxjY", gdate)
end
end
שורה 101: שורה 138:
function same(gdate)
function same(gdate)
return frame:callParserFunction("#זמןמ:d-m-Y", gdate)
return frame:callParserFunction("#זמןמ:d-m-Y", gdate)
end
function makeyear(gdate)
local year = frame:callParserFunction("#זמןמ:Y", gdate)
if tonumber(year) < 1000 and which
then year = sub1(year, 2)
end
return year
end
end


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


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


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


function toyear(gdate)
function toyear(gdate)
return frame:callParserFunction("#זמןמ:Y", gdate)
local year = makeyear(gdate)
if frame.args["links"] == "yes"
then return "[[" .. year .. "]]" end
return year
end
 
function fixmonth(hdate)
local point
local max = 0
local place = 0
for m, mm in pairs(typomonthtable) do
point = find1(hdate, m)
if point > 0 and max < len1(m)
then max = len1(m)
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
return hdate
end
end


function fixdate(hdate)
function fixdate(hdate1)
local hdate = fixmonth(hdate1)
if 1 == find1(hdate, "ראש חודש")
if 1 == find1(hdate, "ראש חודש")
then hdate = "א' ב" .. sub1(hdate, 10) end
then hdate = "א' ב" .. sub1(hdate, 10) end
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)
שורה 130: שורה 207:
h2 = sub1(hdate, s1 + 1, s2 - 1)
h2 = sub1(hdate, s1 + 1, s2 - 1)
h3 = sub1(hdate, s2 + 1, len1(hdate))
h3 = sub1(hdate, s2 + 1, len1(hdate))
]=]
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
then h2 = "ב" .. mm end
then h2 = "ב" .. mm end
end
end
]=]
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
שורה 150: שורה 230:


function aserror(message)
function aserror(message)
error(message .. "[[קטגוריה:דפים עם שגיאות בתאריך]]")
error(message .. "[[קטגוריה:דפים עם שגיאות בתאריך]]", 0)
end
end


שורה 205: שורה 285:
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") end
then error("The date is not in the allowed casp", 0) end
end
end


שורה 241: שורה 321:


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


function findhdatetype(hdate)
function findhdatetype(hdate)
local rem = mw.text.trim(remove(hdate))
local rem = mw.text.trim(remove(hdate))
local day, month, year = parts(hdate)
if day ~= nil
then return "dmy", rem end
if month ~= nil
then return "my", rem end
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
שורה 260: שורה 347:
return "y", rem end
return "y", rem end
return "dmy", rem
return "dmy", rem
]=]
end
end


function fromhebrew(f)
function fromhebrew(f)
if noth(f.args[1]) then return "" end
which = true
which = true
return fromhebrewandverify(f)
end
function fromhebrewformat(f)
which = true
makeformat = f.args["format"]
return fromhebrewandverify(f)
return fromhebrewandverify(f)
end
end
שורה 270: שורה 363:
function verify(f)
function verify(f)
frame = f
frame = f
if noth(frame.args[1]) then return "" end
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 res = "" end
then res = "" end
שורה 329: שורה 421:
then rem = sub1(rem, 1, s2) .. "0" .. sub1(rem, s2 + 1) end
then rem = sub1(rem, 1, s2) .. "0" .. sub1(rem, s2 + 1) end
local take = takenumbers(rem)
local take = takenumbers(rem)
if to(take) ~= rem
if remove(to(take)) ~= rem
then error("wrong date") end
then error("wrong date", 0) end
checkcasp(take)
checkcasp(take)
take = same(take .. " + " .. diff(take) .. " days")
take = same(take .. " + " .. diff(take) .. " days")
שורה 340: שורה 432:
then wdate = sub1(wdate, 1, 6) .. "0" .. sub1(wdate, 7, 9) end
then wdate = sub1(wdate, 1, 6) .. "0" .. sub1(wdate, 7, 9) end
if same(wdate) ~= wdate
if same(wdate) ~= wdate
then error("wrong date") end
then error("wrong date", 0) end
checkcasp(wdate)
checkcasp(wdate)
wdate = same(wdate .. " + " .. diff(wdate) .. " days")
wdate = same(wdate .. " + " .. diff(wdate) .. " days")
שורה 369: שורה 461:
elseif w == "y"
elseif w == "y"
then return tohebrewyear(rem)
then return tohebrewyear(rem)
else error("Wrong type: " .. ht) end
else error("Wrong type: " .. ht, 0) end
end
end


שורה 393: שורה 485:
then wt = "about" end end
then wt = "about" end end
if cat ~= nil
if cat ~= nil
then if thsuccess and twsuccess and hsuccess and wsuccess and hdw ~= wdh
then if ht == "dmy" and wt ~= "dmy"
then return cat
then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך "
else return "" end end
.. frame.args["type"] .. " עברי מדויק]]" end
if hsuccess and wsuccess
if ht ~= "dmy" and wt == "dmy"
then if ht == "dmy" then return hdw
then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך "
elseif wt == "dmy" then return wdate
.. frame.args["type"] .. " לועזי מדויק]]" end
-- if ht == "dmy" or ht == "my" or ht == "y"
-- then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך "
-- .. frame.args["type"] .. " לועזי מדויק]]" 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 ht == "my" then return hdw
elseif wt == "my" then return wdate
elseif wt == "y" then return wdate
elseif ht == "y" then return hdw
else return hdw end
else return wdate end
elseif wsuccess then return wdate
elseif hsuccess then return hdw
elseif hsuccess then return hdw
elseif wsuccess then return wdate
elseif wt == "about" then return wdate
elseif ht == "about" then return hdate
else return hdate end
else return wdate end
end
end


שורה 417: שורה 516:
function pick(f)
function pick(f)
frame = f
frame = f
if noth(frame.args["hebrew"]) then return "" end
local hebrew = frame.args["hebrew"]
local success, res = pcall(pick1, frame.args["hebrew"], frame.args["world"])
local world = frame.args["world"]
local habout = false
local wabout = false
if frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = hebrew}}) ~= ""
then hebrew = ""
habout = true end
if frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = world}}) ~= ""
then world = ""
wabout = true end
local success, res = pcall(pick1, hebrew, world)
if success
if success
then return res
then if habout and world == ""
then return frame.args["hebrew"] end
if wabout and hebrew == ""
then return frame.args["world"] end
return res
elseif frame.args["error"] == nil
elseif frame.args["error"] == nil
then return aserror(res) end
then return aserror(res) end
שורה 441: שורה 553:
frame = f
frame = f
which = true
which = true
return tohebrew0(frame.args[1])
end
function samedate(f)
frame = f
which = true
samesame = true
return tohebrew0(frame.args[1])
return tohebrew0(frame.args[1])
end
end
שורה 452: שורה 571:
end
end


function noth(hdate)
function parts(hdate)
return 0 < find1(hdate, "אלפים")
local funcs = {
{function() return w[1] end},
{function() return w[2], w[1] end,
function() return c(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 w[3], c(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,
nil,
function() return c(w[4], w[3]), c(w[2], w[1]) end},
{nil,
function() return c(w[5], w[4]), c(w[3], w[2]), w[1] end}}
function c(x, y) return y .. " " .. x end
w = takewords(hdate)
local code = 1
if 0 < find1(hdate, "אלפים")
then code = code + 1 end
if 1 == find1(hdate, "אדר א")
then code = code + 2 end
if 1 == find1(hdate, "אדר ב")
then code = code + 2 end
local year, month, day = funcs[#w][code]()
return day, month, year
end
 
function takewords(str)
local count = 1
local ans = {}
local cur = str
while find1(cur, " ") > 0 do
ans[count] = sub1(cur, 1, find1(cur, " ") - 1)
count = count + 1
cur = sub1(cur, find1(cur, " ") + 1)
end
ans[count] = cur
return ans
end
end


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