Module:Arguments: Difference between revisions

    m (1 revision from w:en:Module:Arguments: attempt import of uptodate version)
    m>Mr. Stradivarius
    (fix bug where explicitly deleted args were still appearing when iterated over with pairs or ipairs - code courtesy of User:Jackmcbarn)
    Line 170: Line 170:
    -- into one table using the specified iterator. If a value is already
    -- into one table using the specified iterator. If a value is already
    -- present it is not overwritten; tables listed earlier have precedence.
    -- present it is not overwritten; tables listed earlier have precedence.
    -- We are also memoizing nil values, but those values can be
    -- We are also memoizing nil values, which can be overwritten if they
    -- overwritten.
    -- are 's' (soft).
    --]]
    --]]
    for _, t in ipairs(tables) do
    for _, t in ipairs(tables) do
    for key, val in iterator(t) do
    for key, val in iterator(t) do
    if metaArgs[key] == nil then
    if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
    local tidiedVal = tidyVal(key, val)
    local tidiedVal = tidyVal(key, val)
    if tidiedVal == nil then
    if tidiedVal == nil then
    nilArgs[key] = true
    nilArgs[key] = 's'
    else
    else
    metaArgs[key] = tidiedVal
    metaArgs[key] = tidiedVal
    Line 219: Line 219:
    for _, argTable in ipairs(argTables) do
    for _, argTable in ipairs(argTables) do
    local argTableVal = tidyVal(key, argTable[key])
    local argTableVal = tidyVal(key, argTable[key])
    if argTableVal == nil then
    if argTableVal ~= nil then
    nilArgs[key] = true
    else
    metaArgs[key] = argTableVal
    metaArgs[key] = argTableVal
    return argTableVal
    return argTableVal
    end
    end
    end
    end
    nilArgs[key] = 'h'
    return nil
    return nil
    end
    end
    Line 255: Line 254:
    --]]
    --]]
    metaArgs[key] = nil
    metaArgs[key] = nil
    nilArgs[key] = true
    nilArgs[key] = 'h'
    else
    else
    metaArgs[key] = val
    metaArgs[key] = val