ਮੌਡਿਊਲ:Infobox/utilitiesThis module is intended to be a repository for miscellaneous utility functions that support various infoboxes.
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
--[=[--------------------------< I N T E R L A N G _ W I K I S O U R C E _ L I N K _ M A K E >------------------
created as a test function to figure out why the wikitext for |data36= in [[Special:Permalink/1236589613|this version]]
of the template doesn't work in [[Salammbô]] when |title_orig= exists but does not have a value. When that
happened, the infobox returned plain wikitext [[s:fr:Salammbô|]] which should have been a functioning link.
Placing that wikilink in the article body and previewing produced a working inter-language/inter-project link.
{{#invoke:Infobox/utilities|interlang_wikisource_link_make|{{{orig_lang_code|}}}|{{{native_wikisource|}}}|{{{title_orig|}}}|{{{name|}}} }}
]=]
local function interlang_wikisource_link_make (frame)
local lang_mod = require ('Module:Lang'); -- used to wrap non-English wikisource links in proper html markup
local args_t = getArgs (frame); -- parameter values that are emptyspace or only white space are converted to nil
local orig_lang_code = args_t[1]; -- 'all of them sensible everyday names'
local native_wikisource = args_t[2];
local title_orig = args_t[3];
local name = args_t[4];
local orig_lang_name = mw.language.fetchLanguageName (orig_lang_code, 'en'); -- get the English name associated with <orig_lang_code>; only language tags known to MediaWiki allowed
if '' == orig_lang_name then -- empty string when <orig_lang_code> invalid
return '<span style="color:#d33">invalid language tag: <span style="font-family:monospace">' .. orig_lang_code .. '</span></span>';
end
local out_t = {}; -- output goes here
table.insert (out_t, '[[s:'); -- open inter-language/inter-project wikilink
table.insert (out_t, orig_lang_code); -- the language tag
table.insert (out_t, ':'); -- add the required separator
table.insert (out_t, native_wikisource); -- insert wikisource title
table.insert (out_t, '|'); -- done with link; start label
table.insert (out_t, title_orig or name or mw.title.getCurrentTitle().baseText); -- insert the label
table.insert (out_t, ']]'); -- close inter-language/inter-project wikilink
out_t = {lang_mod._lang ({orig_lang_code, table.concat (out_t)})}; -- replace content of out_t with a big string of its contents wrapped in {{lang}}
table.insert (out_t, ' at '); -- begin other language wikisource wikilinklink
table.insert (out_t, orig_lang_name); -- add the MediaWiki-known language name associated with |orig_lang_code=
table.insert (out_t, ' [[Wikisource]]'); -- insert wikisource link static text
return table.concat (out_t); -- make a big string of all and done
end
--[[--------------------------< I S _ C J K _ C O D E >--------------------------------------------------------
return true if code is one of the listed Chinese, Japanese, Korean ISO 639 codes, false else.
]]
local function is_cjk_code (code)
local cjk =
{
['zh'] = true, ['cdo'] = true, ['cjy'] = true, ['cmn'] = true, -- Chinese language codes
['cpi'] = true, ['cpx'] = true, ['czh'] = true, ['czo'] = true,
['gan'] = true, ['hak'] = true, ['hsn'] = true, ['ltc'] = true,
['lzh'] = true, ['mnp'] = true, ['nan'] = true, ['och'] = true,
['wuu'] = true, ['yue'] = true, ['zhx'] = true,
['ja'] = true, ['jpx'] = true, ['ojp'] = true, -- Japanese language codes
['ko'] = true, ['okm'] = true, ['oko'] = true, -- Korean language codes
}
return cjk[code] or false;
end
--[[--------------------------< S E T _ I T A L I C S >--------------------------------------------------------
Created for use with Template:Infobox book and Template:Infobox document and perhaps others to replace hard-coded
italic markup in the call to {{lang}}. This module attempts to make sure that {{lang}} correctly applies italic
markup according to MOS:FOREIGNITALIC.
|italics={{#invoke:Infobox/utilities|set_italics|{{{orig_lang_code|}}}|{{{title_orig}}}}}}}
]]
local function set_italics (frame)
local args=getArgs(frame);
local code = args[1] or args['code'] or ''; -- empty string causes 'yes' return; {{lang}} will handle the missing code error
local text = args[2] or args['text'] or ''; -- empty string causes 'yes' return; {{lang}} will handle the missing text error
local is_latn = require ("Module:Unicode data").is_Latin;
code = code:gsub ('^(%a+).*', '%1'); -- strip subtags from IETF tag to leave just the language subtag
if is_cjk_code (code) and not is_latn (text) then -- is_latn() is in Module:Unicode data
return 'no'; -- only case for 'no'
end
return 'yes'; -- everything else is yes
end
--[[--------------------------< C O M P >----------------------------------------------------------------------
compare function for result{} table descending sort
]]
local function comp (a, b)
return tonumber (a[1]) > tonumber (b[1]);
end
--[[--------------------------< S O R T _ C O M M O N >--------------------------------------------------------
common function to render sorted distribution, ethnicity, and occupation lists.
inputs:
result - table of percentages and labels
ref - value from |distribution ref=, |ethnicity ref=, or |occupation ref= as appropriate
frame - calling frame required for expandTemplate()
returns sorted list on success; empty string else
]]
local function sort_common (result, ref, frame)
for i=#result, 1, -1 do
if not tonumber (result[i][1]) then -- if cannot be converted to a number
table.remove (result, i); -- delete
end
end
if 0 == #result then -- if we get here and the result table is empty
return ''; -- abandon returning empty string
end
table.sort (result, comp); -- sort what remains
for i, v in ipairs (result) do
result[i] = table.concat (result[i]); -- make each table in result{} a string
end
result[1] = table.concat ({result[1], ref and ref or ''}); -- add reference(s) from |<list> ref= to first item in the list
return frame:expandTemplate { title = 'Unbulleted list', args = result}; -- render the unbulleted list
end
--[[--------------------------< D I S R I B U T I O N _ S O R T >----------------------------------------------
{{#invoke:Infobox/utilities|distribution_sort|{{{percent urban|}}}|{{{percent rural|}}}|{{{distribution ref|}}} }}
]]
local function distribution_sort (frame)
local args=getArgs(frame);
local result = { -- initialize; table will be sorted according to values in result[n][1]
{args[1], '% urban'},
{args[2], '% rural'},
};
return sort_common (result, args[#result+1], frame);
end
--[[--------------------------< E T H N I C I T Y _ S O R T >--------------------------------------------------
{{#invoke:Infobox/utilities|ethnicity_sort|{{{percent white|}}}|{{{percent black|}}}|{{{percent asian|}}}|{{{percent hispanic|}}}|{{{percent native american|}}}|{{{percent native hawaiian|}}}|{{{percent more than one race|}}}|{{{percent other race|}}}|{{{ethnicity ref|}}} }}
]]
local function ethnicity_sort (frame)
local args=getArgs(frame);
local result = { -- initialize; table will be sorted according to values in result[n][1]
{args[1], '% [[White Americans|White]]'},
{args[2], '% [[African Americans|Black]]'},
{args[3], '% [[Asian Americans|Asian]]'},
{args[4], '% [[Hispanic and Latino Americans|Hispanic]]'},
{args[5], '% [[Native Americans in the United States|Native American]]'},
{args[6], '% [[Pacific Islander Americans]]'},
{args[7], '% [[Multiracial Americans|Two or more races]]'},
{args[8], '% other'}, -- TODO: make other always last?
};
return sort_common (result, args[#result+1], frame);
end
--[[--------------------------< O C C U P A T I O N _ S O R T >------------------------------------------------
{{#invoke:Infobox/utilities|distribution_sort|{{{percent blue collar|}}}|{{{percent white collar|}}}|{{{percent grey collar|}}}|{{{occupation ref|}}} }}
]]
local function occupation_sort (frame)
local args=getArgs(frame);
local result = { -- initialize; table will be sorted according to values in result[n][1]
{args[1], '% [[Blue-collar worker|Blue-collar]]'},
{args[2], '% [[White-collar worker|White-collar]]'},
{args[3], '% [[Gray-collar]]'},
};
return sort_common (result, args[#result+1], frame)
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
distribution_sort = distribution_sort, -- {{Infobox U.S. congressional district}}
ethnicity_sort = ethnicity_sort,
occupation_sort = occupation_sort,
set_italics = set_italics, -- {{Infobox book}}
interlang_wikisource_link_make = interlang_wikisource_link_make,
}
|
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia