Module:Lang/documentor tool

require('Module:No globals'); local p = {};

--[=[< L A N G - X X _ S E T T I N G S >---

reads the content of the template and extracts the parameters from for display on the template's documentation page

]=]

function p.lang_xx_settings (frame) local page = mw.title.makeTitle ('Template', frame.args['template'] or frame.args[1]);	-- get a page object for this page in 'Template:' namespace if not page then return '';																-- TODO: error message? end local content = page:getContent;											-- get unparsed content if not page then return '';																-- TODO: error message? end

local out = {}; local params; local style;

if content:match ('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then			-- if this template uses Module:Lang style, params = content:match ('{{%s*#invoke:%s*[Ll]ang%s*|([^|]+)(|[^}]+)}}') or content:match ('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}')	-- extract the #invoke:'s parameters if not params then return '';															-- there should be at least one or the template/module won't work TODO: error message? end table.insert (out, '{| class="wikitable" style="text-align:right; float:right"\n|+settings')	-- start a wikitable for k, v in params:gmatch ('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do		-- get the parameter names (k) and values (v) table.insert (out, table.concat ({k, '\n|', v}));					-- make rudimentary wikitable entries end

style = style:match ('lang_xx_(.*)'); return table.concat ({table.concat (out,'\n|-\n! scope="row" | '), '\n|-\n|style: ', style, '\n|-|}'});	-- add inter-row markup and close the wikitable and done else return '';																-- does not use Module:Lang so abandon quietly end end

return p;