Module:Arguments: Difference between revisions

    From Nonbinary Wiki
    m>Mr. Stradivarius
    (create argument-processing module)
     
    m (3 revisions imported from templatewiki:Module:Arguments: see Topic:Vtixlm0q28eo6jtf)
     
    (44 intermediate revisions by 26 users not shown)
    Line 1: Line 1:
    -- This module provides easy processing of arguments passed to Scribunto from #invoke.
    -- This module provides easy processing of arguments passed to Scribunto from
    -- #invoke. It is intended for use by other Lua modules, and should not be
    -- called from #invoke directly.


    local function getArguments(frame, options)
    local libraryUtil = require('libraryUtil')
    options = type(options) == 'table' and options or {}
    local checkType = libraryUtil.checkType


    local fargs, pargs
    local arguments = {}
    if frame == mw.getCurrentFrame() then
     
    fargs = frame.args
    -- Generate four different tidyVal functions, so that we don't have to check the
    pargs = frame:getParent().args
    -- options every time we call it.
     
    local function tidyValDefault(key, val)
    if type(val) == 'string' then
    val = val:match('^%s*(.-)%s*$')
    if val == '' then
    return nil
    else
    return val
    end
    else
    return val
    end
    end
     
    local function tidyValTrimOnly(key, val)
    if type(val) == 'string' then
    return val:match('^%s*(.-)%s*$')
    else
    else
    fargs = type(frame) == 'table' and frame or {}
    return val
    pargs = {}
    end
    end
    end


    local args, metaArgs, metatable = {}, {}, {}
    local function tidyValRemoveBlanksOnly(key, val)
    setmetatable(args, metatable)
    if type(val) == 'string' then
    if val:find('%S') then
    return val
    else
    return nil
    end
    else
    return val
    end
    end
     
    local function tidyValNoChange(key, val)
    return val
    end
     
    local function matchesTitle(given, title)
    local tp = type( given )
    return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
    end
     
    local translate_mt = { __index = function(t, k) return k end }
     
    function arguments.getArgs(frame, options)
    checkType('getArgs', 1, frame, 'table', true)
    checkType('getArgs', 2, options, 'table', true)
    frame = frame or {}
    options = options or {}


    local function tidyVal(key, val)
    --[[
    -- Processes a value according to the options given to getArguments. Can trim whitespace and remove blanks.
    -- Set up argument translation.
    -- Keys are not used here, but they can be used by user-generated functions, so defining it here to avoid breakage.
    --]]
    if type(val) == 'string' then
    options.translate = options.translate or {}
    if options.trim ~= false then
    if getmetatable(options.translate) == nil then
    val = mw.text.trim(val)
    setmetatable(options.translate, translate_mt)
    end
    if options.backtranslate == nil then