Editing Module:D'ni Time

From Guild of Archivists
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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
dnitools = require("Module:D'ni Tools")
dnifunc = require("Module:D'ni Time/dni")
surfacefunc = require("Module:D'ni Time/surface")
Date = require('Module:Date')._Date


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['gahrtahvo'] = dniTime['gahrtahvo'] + 1
             dniTime['gahrotahvo'] = dniTime['gahrotahvo'] + 1
         end
         end


         while (dniTime['tahvo'] < 0) do
         while (dniTime['tahvo'] < 0) do
             dniTime['tahvo'] = dniTime['tahvo'] + 25
             dniTime['tahvo'] = dniTime['tahvo'] + 25
             dniTime['gahrtahvo'] = dniTime['gahrtahvo'] - 1
             dniTime['gartahvo'] = dniTime['gartahvo'] - 1
         end
         end


         while (dniTime['gahrtahvo'] > 5) do
         while (dniTime['gahrotahvo'] > 5) do
             dniTime['gahrtahvo'] = dniTime['gahrtahvo'] - 5
             dniTime['gahrotahvo'] = dniTime['gahrotahvo'] - 5
             dniTime['yahr'] = dniTime['yahr'] + 1
             dniTime['yahr'] = dniTime['yahr'] + 1
         end
         end


         while (dniTime['gahrtahvo'] < 0) do
         while (dniTime['gahrotahvo'] < 0) do
             dniTime['gahrtahvo'] = dniTime['gahrtahvo'] + 5
             dniTime['gahrotahvo'] = dniTime['gahrotahvo'] + 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)
  surface = surface or refTimeStamp


   dniTime = {}
   dniTime = {}
Line 160: Line 153:
   delta = delta - (dniTime['yahr'] * (5 * 25 * 25 * 25))
   delta = delta - (dniTime['yahr'] * (5 * 25 * 25 * 25))


   dniTime['gahrtahvo'] = math.floor(delta / (25 * 25 * 25))
   dniTime['gartahvo'] = math.floor(delta / (25 * 25 * 25))
   delta = delta - (dniTime['gahrtahvo'] * (25 * 25 * 25))
   delta = delta - (dniTime['gartahvo'] * (25 * 25 * 25))


   dniTime['tahvo'] = math.floor(delta / (25 * 25))
   dniTime['tahvo'] = math.floor(delta / (25 * 25))
Line 181: Line 174:
-- Given a DniTime (table)
-- Given a DniTime (table)
-- Return a surfacteTimestamp
-- Return a surfacteTimestamp
  dniTime = dniTime or {hahr = refDniHahr, vailee = 0, yahr = 1, gahrtahvo = 0, tahvo = 0, gorahn = 0, prorahn = 0}
   dniTime = adjust(dniTime)
   dniTime = adjust(dniTime)


   dTimeInProrahntee = dniTime['prorahn'] + (dniTime['gorahn'] * 25) + (dniTime['tahvo'] * 25 * 25) + (dniTime['gahrtahvo'] * 25 * 25 * 25) + ((dniTime['yahr'] - 1) * 5 * 25 * 25 * 25) + ((dniTime['vailee']) * 29 * 5 * 25 * 25 * 25) + (dniTime['hahr'] * 290 * 5 * 25 * 25 * 25)
   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 197: Line 188:
   return os.date("*t",surfaceTimestamp)
   return os.date("*t",surfaceTimestamp)
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]
    else
      return vaileetee[vailee+1]
    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
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)
  format = format or 'c'
  lang = mw.getContentLanguage()
  return lang:formatDate(format,tostring(surfaceTime['year'])..'/'..tostring(surfaceTime['month'])..'/'..tostring(surfaceTime['day'])..' '..tostring(surfaceTime['hour'])..':'..tostring(surfaceTime['min'])..':'..tostring(surfaceTime['sec']))
end
local function formatDniTime(dniTime,format)
-- Given a DniTime (table), returns formatted string.
-- format is a string with patterns for parts of the date, like standard dates
-- Patterns in capitals padded with zeroes
-- HHHH, hhhh = hahr (4-digits, Uppercase includes +/-)
-- hh = last two digits of the hahr
-- XX = 'era' (BE or AE)
-- VVVV = vailee by name
-- VV,vv = vailee (1 indexed)
-- YY, yy = yahr
-- GG, gg = gahrotahvo
-- TT, tt = tahvo
-- RR, rr = gorahnn
-- PP, pp = prorahn
  format = format or "VVVV yy HHHH gg:tt:rr:pp"
  result = format
  if (dniTime['hahr'] < 0) then era = "BE" else era = "AE" end
  result = string.gsub(result,"HHHH", string.format("%04d",tostring(dniTime['hahr'])))
  result = string.gsub(result,"hhhh", math.abs(dniTime['hahr']))
  result = string.gsub(result,"hh", string.sub(dniTime['hahr'],-2))
  result = string.gsub(result,"YY", string.format("%02d",tostring(dniTime['yahr'])))
  result = string.gsub(result,"yy", dniTime['yahr'])
  result = string.gsub(result,"VVVV", getVaileeName(dniTime['vailee']))
  result = string.gsub(result,"VV", string.format("%02d",tostring(dniTime['vailee']+1)))
  result = string.gsub(result,"vv", dniTime['vailee'] + 1)
  result = string.gsub(result,"GG", string.format("%02d",tostring(dniTime['gartahvo'])))
  result = string.gsub(result,"gg", dniTime['gartahvo'])
  result = string.gsub(result,"TT", string.format("%02d",tostring(dniTime['tahvo'])))
  result = string.gsub(result,"tt", dniTime['tahvo'])
  result = string.gsub(result,"RR", string.format("%02d",tostring(dniTime['gorahn'])))
  result = string.gsub(result,"rr", dniTime['gorahn'])
  result = string.gsub(result,"PP", string.format("%02d",tostring(dniTime['prorahn'])))
  result = string.gsub(result,"pp", dniTime['prorahn'])
  result = string.gsub(result,"XX", era)
  return result
end


-- =============================================================================
-- =============================================================================
Line 205: Line 279:
     if origArgs[argName] and origArgs[argName] ~= '' then
     if origArgs[argName] and origArgs[argName] ~= '' then
         args[argName] = origArgs[argName]
         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
   
    -- 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
end
Line 217: Line 349:
     end
     end


     output = ""
     preprocessSingleArg('year')
      
    preprocessSingleArg('month') 
     preprocessSingleArg('datetime')
     preprocessSingleArg('day')
     preprocessSingleArg('format')
     preprocessSingleArg('hour')  
     preprocessSingleArg('input')
     preprocessSingleArg('minute')  
      
     preprocessSingleArg('second')  
     if args['datetime'] then
 
      surfaceTime = surfacefunc.parseSurfaceDateStr(args['datetime'],args['input'])
     -- Parse the data parameters
      output = dnifunc.formatDniTime(surface2DniTime(makeSurfaceTimeStamp(surfaceTime)),args['format'])
     surface = {year = args['year'], month = args['month'], day = args['day'], hour = args['hour'], min = args['minute'], sec = args['second']}
    else
      preprocessSingleArg('year')
      preprocessSingleArg('month') 
      preprocessSingleArg('day')
      preprocessSingleArg('hour')
      preprocessSingleArg('minute')
      preprocessSingleArg('second')


      -- Parse the data parameters
--     return displaySurfaceTime(surface)
      surface = {year = args['year'], month = args['month'] or 1, day = args['day'] or 1, hour = args['hour'] or 0, min = args['minute'] or 0, sec = args['second'] or 0}
    return formatDniTime(surface2DniTime(makeSurfaceTimeStamp(surface)))


---      output =  dnifunc.displayDniTime(surface2DniTime(makeSurfaceTimeStamp(surface)),args['format'])
      output = dnifunc.formatDniTime(surface2DniTime(makeSurfaceTimeStamp(surface)),args['format'])
    end
    return output
end
end


Line 252: Line 373:
     end
     end


     preprocessSingleArg('datetime')
     preprocessSingleArg('hahr')
     preprocessSingleArg('format')
     preprocessSingleArg('vailee')
     preprocessSingleArg('input')
     preprocessSingleArg('yahr')
    preprocessSingleArg('gahrotahvo')
    preprocessSingleArg('tahvo')
    preprocessSingleArg('gorahn')
    preprocessSingleArg('prorahn')  


     if args['datetime'] then
     -- Parse the data parameters
      output = surfacefunc.formatSurfaceTime(dni2SurfaceTime(dnifunc.parseDniDateStr(args['datetime'],args['input'])),args['format'])
    dni = {hahr = tonumber(args['hahr']), vailee = tonumber(args['vailee']), yahr = tonumber(args['yahr']), gahrotahvo = tonumber(args['gahrotahvo']), tahvo = tonumber(args['tahvo']), gorahn = tonumber(args['gorahn']), prorahn = tonumber(args['prorahn'])}
    else
      preprocessSingleArg('hahr')
      preprocessSingleArg('vailee') 
      preprocessSingleArg('yahr')
      preprocessSingleArg('gahrtahvo')
      preprocessSingleArg('tahvo')
      preprocessSingleArg('gorahn')
      preprocessSingleArg('prorahn')
 
      -- Parse the data parameters
      dni = {hahr = tonumber(args['hahr']), vailee = tonumber(args['vailee']), yahr = tonumber(args['yahr']), gahrtahvo = tonumber(args['gahrtahvo']), tahvo = tonumber(args['tahvo']), gorahn = tonumber(args['gorahn']), prorahn = tonumber(args['prorahn'])}


--      output = surfacefunc.displaySurfaceTime(dni2SurfaceTime(dni),args['format'])
--      return displaySurfaceTime(surface)
      output = surfacefunc.formatSurfaceTime(dni2SurfaceTime(dni),args['format'])
    return formatSurfaceTime(dni2SurfaceTime(dni))
    end
   
    return output


end
end
Line 291: Line 402:
     lang = mw.getContentLanguage()
     lang = mw.getContentLanguage()


     surface = {year = -7658, month = 5, day = 31, hour = 6, min = 56, sec = 58, isdst = true}
     output = os.time({year=1900, month=1, day=1, hour=0, min=0}) .. "<br/>" .. refTimeStamp .."<br/>" .. displaySurfaceTime(os.date("*t",refTimeStamp))
    dni = {hahr = -1, vailee = 1, yahr = 1, gahrtahvo = 1, tahvo = 1, gorahn = 1, prorahn = 1}
    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/>"..formatDniTime(surface2DniTime(makeSurfaceTimeStamp({year=2020, month=7, day=29, hour=16, min=0}))).."---<br/>"
    output = ""
    output = output .. formatSurfaceTime(dni2SurfaceTime({hahr = 9676, vailee = 2, yahr = 22, gartahvo = 1, tahvo = 18, gorahn = 21, prorahn = 24})).."<br/>---"
    output = output .. "<br/>"..surfacefunc.displaySurfaceTime(surface)
   output = output .. lang:formatDate('c',os.date("%c",os.time({year=2020, month=7, day=29, hour=16, min=0})))
--    output = output .. "<br/>"..dnifunc.displayDniTime(surface2DniTime(makeSurfaceTimeStamp(surface)))
--    output = output .. "<br/>"..dnifunc.formatDniTime(surface2DniTime(makeSurfaceTimeStamp(surface)))
    output = output .. "<br/>"..dnifunc.displayDniTime(dni)
     output = output .. "<br/>"..surfacefunc.displaySurfaceTime(dni2SurfaceTime(dni))
    output = output .. "<br/>"..os.date("ghdd",makeSurfaceTimeStamp(surface))
--    output = output .. "<br/>"..surfacefunc.formatSurfaceTime(surface,args['format'])
--    output = output .. "<br/>"..makeSurfaceTimeStamp(surface)
--   output = output .. "<br/>"..lang:formatDate("c","@"..makeSurfaceTimeStamp(surface))




Please note that all contributions to Guild of Archivists may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see GoArch:Copyrights for details). Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: