Module:Lang/documentor tool
Documentation for this module may be created at Module:Lang/documentor tool/doc
require('Module:No globals');
local p = {};
--[[-------------------------< L A N G - X X _ S E T T I N G S >-----------------------------------------------
{{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}}
reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} 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 >---------------------------------------------------------
{{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}}
reads the content of the template to determine if this {{lang-xx}} 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|' .. 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, '[[Category:Articles_with_non-English-language_sources|' .. lang_code .. ']]') -- and categorize this category; language code sortkey
return table.concat (out); -- string it all together and done
end
return p;