Module:Cs1 documentation support explained

require('strict');local getArgs = require ('Module:Arguments').getArgs;

local cfg = mw.loadData ('Module:Citation/CS1/Configuration'); -- load the configuration modulelocal whitelist = mw.loadData ('Module:Citation/CS1/Whitelist'); -- load the whitelist module

local exclusion_lists =

--script-= lang codes always use override names so dagger is omitted

local function add_to_list (code_list, name_list, override_list, code, name, dagger) if false

dagger then dagger = ; -- no dagger for |script-= codes and names else dagger = ''; -- dagger for all other lists using override end

if override_list[code] then -- look in the override table for this code code_list[code] = override_list[code] .. dagger; -- use the name from the override table; mark with dagger name_list[override_list[code]] = code .. dagger; else code_list[code] = name; -- use the MediaWiki name and code name_list[name] = code; endend

--

local function list_format (result, list) for k, v in pairs (list) do table.insert (result, k .. ': ' .. v); endend

--lang_lister|list=|lang=}} where <selector> is one of the values: 2char – list of ISO 639-1 codes and names sorted by code 3char – list of ISO 639-2, -3 codes and names sorted by code ietf – list of IETF language tags and names sorted by tag ietf2 – list of ISO 639-1 based IETF language tags and names sorted by tag ietf3 – list of list of ISO 639-2, -3 based IETF language tags and names sorted by tag name – list of language names and codes sorted by name all - list all language codes/tags and names sorted by code/tag where <code> is a MediaWiki supported 2, 3, or ietf-like language code; because of fall-back, language names may be the English-language names.

local function lang_lister (frame) local lang = (frame.args.lang and ~= frame.args.lang) and frame.args.lang or mw.getContentLanguage:getCode local source_list = mw.language.fetchLanguageNames(lang, 'all'); local override = cfg.lang_tag_remap; local code_1_list=; local code_2_list=; local ietf_list=; local ietf_list2=; local ietf_list3=; local name_list=; if not [frame.args.list] then return '

unknown list selector: ' .. frame.args.list .. ''; end

for code, name in pairs (source_list) do if 'all'

frame.args.list then add_to_list (code_1_list, name_list, override, code, name); -- use the code_1_list because why not? elseif 2

code:len then add_to_list (code_1_list, name_list, override, code, name); elseif 3

code:len then add_to_list (code_2_list, name_list, override, code, name); elseif code:match ('^%a%a%-.+') then -- ietf with 2-character language tag add_to_list (ietf_list, name_list, override, code, name); -- add to main ietf list for |list=ietf add_to_list (ietf_list2, name_list, override, code, name); -- add to ietf2 list elseif code:match ('^%a%a%a%-.+') then -- ietf with 3-character language tag add_to_list (ietf_list, name_list, override, code, name); -- add to main ietf list for |list=ietf add_to_list (ietf_list3, name_list, override, code, name); -- add to ietf3 list end end local result = ; local out = ;

if '2char'

frame.args.list or 'all'

frame.args.list then -- iso 639-1 list_format (result, code_1_list); elseif '3char'

frame.args.list then -- iso 639-2, 3 list_format (result, code_2_list); elseif 'ietf'

frame.args.list then -- all ietf tags list_format (result, ietf_list); elseif 'ietf2'

frame.args.list then -- 2-character ietf tags list_format (result, ietf_list2); elseif 'ietf3'

frame.args.list then -- 3 character ietf tags list_format (result, ietf_list3); else --must be 'name' list_format (result, name_list); end local templatestyles = frame:extensionTag table.sort (result); table.insert (result, 1, templatestyles .. '

'); table.insert (out, table.concat (result, '\n*')); table.insert (out, '

'); return table.concat (out, '\n');end

--script-= parameters.

used in Help:CS1 errors

local function script_lang_lister (frame) local lang_code_src = cfg.script_lang_codes ; -- get list of allowed script language codes local override = cfg.lang_tag_remap; local this_wiki_lang = mw.language.getContentLanguage.code; -- get this wiki's language

local code_list = ; -- interim list of aliases local name_list=; -- not used; defined here so that we can reuse add_to_list local out = ; -- final output (for now an unordered list) for _, code in ipairs (lang_code_src) do -- loop through the list of codes local name = mw.language.fetchLanguageName (code, this_wiki_lang); -- get the language name associated with this code add_to_list (code_list, name_list, override, code, name, false); -- name_list not used but provided so that we can reuse add_to_list; don't add superscript dagger end local result = ; local out = ;

list_format (result, code_list); local templatestyles = frame:extensionTag

table.sort (result); table.insert (result, 1, templatestyles .. '

'); table.insert (out, table.concat (result, '\n*')); table.insert (out, '

'); return table.concat (out, '\n');end

--alias_lister}}

local function alias_lister local alias_src = cfg.aliases; -- get master list of aliases local key; -- key for k/v in a new table local list = ; -- interim list of aliases local out = ; -- final output (for now an unordered list) for _, aliases in pairs (alias_src) do -- loop throu the master list of aliases if 'table'

type (aliases) then -- table only when there are aliases for i, alias in ipairs (aliases) do -- loop through all of the aliases if 1

i then -- first 'alias' is the canonical parameter name key = alias; -- so it becomes the key in list else list[key] = list[key] and (list[key] .. ', ' .. alias) or alias; -- make comma-separated list of aliases list[alias] = 'see ' .. key; -- make a back reference from this alias to the canonical parameter end end end end for k, v in pairs (list) do -- loop through the list to make a simple unordered list table.insert (out, table.concat); end table.sort (out); -- sort it return table.concat (out, '\010'); -- concatenate with \n-- return (mw.dumpObject (list))end

--canonical_param_lister|