Jump to content

Please don't skip this 1-minute read. Festipedia is hosted by the FR Heritage Group, a registered charity (No. 1199296). Festipedia is, and always will be, free. But we need your support to keep Festipedia running and to help fund heritage projects. Any donation you can give will be much appreciated, whether it is £2 or £200.

To make a donation, please go to our website, click the Add to Cart button next to General Donation, change the quantity to the amount you want to donate and click the checkout button. Thank you for your support.

Module:Citation/CS1/Arguments

From Festipedia, hosted by the FR Heritage Group
c = {};

exclude = { ['#'] = true, ['1'] = true, ['2'] = true, ['3'] = true, ['4'] = true, ['5'] = true, ['k'] = true, ['v'] = true, ['list'] = true };

function c.build_whitelist( frame )
    local title = mw.title.new( "Module:Citation/CS1/sandbox" );
    local source = title:getContent();

    local result = "whitelist = {<br />\n<br />\n";
    local list = {};
    
    for w in source:gmatch( "args%[(.-)%]" ) do
        w = w:gsub( "%s*%.%.%s*i%s*%.%.%s*", "#" );
        w = w:gsub( "%s*%.%.%s*i", "#" );
        w = w:gsub( "i%s*%.%.%s*", "#" );
        w = w:gsub('"', '' );
        w = w:gsub('1(%D)', '#%1');
        w = w:gsub('1$', '#');
        list[w] = true;
    end
    for w in source:gmatch( "args%.([%w%d_-]*)" ) do
        w = w:gsub('1(%D)', '#%1');
        w = w:gsub('1$', '#');
        list[w] = true;
    end

    for s in source:gmatch( "selectone%(%s*args%s*,%s*{(.-)}" ) do
        for w in s:gmatch( "%s*([^,]+)%s*" ) do
            w = w:gsub( "%s*%.%.%s*i%s*%.%.%s*", "#" );
            w = w:gsub( "%s*%.%.%s*i", "#" );
            w = w:gsub( "i%s*%.%.%s*", "#" );
            w = w:gsub( '"', '' );
            w = w:gsub( "'", '' );
            w = w:gsub('1(%D)', '#%1');
            w = w:gsub('1$', '#');
            w = w:match( "^%s*(.-)%s*$");
            list[w] = true;
        end        
    end

    title = mw.title.new( "Module:Citation/CS1/Configuration/sandbox" );
    source = title:getContent();
    for s in source:gmatch( "%sparameters%s*=%s{(.-)}" ) do
        for w in s:gmatch( "%s*([^,]+)%s*" ) do
            w = w:gsub( "%s*%.%.%s*i%s*%.%.%s*", "#" );
            w = w:gsub( "%s*%.%.%s*i", "#" );
            w = w:gsub( "i%s*%.%.%s*", "#" );
            w = w:gsub( '"', '' );
            w = w:gsub( "'", '' );
            w = w:gsub('1(%D)', '#%1');
            w = w:gsub('1$', '#');
            w = w:match( "^%s*(.-)%s*$");
            list[w] = true;
        end        
    end

    cfg = require( "Module:Citation/CS1/Configuration/sandbox" );
    for k, v in pairs( cfg.aliases ) do
        if type( v ) == 'table' then
            for k2, v2 in pairs( v ) do
                list[v2] = true;
                list[v2:gsub("#", "")] = true;
            end
        else
            list[v] = true;
            list[v:gsub("#", "")] = true;
        end
    end

    local list2 = {};
    for k in pairs( list ) do
        if exclude[k] == nil then
            table.insert( list2, k );
        end
    end
    table.sort( list2 );
    
    result = result .. "basic_arguments = {<br />\n";
    for _, k in pairs( list2 ) do    
        if k:match( "#" ) == nil then 
            result = result .. "&nbsp;&nbsp;&nbsp;&nbsp;['" .. k .. "'] = true," .. "<br />\n";
        end
    end        
    result = result .. "},<br /> \n<br /> \n";

    result = result .. "numbered_arguments = {<br />\n";
    for _, k in pairs( list2 ) do    
        if k:match( "#" ) ~= nil then 
            result = result .. "&nbsp;&nbsp;&nbsp;&nbsp;['" .. k .. "'] = true," .. "<br />\n";
        end
    end        
    result = result .. "},<br /> \n";
    
    result = result .. "};<br />\n<br />\nreturn whitelist;"
    return result;
end

return c;