יחידה:תאריך עברי: הבדלים בין גרסאות בדף
בדיקה |
מ 197 גרסאות של הדף wikipedia:he:יחידה:תאריך_עברי יובאו |
||
| (48 גרסאות ביניים של 5 משתמשים אינן מוצגות) | |||
| שורה 9: | שורה 9: | ||
} | } | ||
typomonthtable = {["חשון"] = "חשוון", ["כסליו"] = "כסלו | typomonthtable = {["חשון"] = "חשוון", ["כסליו"] = "כסלו", | ||
["חשון"] = "חשוון", ["סיון"] = "סיוון", | |||
["מרחשון"] = "חשוון", ["מרחשוון"] = "חשוון", ["מר-חשוון"] = "חשוון", | ["מרחשון"] = "חשוון", ["מרחשוון"] = "חשוון", ["מר-חשוון"] = "חשוון", | ||
["מנחם אב"] = "אב", ["מנחם-אב"] = "אב", | ["מנחם אב"] = "אב", ["מנחם-אב"] = "אב", | ||
["שבט (חודש)|שבט"] = "שבט", ["שבט (חודש)"] = "שבט"} | ["שבט (חודש)|שבט"] = "שבט", ["שבט (חודש)"] = "שבט" | ||
} | |||
lastletters = {["כ"] = "ך", ["מ"] = "ם", ["נ"] = "ן", ["פ"] = "ף", ["צ"] = "ץ"} | lastletters = {["כ"] = "ך", ["מ"] = "ם", ["נ"] = "ן", ["פ"] = "ף", ["צ"] = "ץ"} | ||
| שורה 22: | שורה 23: | ||
function find1(str, what, where) | function find1(str, what, where) | ||
return mw.ustring.find(str, what, where, true) or 0 | |||
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-" .. | return same("28-08-" .. takeyear(fix[3]) .. " + " .. (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 | ||
| שורה 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 | 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 | 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 | 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 | ||
| שורה 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)) | ||
| שורה 253: | שורה 333: | ||
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) | ||
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 | ||
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], "[[קטגוריה:חוסר מתאם בין תאריך עברי לתאריך לועזי]]") | ||
| שורה 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", 0) end | then error("wrong date", 0) end | ||
checkcasp(take) | checkcasp(take) | ||
| שורה 393: | שורה 485: | ||
then wt = "about" end end | then wt = "about" end end | ||
if cat ~= nil | if cat ~= nil | ||
then if | then if ht == "dmy" and wt ~= "dmy" | ||
then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך " | |||
.. frame.args["type"] .. " עברי מדויק]]" end | |||
if ht ~= "dmy" and wt == "dmy" | |||
then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך " | |||
.. frame.args["type"] .. " לועזי מדויק]]" end | |||
-- if ht == "dmy" or ht == "my" or ht == "y" | |||
-- then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך " | |||
-- .. frame.args["type"] .. " לועזי מדויק]]" end | |||
return "" end | |||
if hsuccess | if wsuccess and hsuccess | ||
then if ht == "dmy" then return hdw | then if wt == "dmy" then return wdate | ||
elseif wt == " | 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 == " | elseif wt == "y" then return wdate | ||
else return hdw end | |||
elseif wsuccess then return wdate | |||
elseif hsuccess then return hdw | elseif hsuccess then return hdw | ||
elseif | elseif wt == "about" then return wdate | ||
else return hdate end | |||
else return | |||
end | end | ||
| שורה 424: | שורה 516: | ||
function pick(f) | function pick(f) | ||
frame = f | frame = f | ||
local hebrew = frame.args["hebrew"] | |||
local success, res = pcall(pick1, | 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 | ||
| שורה 448: | שורה 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 | ||
| שורה 459: | שורה 571: | ||
end | end | ||
function | 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} | |||