Module:Citation/CS1/Arguments

From Sarkarverse
Jump to navigation Jump to search

if nil_or_not then

  x = nil_or_not.abc -- always OK

else

  -- do somethink if nil_or_not is nil. 

end 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;