Module:Citation/CS1/Arguments

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 = { \n \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 = { \n"; for _, k in pairs( list2 ) do           if k:match( "#" ) == nil then result = result .. "   ['" .. k .. "'] = true," .. " \n"; end end result = result .. "}, \n \n";

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

return c;