• Welcome to the Kancolle Wiki!
  • If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord

Difference between revisions of "Module:Calc"

From Kancolle Wiki
Jump to navigation Jump to search
m (Undo revision 787715 by がか (talk))
m (Undo revision 787719 by がか (talk))
Line 1: Line 1:
 
local Utils = require("Module:Utils")
 
local Utils = require("Module:Utils")
 +
local format = require("Module:StringOperations").format
 
local Formatting = require("Module:Formatting")
 
local Formatting = require("Module:Formatting")
 
local Ship = require("Module:Ship")
 
local Ship = require("Module:Ship")
Line 7: Line 8:
  
 
local formatting_functions = {
 
local formatting_functions = {
 +
 
     -- overrides ShipData:link
 
     -- overrides ShipData:link
     link = function(ship) return Formatting:format_link(ship:link()) end,
+
     link = function(ship)
 +
        return Formatting:format_link(ship:link())
 +
    end,
 +
 
 +
    -- overrides ShipData:implementation_date
 +
    implementation_date = function(ship)
 +
        local date = ship:implementation_date()
 +
        return format{
 +
            "${year}/${month}/${day}",
 +
            year = date[1],
 +
            month = date[2] < 10 and "0" .. date[2] or date[2],
 +
            day = date[3] < 10 and "0" .. date[3] or date[3],
 +
        }
 +
    end,
 +
 
 
}
 
}
  

Revision as of 20:49, 3 February 2017

Documentation for this module may be created at Module:Calc/doc

local Utils = require("Module:Utils")
local format = require("Module:StringOperations").format
local Formatting = require("Module:Formatting")
local Ship = require("Module:Ship")

local args = nil
local ship = nil

local formatting_functions = {

    -- overrides ShipData:link
    link = function(ship)
        return Formatting:format_link(ship:link())
    end,

    -- overrides ShipData:implementation_date
    implementation_date = function(ship)
        local date = ship:implementation_date()
        return format{
            "${year}/${month}/${day}",
            year = date[1],
            month = date[2] < 10 and "0" .. date[2] or date[2],
            day = date[3] < 10 and "0" .. date[3] or date[3],
        }
    end,

}

function format_lua(lua)
    if type(lua) == "table" then
        return tostring(table.concat(lua, args.concat_value or ", "))
    else
        return tostring(lua)
    end
end

function format_value(key)
    local formatting_function = formatting_functions[key]
    if formatting_function then
        return formatting_function(ship)
    else
        local lua = ship[key]
        if type(lua) == "function" then
            return format_lua(lua(ship))
        else
            return format_lua(lua)
        end
    end
end

function interpret_arg(arg)
    local prefix = string.sub(arg, 1, 1)
    if prefix == "!" then
        local ship_key = string.sub(arg, 2)
        ship = Ship(ship_key)
    elseif prefix == "#" and args.format == "table" then
        return "|-\n"
    elseif prefix == "?" then
        local key = string.sub(arg, 2)
        local value = format_value(key)
        if args.format == "table" then
            return "|" .. value .. "\n"
        else
            return value
        end
    else
        return arg
    end
end

function interpret_args(args_)
    args = args_
    local values = {}
    for _, arg in ipairs(args) do
        local value = interpret_arg(arg)
        if value then
            table.insert(values, value)
        end
    end
    return table.concat(values, args.concat or "")
end

local Calc = {}

function Calc.format(frame, args)
    return interpret_args(args or Utils.getTemplateArgs(frame).explicit)
end

return Calc