Editing Module:D'ni Time
From Guild of Archivists
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
-- THIS IS OBVIOUSLY NOT DONE! DO NOT TOUCH! -Vee | -- THIS IS OBVIOUSLY NOT DONE! DO NOT TOUCH! -Vee | ||
local p = {} | local p = {} | ||
Line 97: | Line 91: | ||
while (dniTime['tahvo'] > 25) do | while (dniTime['tahvo'] > 25) do | ||
dniTime['tahvo'] = dniTime['tahvo'] - 25 | dniTime['tahvo'] = dniTime['tahvo'] - 25 | ||
dniTime[' | dniTime['gartahvo'] = dniTime['gartahvo'] + 1 | ||
end | end | ||
while (dniTime['tahvo'] < 0) do | while (dniTime['tahvo'] < 0) do | ||
dniTime['tahvo'] = dniTime['tahvo'] + 25 | dniTime['tahvo'] = dniTime['tahvo'] + 25 | ||
dniTime[' | dniTime['gartahvo'] = dniTime['gartahvo'] - 1 | ||
end | end | ||
while (dniTime[' | while (dniTime['gartahvo'] > 5) do | ||
dniTime[' | dniTime['gartahvo'] = dniTime['gartahvo'] - 5 | ||
dniTime['yahr'] = dniTime['yahr'] + 1 | dniTime['yahr'] = dniTime['yahr'] + 1 | ||
end | end | ||
while (dniTime[' | while (dniTime['gartahvo'] < 0) do | ||
dniTime[' | dniTime['gartahvo'] = dniTime['gartahvo'] + 5 | ||
dniTime['yahr'] = dniTime['yahr'] - 1 | dniTime['yahr'] = dniTime['yahr'] - 1 | ||
end | end | ||
Line 142: | Line 136: | ||
-- Given a surfaceTimestamp | -- Given a surfaceTimestamp | ||
-- Return a DniTime (table) | -- Return a DniTime (table) | ||
dniTime = {} | dniTime = {} | ||
Line 160: | Line 153: | ||
delta = delta - (dniTime['yahr'] * (5 * 25 * 25 * 25)) | delta = delta - (dniTime['yahr'] * (5 * 25 * 25 * 25)) | ||
dniTime[' | dniTime['gartahvo'] = math.floor(delta / (25 * 25 * 25)) | ||
delta = delta - (dniTime[' | delta = delta - (dniTime['gartahvo'] * (25 * 25 * 25)) | ||
dniTime['tahvo'] = math.floor(delta / (25 * 25)) | dniTime['tahvo'] = math.floor(delta / (25 * 25)) | ||
Line 174: | Line 167: | ||
dniTime['yahr'] = dniTime['yahr'] + 1 | dniTime['yahr'] = dniTime['yahr'] + 1 | ||
return adjust(dniTime) | |||
end | end | ||
Line 181: | Line 173: | ||
-- Given a DniTime (table) | -- Given a DniTime (table) | ||
-- Return a surfacteTimestamp | -- Return a surfacteTimestamp | ||
dniTime = adjust(dniTime) | dniTime = adjust(dniTime) | ||
dTimeInProrahntee = dniTime['prorahn'] + (dniTime['gorahn'] * 25) + (dniTime['tahvo'] * 25 * 25) + (dniTime[' | dTimeInProrahntee = dniTime['prorahn'] + (dniTime['gorahn'] * 25) + (dniTime['tahvo'] * 25 * 25) + (dniTime['gartahvo'] * 25 * 25 * 25) + ((dniTime['yahr'] - 1) * 5 * 25 * 25 * 25) + ((dniTime['vailee']) * 29 * 5 * 25 * 25 * 25) + (dniTime['hahr'] * 290 * 5 * 25 * 25 * 25) | ||
dTimeDelta = refProrahnteePerHahr - dTimeInProrahntee | dTimeDelta = refProrahnteePerHahr - dTimeInProrahntee | ||
Line 198: | Line 188: | ||
end | end | ||
-- ===== | -- ==Display Functions== | ||
local function getVaileeName(vailee, useDniFont) | |||
-- Return name of vailee given number (zero-indexed) | |||
-- If useDniFont is true, return it in Dnifont text | |||
useDniFont = useDniFont or false | |||
vaileetee = {"Leefo","Leebro","Leesahn","Leetar","Leevot","Leevofo","Leevobro","Leevosahn","Leevotar","Leenovoo"} | |||
vaileetee_dnifont = {"lEfo","lEbro","lEsan","lEtar","lEvot","lEvofo","lEvobro","lEvosan","lEvotar","lEnovU"} | |||
if(useDniFont) then | |||
return vaileetee_dnifont[vailee+1] | |||
if | |||
else | else | ||
return vaileetee[vailee+1] | |||
end | end | ||
end | |||
local function displayDniTime(dniTime) | |||
-- Return dniTime (table) as string of table | |||
return '{'..'hahr = '..dniTime['hahr']..', vailee = '..dniTime['vailee']..', vaileeName = '..getVaileeName(dniTime['vailee'])..', yahr = '..dniTime['yahr']..', gartahvo = '..dniTime['gartahvo']..', tahvo = '..dniTime['tahvo']..', gorahn = '..dniTime['gorahn']..', prorahn = '..dniTime['prorahn']..'}' | |||
end | end | ||
function | local function displaySurfaceTime(surface) | ||
-- Return surfaceTime (table) as string of table | |||
return '{'..'year = '..surface['year']..', month = '..surface['month']..', day = '..surface['day']..', hour = '..surface['hour']..', min = '..surface['min']..', sec = '..surface['sec']..'}' | |||
end | |||
local function formatSurfaceTime(surfaceTime,format) | |||
lang = mw.getContentLanguage() | |||
return lang:formatDate('c',tostring(surfaceTime['year'])..'-'..tostring(surfaceTime['month'])..'-'..tostring(surfaceTime['day'])..' '..tostring(surfaceTime['hour'])..':'..tostring(surfaceTime['min'])..':'..tostring(surfaceTime['sec'])) | |||
end | |||
-- ============================================================================= | |||
local function preprocessSingleArg(argName) | |||
-- If the argument exists and isn't blank, add it to the argument table. | |||
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions. | |||
if origArgs[argName] and origArgs[argName] ~= '' then | |||
args[argName] = origArgs[argName] | |||
end | |||
end | |||
-- | local function preprocessArgs(prefixTable, step) | ||
-- Assign the parameters with the given prefixes to the args table, in order, in batches | |||
-- of the step size specified. This is to prevent references etc. from appearing in the | |||
-- wrong order. The prefixTable should be an array containing tables, each of which has | |||
-- two possible fields, a "prefix" string and a "depend" table. The function always parses | |||
-- parameters containing the "prefix" string, but only parses parameters in the "depend" | |||
-- table if the prefix parameter is present and non-blank. | |||
if type(prefixTable) ~= 'table' then | |||
error("Non-table value detected for the prefix table", 2) | |||
end | |||
if type(step) ~= 'number' then | |||
error("Invalid step value detected", 2) | |||
end | end | ||
-- Get arguments without a number suffix, and check for bad input. | |||
for i,v in ipairs(prefixTable) do | |||
if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then | |||
error('Invalid input detected to preprocessArgs prefix table', 2) | |||
end | |||
preprocessSingleArg(v.prefix) | |||
-- Only parse the depend parameter if the prefix parameter is present and not blank. | |||
if args[v.prefix] and v.depend then | |||
for j, dependValue in ipairs(v.depend) do | |||
if type(dependValue) ~= 'string' then | |||
error('Invalid "depend" parameter value detected in preprocessArgs') | |||
end | |||
preprocessSingleArg(dependValue) | |||
end | |||
end | |||
end | |||
-- Get arguments with number suffixes. | |||
local a = 1 -- Counter variable. | |||
local moreArgumentsExist = true | |||
while moreArgumentsExist == true do | |||
moreArgumentsExist = false | |||
for i = a, a + step - 1 do | |||
for j,v in ipairs(prefixTable) do | |||
local prefixArgName = v.prefix .. tostring(i) | |||
if origArgs[prefixArgName] then | |||
moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones. | |||
preprocessSingleArg(prefixArgName) | |||
end | |||
-- Process the depend table if the prefix argument is present and not blank, or | |||
-- we are processing "prefix1" and "prefix" is present and not blank, and | |||
-- if the depend table is present. | |||
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then | |||
for j,dependValue in ipairs(v.depend) do | |||
local dependArgName = dependValue .. tostring(i) | |||
preprocessSingleArg(dependArgName) | |||
end | |||
end | |||
end | |||
end | |||
a = a + step | |||
end | |||
end | end | ||
Line 291: | Line 306: | ||
lang = mw.getContentLanguage() | lang = mw.getContentLanguage() | ||
output = os.time({year=1900, month=1, day=1, hour=0, min=0}) .. "<br/>" .. refTimeStamp .."<br/>" .. displaySurfaceTime(os.date("*t",refTimeStamp)) | |||
output = output .. "<br/>" .. displaySurfaceTime(os.date("*t",63100800)) .. "<br/>" | |||
output = output .. displayDniTime(surface2DniTime(makeSurfaceTimeStamp({year=2020, month=7, day=29, hour=16, min=0}))).."<br/>---<br/>" | |||
output = output .. formatSurfaceTime(dni2SurfaceTime({hahr = 9676, vailee = 2, yahr = 22, gartahvo = 1, tahvo = 18, gorahn = 21, prorahn = 24})).."<br/>---" | |||
output = output .. lang:formatDate('c',makeSurfaceTimeStamp({year=2020, month=7, day=29, hour=16, min=0})) | |||
output = output .. | |||
-- | |||