Mòideal:Lang/documentor tool
(deasbaireachd⧼tpt-languages-separator⧽ ⧼tpt-languages-separator⧽eachdraidh⧼tpt-languages-separator⧽ceanglaichean⧼tpt-languages-separator⧽doc⧼tpt-languages-separator⧽bogsa-gainmhich⧼tpt-languages-separator⧽cùisean deuchainn)
This module is currently protected from editing. See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
{{Module rating }}
Ùsaid - Usage
{{#invoke:Lang|function_name}}
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;