Modul:TemplatePar: Unterschied zwischen den Versionen

1.992 Bytes hinzugefügt ,  13. Juni 2013
update
wp>PerfektesChaos
(Migration zur Umparametrisierung abgeschlossen; keine Einbindungen mehr)
wp>PerfektesChaos
(update)
Zeile 1: Zeile 1:
--[=[ TemplatePar 2013-06-01
--[=[ TemplatePar 2013-06-10
Template parameter utility
Template parameter utility
* assert
* check
* check
* count
* count
Zeile 108: Zeile 109:
     end
     end
     return r
     return r
end -- factory()
end -- containsCJK()




Zeile 545: Zeile 546:




local function format( seek, options )
local function format( analyze, options )
     -- Check validity of one particular template parameter
     -- Check validity of a value
     -- Precondition:
     -- Precondition:
     --    seek    -- string non-empty; name of template parameter
     --    analyze  -- string to be analyzed
     --    options  -- table or nil; optional details
     --    options  -- table or nil; optional details
     --                options.pattern
     --                options.pattern
     --                options.key
     --                options.key
     --                options.low
     --                options.say
     --                options.min
     --                options.min
     --                options.max
     --                options.max
Zeile 560: Zeile 561:
     -- Uses:
     -- Uses:
     --    >  Patterns
     --    >  Patterns
    --    TemplatePar.downcase()
    --    mw.getCurrentFrame()
    --    frame:getParent()
     --    failure()
     --    failure()
     --    mw.text.trim()
     --    mw.text.trim()
     --    failsafe()
     --    failsafe()
     --    containsCJK()
     --    containsCJK()
     local r = false
     local r   = false
     local s
     local s   = false
     local scan  = false
     local show = nil
     local story
     local scan = false
     if type( options ) ~= "table" then
     if type( options.pattern ) == "string" then
         options = { }
         if options.key then
    end
            r = failure( "dupRule", false, options )
    if options.low then
        else
        story = TemplatePar.downcase( options )
            scan = options.pattern
        end
     else
     else
        story = mw.getCurrentFrame():getParent()
         if type( options.key ) == "string" then
    end
             s = mw.text.trim( options.key )
    if type( story ) == "table" then
        story = ( story.args[ seek ] or "" )
         if type( options.pattern ) == "string" then
             if options.key then
                r = failure( "dupRule", false, options )
            else
                scan = options.pattern
            end
         else
         else
             if type( options.key ) == "string" then
             s = "+"
                s = mw.text.trim( options.key )
        end
            else
        scan = Patterns[ s ]
                s = "+"
        if type( scan ) == "string" then
            end
            if s == "n" or s == "0,0" or s == "0.0" then
            scan = Patterns[ s ]
                if not analyze:match( "[0-9]" ) then
            if type( scan ) == "string" then
                    scan = false
                if s == "n" or s == "0,0" or s == "0.0" then
                    if options.say then
                  if not story:match( "[0-9]" ) then
                         show = "'" .. options.say .. "'"
                        scan = false
                         r    = failure( "invalid",
                                        "'" .. seek .. "'",
                                        options )
                     end
                     end
                    r = failure( "invalid", show, options )
                 end
                 end
            else
                r = failure( "unknownRule", s, options )
             end
             end
        else
            r = failure( "unknownRule", s, options )
         end
         end
    else
        r = story
     end
     end
     if scan then
     if scan then
         local legal, got = pcall( failsafe, story, scan )
         local legal, got = pcall( failsafe, analyze, scan )
         if legal then
         if legal then
             if not got then
             if not got then
                 if s == "aa" then
                 if s == "aa" then
                     got = containsCJK( story )
                     got = containsCJK( analyze )
                 end
                 end
                 if not got then
                 if not got then
                     seek = "'" .. seek .. "'"
                     if options.say then
                     r   = failure( "invalid", seek, options )
                        show = "'" .. options.say .. "'"
                    end
                     r = failure( "invalid", show, options )
                 end
                 end
             end
             end
Zeile 639: Zeile 627:
                 end
                 end
             end
             end
             if #story < options.min  and  not r then
             if #analyze < options.min  and  not r then
                 r = failure( "tooShort",
                 show = " <" .. options.min
                            " <" .. options.min .. " '" .. seek .. "'",
                if options.say then
                            options )
                    show = show .. " '" .. options.say .. "'"
                end
                r = failure( "tooShort", show, options )
             end
             end
         else
         else
Zeile 650: Zeile 640:
     if options.max  and  not r then
     if options.max  and  not r then
         if type( options.max ) == "number" then
         if type( options.max ) == "number" then
             if #story > options.max then
             if #analyze > options.max then
                 r = failure( "tooLong",
                 show = " >" .. options.max
                            " >" .. options.max .. " '" .. seek .. "'",
                if options.say then
                            options )
                    show = show .. " '" .. options.say .. "'"
                end
                r = failure( "tooLong", show, options )
             end
             end
         else
         else
Zeile 661: Zeile 653:
     return r
     return r
end -- format()
end -- format()
local function formatted( assignment, access, options )
    -- Check validity of one particular parameter in a collection
    -- Precondition:
    --    assignment  -- collection
    --    access      -- id of parameter in collection
    --    options    -- table or nil; optional details
    -- Postcondition:
    --    Return string with error message as configured;
    --            false if valid or no answer permitted
    -- Uses:
    --    >  Patterns
    --    failure()
    --    mw.text.trim()
    --    format()
    --    failure()
    local r = false
    if type( assignment ) == "table" then
        local story = assignment.args[ access ]
        if type( story ) == "string" then
            if type( options ) ~= "table" then
                options = { }
            end
            options.say = access
            r = format( story, options )
        else
            r = failure( "invalid", access, options )
        end
    end
    return r
end -- formatted()
TemplatePar.assert = function ( analyze, append, options )
    -- Perform parameter analysis on a single string
    -- Precondition:
    --    analyze  -- string to be analyzed
    --    append  -- string: append error message, prepending <br />
    --                false or nil: throw error with message
    --    options  -- table; optional details
    -- Postcondition:
    --    Return string with error message as configured;
    --            false if valid
    -- Uses:
    --    format()
    local r = format( analyze, options )
    if ( r ) then
        if ( type( append ) == "string" ) then
            if ( append ~= "" ) then
                r = append .. "<br />" .. r
            end
        else
            error( r, 0 )
        end
    end
    return r
end -- TemplatePar.assert()




Zeile 738: Zeile 790:




TemplatePar.valid = function ( seek, options )
TemplatePar.valid = function ( access, options )
     -- Check validity of one particular template parameter
     -- Check validity of one particular template parameter
     -- Precondition:
     -- Precondition:
     --    seek    -- string; name of template parameter
     --    access  -- id of parameter in template transclusion
     --    options  -- table or nil; optional details
     --    options  -- table or nil; optional details
     -- Postcondition:
     -- Postcondition:
Zeile 748: Zeile 800:
     -- Uses:
     -- Uses:
     --    mw.text.trim()
     --    mw.text.trim()
     --    format()
     --    TemplatePar.downcase()
    --    mw.getCurrentFrame()
    --    frame:getParent()
    --    formatted()
     --    failure()
     --    failure()
     --    finalize()
     --    finalize()
     local r
     local r
     if type( seek ) == "string" then
     if type( access ) == "string" then
         r = mw.text.trim( seek )
         r = mw.text.trim( access )
         if #r == 0 then
         if #r == 0 then
             r = false
             r = false
Zeile 759: Zeile 814:
     end
     end
     if r then
     if r then
         r = format( seek, options )
        local params
        if type( options ) ~= "table" then
            options = { }
        end
        if options.low then
            params = TemplatePar.downcase( options )
        else
            params = mw.getCurrentFrame():getParent()
        end
         r = formatted( params, access, options )
     else
     else
         r = failure( "noname", false, options )
         r = failure( "noname", false, options )
Zeile 905: Zeile 969:
         else
         else
             s = frame.args[ 1 ] or ""
             s = frame.args[ 1 ] or ""
            r = tonumber( s )
            if ( r ) then
                s = r
            end
             r = TemplatePar.valid( s, options )
             r = TemplatePar.valid( s, options )
         end
         end
Anonymer Benutzer