Editing Module:Test

Jump to navigation Jump to search

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 save the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
DefInfo = {}
+
local DefInfo = {}
 
local wiki = {}
 
local wiki = {}
  
local function runTime()
+
local inspect
  return string.format("%i", os.clock() * 1000)
+
local util
end
+
local search
 +
local data
 +
local frame
  
 
------------------------------------------------------------------
 
------------------------------------------------------------------
Line 11: Line 13:
  
 
if mw then
 
if mw then
 +
  util  = require("Module:Test/lib/util")
 +
  search = require("Module:Test/lib/search")
 +
  data  = mw.loadData('Module:Test/data')
 +
 +
  frame = mw and mw.getCurrentFrame()
  
 
   log = mw.log
 
   log = mw.log
 
   logObject = mw.logObject
 
   logObject = mw.logObject
 +
else
 +
  logStore = {}
  
   local timeDataStart = runTime()
+
   util    = require "lib/util"
    
+
   search  = require "lib/search"
   Data   = mw.loadData('Module:Test/data')
+
   data    = require "data/data"
 +
   inspect = require 'lib/inspect'
  
   local timeDataEnd = runTime()
+
   function pp(tbl, title) -- pretty print tables
  log(string.format('@%ims, data loaded in %ims', timeDataEnd, timeDataEnd - timeDataStart))
+
    util.hl(title)
 
+
     print(inspect(tbl))
  Util  = require("Module:Test/lib/util")
+
   end
  Search = require("Module:Test/lib/search")
 
  VF     = require("Module:Test/data/virtual")
 
 
 
  log(string.format('@%ims, modules loaded', runTime()))
 
 
 
else
 
 
 
   logDevStore = {}
 
  
 
   log = function(str)
 
   log = function(str)
     table.insert(logDevStore, str)
+
     table.insert(logStore, str)
 
   end
 
   end
  
Line 39: Line 41:
 
     if prefix then
 
     if prefix then
 
       assert(type(prefix) == "string")
 
       assert(type(prefix) == "string")
       table.insert(logDevStore, prefix .. " = " .. Inspect(obj))
+
       table.insert(logStore, prefix .. " = " .. inspect(obj))
 
     else
 
     else
       table.insert(logDevStore, Inspect(obj))
+
       table.insert(logStore, inspect(obj))
     end
+
     end
   end
+
   end   
 
 
  function pp(tbl, title) -- pretty print tables
 
    Util.hl(title)
 
    print(Inspect(tbl))
 
  end
 
 
 
  local timeDataStart = runTime()
 
 
 
  Data    = require "data/data"
 
 
 
  local timeDataEnd = runTime()
 
  log(string.format('@%ims, data loaded in %ims', timeDataEnd, timeDataEnd - timeDataStart))
 
 
 
  Util    = require "lib/util"
 
  Search = require "lib/search"
 
  Inspect = require "lib/inspect"
 
  VF      = require "data/virtual"
 
 
 
  log(string.format('@%ims, modules loaded', runTime()))
 
 
 
 
end
 
end
  
Line 70: Line 52:
 
-----------------------
 
-----------------------
  
function DefInfo.vardefine(name, value, frame)
+
local function runTime()
 +
  local clock = string.format("%i", os.clock() * 1000)
 +
  return clock
 +
end
 +
 
 +
function DefInfo.vardefine(name, value)
 
   assert(name, "vardefine: missing argument #1 (variable to definePrefix)")
 
   assert(name, "vardefine: missing argument #1 (variable to definePrefix)")
 
   assert(type(name) == "string", string.format("vardefine: bad argument #1 (string expected, got %s)", type(name)))
 
   assert(type(name) == "string", string.format("vardefine: bad argument #1 (string expected, got %s)", type(name)))
 
   assert(value, "vardefine: missing argument #2 (value to assign)")
 
   assert(value, "vardefine: missing argument #2 (value to assign)")
 
   assert(type(value) == "string" or type(value) == "number" or type(value) =="boolean", string.format("vardefine: bad argument #2 (string, number or boolean expected, got %s)", type(value)))
 
   assert(type(value) == "string" or type(value) == "number" or type(value) =="boolean", string.format("vardefine: bad argument #2 (string, number or boolean expected, got %s)", type(value)))
  assert(frame, "vardefine: 'frame' missing")
 
 
   frame:callParserFunction('#vardefine', name, value)
 
   frame:callParserFunction('#vardefine', name, value)
end
 
 
function DefInfo.expandDef(def, runMe)
 
  if not runMe then return nil end
 
  local vFuncs = VF
 
  for fName,func in pairs(vFuncs) do
 
    if func(def) then
 
      log(string.format('@%ims, expandDef: %s expanded with %s', runTime(), def.defName, fName))
 
    end
 
  end
 
 
end
 
end
  
Line 97: Line 73:
 
     local parentID = def._.DefCategory .. ":" .. def._.ParentName
 
     local parentID = def._.DefCategory .. ":" .. def._.ParentName
 
     table.insert(ancestorIDs, parentID)
 
     table.insert(ancestorIDs, parentID)
     def = Data[parentID]
+
     def = data[parentID]
 
   end
 
   end
  
   ancestorIDs = Util.table.reverse(ancestorIDs)
+
   ancestorIDs = util.table.reverse(ancestorIDs)
 
   table.insert(ancestorIDs, baseDef._.DefCategory .. ":" .. baseDef.defName)
 
   table.insert(ancestorIDs, baseDef._.DefCategory .. ":" .. baseDef.defName)
  
 
   for _,parentID in ipairs(ancestorIDs) do
 
   for _,parentID in ipairs(ancestorIDs) do
     Util.table.overwrite(mergedDef, Data[parentID], ignoreKeys)
+
     util.table.overwrite(mergedDef, data[parentID], ignoreKeys)
 
   end
 
   end
  
Line 110: Line 86:
 
end
 
end
  
function DefInfo.getDef(defID, expandVF)
+
function DefInfo.getDef(defID)
  if expandVF ~= false then expandVF = true end
 
 
 
 
   local ignoreKeys = {"Abstract", "Name", "ParentName"}
 
   local ignoreKeys = {"Abstract", "Name", "ParentName"}
 
   local baseDef
 
   local baseDef
   local def
+
   local mergedDef
 +
  local expandedDef
  
 
   if not defID then return nil end
 
   if not defID then return nil end
 
+
 
   for _,def in pairs(Data) do
+
   for _,def in pairs(data) do
 
     if def.defName == defID then
 
     if def.defName == defID then
 
       baseDef = def
 
       baseDef = def
Line 129: Line 104:
 
   end
 
   end
  
   if not baseDef then return nil end
+
   if not baseDef then
 +
    return nil
 +
  end
 +
 
 +
  mergedDef = DefInfo.mergeParents(baseDef, ignoreKeys)
  
  def = DefInfo.mergeParents(baseDef, ignoreKeys)
+
   return mergedDef
 
 
  DefInfo.expandDef(def, expandVF)
 
 
 
   return def
 
 
end
 
end
  
 
local function setPrefix(tbl, parentKey)
 
local function setPrefix(tbl, parentKey)
 
   local mt = getmetatable(tbl) or {}
 
   local mt = getmetatable(tbl) or {}
 
+
 
 
   for k,v in pairs(tbl) do
 
   for k,v in pairs(tbl) do
 
     local prefix = parentKey .. "_" .. k
 
     local prefix = parentKey .. "_" .. k
Line 153: Line 128:
 
end
 
end
  
local function definePrefixed(tbl, frame)
+
local function definePrefixed(tbl)
 
   for k,v in pairs(tbl) do
 
   for k,v in pairs(tbl) do
 
     if type(v) ~= 'table' then
 
     if type(v) ~= 'table' then
 
       local mt = getmetatable(tbl)
 
       local mt = getmetatable(tbl)
       log(string.format('%s = %s', mt[k], tostring(v)))
+
       log(string.format('%s = %s', mt[k], v))
       if mw then DefInfo.vardefine(mt[k], v, frame) end
+
       if mw then DefInfo.vardefine(mt[k], v) end
     else
+
     else  
       definePrefixed(v, frame)
+
       definePrefixed(v)
 
     end
 
     end
 
   end
 
   end
Line 169: Line 144:
 
----------------------
 
----------------------
  
function wiki.count(frame)
+
function wiki.getDefName(frame)
   local query = wiki.query(frame)
+
   local defName
   if type(wiki.queried) == 'table' then -- WARNING: checks a variable that is set in wiki.query (ugly)
+
  local label = frame.args[1]
     return Util.table.count(wiki.queried)
+
 
 +
   if not label then
 +
    log(runTime())
 +
    log("getDefName: missing argument #1 (label)")
 +
     logObject(frame.args, "frame.args")
 +
    return nil
 
   end
 
   end
 +
 
 +
  for defID,def in pairs(data) do
 +
    if string.upper(def.label or "") == string.upper(label) then
 +
      defName = def.defName
 +
    end
 +
  end
 +
 +
  if not defName then
 +
    log(runTime())
 +
    log(string.format("getDefName: '%s' not found", label))
 +
    logObject(frame.args, "frame.args")
 +
    return nil
 +
  end
 +
 +
  log(runTime())
 +
  return defName
 
end
 
end
  
 
function wiki.query(frame)
 
function wiki.query(frame)
  
   local argLen = Util.table.count(frame.args, "number") -- #frame.args won't work as expected, check the doc
+
   local argLen = util.table.count(frame.args, "number") -- #frame.args won't work as expected, check the doc
  
 
   if not frame.args['defName'] and not frame.args['label'] then
 
   if not frame.args['defName'] and not frame.args['label'] then
Line 191: Line 187:
 
     return nil
 
     return nil
 
   end
 
   end
 
+
 
 
   if def and argLen == 0 then
 
   if def and argLen == 0 then
 
     logObject(def, string.format("['%s:%s'] @ %ims", def._.DefCategory, def.defName, runTime()))
 
     logObject(def, string.format("['%s:%s'] @ %ims", def._.DefCategory, def.defName, runTime()))
Line 197: Line 193:
 
   end
 
   end
  
   local processedDef = def
+
   local prune = def
  
 
   for i,arg in ipairs(frame.args) do -- arguments
 
   for i,arg in ipairs(frame.args) do -- arguments
Line 203: Line 199:
  
 
     if i == argLen and frame.args["sibling"] then
 
     if i == argLen and frame.args["sibling"] then
       processedDef = Search.find({nil, frame.args["sibling"]} , processedDef)
+
       prune = search.find({nil, frame.args["sibling"]} , prune)
       if not processedDef then
+
       if not prune then
 
         logObject(frame.args, string.format("query @ %ims: bad argument 'sibling' ('%s' not found')\nframe.args", runTime(), frame.args["sibling"]))
 
         logObject(frame.args, string.format("query @ %ims: bad argument 'sibling' ('%s' not found')\nframe.args", runTime(), frame.args["sibling"]))
 
         return nil
 
         return nil
 
       else
 
       else
         processedDef = Search.meta.parent.table[arg]
+
         prune = search.meta.parent.table[arg]
         if not processedDef then
+
         if not prune then
 
           logObject(frame.args, string.format("query @ %ims: bad argument #%i ('%s' is not a sibling of '%s')", runTime(), i, arg, frame.args["sibling"]))
 
           logObject(frame.args, string.format("query @ %ims: bad argument #%i ('%s' is not a sibling of '%s')", runTime(), i, arg, frame.args["sibling"]))
 
           return nil
 
           return nil
Line 217: Line 213:
  
 
     if i < argLen or i == argLen and not frame.args["sibling"] then
 
     if i < argLen or i == argLen and not frame.args["sibling"] then
       processedDef = Search.find(arg, processedDef)
+
       prune = search.find(arg, prune)
       if not processedDef then
+
       if not prune then
 
         logObject(frame.args, string.format("query @ %ims: bad argument #%i ('%s' not found)\nframe.args", runTime(), i, frame.args[i]))
 
         logObject(frame.args, string.format("query @ %ims: bad argument #%i ('%s' not found)\nframe.args", runTime(), i, frame.args[i]))
 
         return nil
 
         return nil
 
       else
 
       else
         if type(processedDef) ~= 'table' and i < argLen then
+
         if type(prune) ~= 'table' and i < argLen then
 
           log(string.format("query @ %ims: warning Def ['%s'] argument #%i ('%s' returns a value, all extra arguments ignored)", runTime(), def['label'], i, frame.args[i]))
 
           log(string.format("query @ %ims: warning Def ['%s'] argument #%i ('%s' returns a value, all extra arguments ignored)", runTime(), def['label'], i, frame.args[i]))
           return processedDef
+
           return prune
 
         end
 
         end
 
       end
 
       end
Line 231: Line 227:
 
   end -- for arguments
 
   end -- for arguments
  
   if type(processedDef) == "table" then
+
   if type(prune) == "table" then
     log(string.format("@%ims, query: table vardefined", runTime()))
+
     log(string.format("@ %ims", runTime()))
     setPrefix(processedDef, frame.args[argLen])
+
     setPrefix(prune, frame.args[argLen])
     definePrefixed(processedDef, frame)
+
     definePrefixed(prune)
    wiki.queried = processedDef -- WARNING: sets a variable that is used in another function wiki.count (ugly)
 
 
     return nil
 
     return nil
 
   end
 
   end
  
   log(string.format("@%ims, query: %s printed", runTime(), type(processedDef)))
+
   log(string.format("@ %ims", runTime()))
   return processedDef
+
   return prune
 +
 
 
end
 
end
  
------------------------------------
+
---------------------------------
-- simulate MediaWiki environment --
+
-- simulate module invocation  --
------------------------------------
+
---------------------------------
  
 
if not mw then
 
if not mw then
   local simframe = { ["args"] = {} }
+
   -- local simframe = { ["args"] = {} }
   simframe.args['label'] = 'ancient cryptosleep casket'
+
   -- simframe.args['label'] = 'feNnec fox'
--simframe.args[1] = 'verbs'
+
  -- simframe.args[1] = 'tools'
--simframe.args[2] = 'label'
+
  -- simframe.args[2] = 'label'
   wiki.query(simframe)
+
   -- local query = wiki.query(simframe)
 +
  -- if query then print(query) end
 
end
 
end
 +
 +
----------------------------------------
 +
-- simulate wiki log while developing --
 +
----------------------------------------
  
 
if not mw then
 
if not mw then
   Util.hl("DefInfo log")
+
   util.hl("DefInfo log")
   for _,v in ipairs(logDevStore) do
+
   for _,v in ipairs(logStore) do
 
     print(v)
 
     print(v)
 
   end
 
   end
 
end
 
end
  
------------
+
if mw then  
-- return --
 
------------
 
 
 
if mw then
 
 
   return wiki
 
   return wiki
 
else
 
else
 
   return DefInfo
 
   return DefInfo
 
end
 
end

Please note that all contributions to RimWorld Wiki are considered to be released under the CC BY-SA 3.0 (see RimWorld Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, 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. Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)