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 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) if 'label' == k then												-- special case for labels because spaces and pipes v = params:match ('label%s*=%s*(%[%^%+%]%])') or params:match ('label%s*=%s*([^|\n]+)') or 'missing label'; end table.insert (out, table.concat ({k, '\n|', v}));					-- make rudimentary wikitable entries end

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

--[[-< U S E S _ M O D U L E >-

reads the content of the template to determine if this template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false

Used in template documentation {{#if:}} parser functions.

]]

function p.uses_module (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 return content:find ('{{%s*#invoke:[Ll]ang%s*|') or '';						-- return index or empty string end

--[[--< N O N _ E N _ S R C _ C A T >--

this function implements most of {{Non-English-language source category}}

{{#invoke:lang/documentor tool|non_en_src_cat|{{{1|}}}}} - where {{{1|}}} is language code

]]

function p.non_en_src_cat (frame) local lang_code = frame.args[1]:match ('%(([%a%-]+)%)');						-- frame.args[1] is category page name; extract language code from that local lang_name = require ('Module:Lang')._name_from_tag ({lang_code});		-- get language name from language code in cat name via Module:lang local out = {};																-- bits of the output go here

table.insert (out, 'This is a tracking category for articles that use ');	-- static text table.insert (out, frame:preprocess ('{{tlx|in lang|' .. lang_code .. '}}'));	-- preprocess table.insert (out, ' to identify ');										-- more static text

if lang_name:find ('languages') then										-- is a language collective? table.insert (out,  .. lang_name ..  .. '-collective');			-- say so	else table.insert (out, '' .. lang_name .. '-language'); end table.insert (out, ' sources.');											-- last bit of static text

local cat_art = mw.title.new ('Category:Articles containing ' .. lang_name .. '-language text').exists; local cat_with = mw.title.new ('Category:Articles with ' .. lang_name .. '-language external links').exists;	-- TODO: delete this because the cat will go away when {{xx icon}} templates replaced local cat_cs1 = mw.title.new ('Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')').exists;

if cat_art or cat_with or cat_cs1 then table.insert (out, '\n\n==See also==');									-- start see also section if cat_art then table.insert (out, '\n*Category:Articles containing ' .. lang_name .. '-language text'); end if cat_with then table.insert (out, '\n*Category:Articles with ' .. lang_name .. '-language external links');		-- TODO: delete this because the cat will go away end if cat_cs1 then table.insert (out, '\n*Category:CS1 ' .. lang_name .. '-language sources (' .. lang_code .. ')'); end end table.insert (out, '')				-- and categorize this category; language code sortkey return table.concat (out);													-- string it all together and done end

return p;