请输入您要查询的百科知识:

 

词条 Module:TemplateDataGenerator
释义 --[=[ 2013-08-05{{TemplateDataGenerator}}

Basic idea by en:User:Salix alba

]=]

local config = {

    luxury = false,    -- default alphabetical order for parameter list    start  = false,    -- preceeding lines    shift  = "   ",    -- (not used now) indentation, like "   " or "\\t"    suffix = false,    -- following lines    scheme = [=["%s":              { "label":       "%s",                "description": "",                "type":        "string",                "required":    false              }]=]    -- config.scheme has placeholders %s    -- for the parameter name and for "label".    -- One of various indentation styles.    -- Feel free to compose a different one, also using config.shift etc.

};

local function factory( analyze, alphabetical )

    -- Make parameter sequence from template source text    --     analyze       -- string; template source text    --     alphabetical  -- boolean or nil; sort parameter list    -- Return:    --     table (sequence) with parameter names    local i, s;    local r = { };    for s in analyze:gmatch( "{{{([^|}\]+)" ) do        for i = 1, #r do            if r[ i ] == s then                s = false;                break; -- for i            end        end -- for i        if s then            table.insert( r, s );        end    end -- for s in :gmatch()    if alphabetical then        table.sort( r, nil );    end    return r;

end -- factory()

local function format( analyze, alphabetical )

    -- Make JSON code from template source text    --     analyze       -- string; template source text    --     alphabetical  -- boolean or nil; sort parameter list    -- Return:    --     string with JSON code    -- Uses:    --     >  config.shift    --     >  config.scheme    --     factory()    local i;    local params = factory( analyze, alphabetical );    local r      = '{ "description": "",\';
-- local shift = config.shift or ""; -- currently unused
    local start  = "            ";    local show, symbol;    r = r ..       '  "params": { ';    for i = 1, #params do        if i > 1 then            r = string.format( "%s,\%s  ", r, start );        end        symbol = params[ i ];        if mw.ustring.match( symbol, "^%u%u" ) then            show = mw.ustring.sub( symbol, 1, 1 ) ..                   mw.ustring.lower( mw.ustring.sub( symbol, 2 ) );        else            show = "";        end        r = r .. string.format( config.scheme, symbol, show );        -- common JSON pattern is ASCII; string.format() will do    end -- for i    r = string.format( "%s\%s}\}", r, start );    return r;

end -- format()

local function fun( attempt, alphabetical )

    -- Retrieve used template params and build TemplateData skeleton    -- Precondition:    --     attempt       -- mw.title object; related to template code    --     alphabetical  -- boolean or nil; sort parameter list    -- Return:    --     string to be applied    -- Uses:    --     >  config.luxury    --     >  config.start    --     >  config.suffix    --     format()    local r;    local source = string.match( attempt.baseText .. "/",                                 "^([^/]+)/" );                   -- ensure top page in NS with no subpage property                   -- note that pattern is ASCII; string.match() will do    local title  = mw.title.makeTitle( attempt.namespace, source );    if title.exists then        local luxury = config.luxury;        local spec   = "%s\%s\\%s";        if type( alphabetical ) == "boolean" then            luxury = alphabetical;        end        if config.start then            r = config.start .. "\";        else            r = "";        end        r = string.format( spec,                           r,                           format( title:getContent(), luxury ),                           config.suffix or "" );        -- note that format spec is ASCII only; string.format() will do    else    -- test only        r = "ERROR * no page " .. title.fullText;    end    return r;

end -- fun()

-- Export

local p = {};

function p.getBlock( pagetitle, namespace, alphabetical )

    -- Precondition:    --     pagetitle     -- string; page title related to template code    --     namespace     -- string, number or nil; namespace (Template:)    --     alphabetical  -- boolean or nil; sort parameter list    -- Uses:    --     fun()    local title = mw.title.makeTitle( namespace or 10,  pagetitle );    local lucky, r = pcall( fun, title, alphabetical );    return r;

end -- .getBlock()

function p.f( frame )

    -- Precondition:    --     frame  -- object    --     Invoked on a template page or template subpage.    -- Uses:    --     fun()    local luxury;    local parental = frame:getParent().args;    local sort     = parental[ 1 ] or parental[ "1" ] or parental.sort;    if sort then        luxury = ( tonumber( sort) == 1 );    end    local lucky, r = pcall( fun, mw.title.getCurrentTitle(), luxury );    -- return "
" .. r .. "
"; return r;

end -- .f()

return p;

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/9/20 12:36:16