Module:Sandbox/trappist the monk/wikisource param fetch

--[[--< W I K I T E X T _ P A R A M _ F E T C H >--

this hack, written to aid creation of a data table for Module:CS1 translator/data, fetches parameter names from a template's wikitext. Parameter names begin with '{{{' and end with either a '|' or a '}'. The names are sorted and then rendered as a skeleton that will typically become part of .

To use this hack: 1. copy the source template's wikitext (typically a non-English template) into a sandbox and save. wikitext_param_fetch takes one argument: where is the name (with namespace) of the sandbox where you saved the source template's		wikitext 2. edit this module and in the debug console enter: =p.wikitext_param_fetch(' ') example: =p.wikitext_param_fetch('User:Trappist the monk/sandbox') 3. copy paste the result (some editing required) ]]

local function wikitext_param_fetch (template_name) if not template_name then return 'error: name of source page with namespace required'; end local knownargs_t = {}; local emun_args_t = {}; local out_t = {}; local out_enum_t = {}; if template_name then														-- if a template name is supplied local template_content = mw.title.new (template_name):getContent or nil; if template_content then												-- if we could get unparsed template content template_content = template_content:gsub ('<!%-%-.-%-%->', '');		-- strip html comments; any unique parameters in comments are not supported for param in template_content:gmatch ('{{{([^|}]+)') do				-- get the next parameter name from template param = mw.text.trim (param);									-- trim wihtespace if any if param:find ('%d') then										-- does this parameter have an enumerator? param = param:gsub ('%d+', '#');							-- replace enumerator with '#' emun_args_t[param] = 1;										-- save it				else knownargs_t[param] = 1;										-- save it				end end end end

for k, _ in pairs (knownargs_t) do											-- make a sortable sequence of non-enumerated parameters table.insert (out_t, table.concat ({'[\, k, '\'] = \'\})); end table.sort (out_t);															-- and sort it	for k, _ in pairs (emun_args_t) do table.insert (out_enum_t, table.concat ({'[\, k, '\'] = \'\}));		-- make a sortable sequence of enumerated parameters end table.sort (out_enum_t);													-- and sort it	local opening_str = table.concat ({		'\txx = {',		string.rep ('\t', 17),		'-- from :xx:... by Module:Sandbox/trappist_the_monk/wikisource_param_fetch\n\t\t'		}); local enum_out_str = '';													-- default empty string for concatenation if 0 < #out_enum_t then														-- only when there are enumerated parameters enum_out_str = table.concat ({			'\n\n\t-- enumerated parameters; non-enumerated forms of these parameters created by build_params_main_t\n\t\t',	-- add generic comment			table.concat (out_enum_t, ',\n\t\t'),								-- add the enumerated parameters			}); end return table.concat ({														-- assemble and return the final output string		opening_str,															-- open the translation table		table.concat (out_t, ',\n\t\t'),										-- add the non-enumerated parameters		enum_out_str,															-- enumerated parameter list when there are enumerated parameters; empty string else		',\n\t\t},\n'															-- close the translation table		}); end

--< E X P O R T S >

return { wikitext_param_fetch = wikitext_param_fetch }