Module:Lang: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 34:
local getArgs = require ('Module:Arguments').getArgs;
local lang_name_table = require ('Module:Language/name/data');
 
local script_name_table = mw.loadData ('Module:Language/data/iana scripts');
local region_name_table = mw.loadData ('Module:Language/data/iana regions');
local variant_name_table = mw.loadData ('Module:Language/data/iana variants');
 
local lang_data = mw.loadData ('Module:Lang/data'); -- language name override and transliteration tool-tip tables
 
Line 47 ⟶ 52:
local function is_set( var )
return not (var == nil or var == '');
end
 
 
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
 
Whether needle is in haystack
 
]]
 
local function in_array( needle, haystack )
if needle == nil then
return false;
end
for n,v in ipairs( haystack ) do
if v == needle then
return n;
end
end
return false;
end
 
Line 71 ⟶ 95:
local function get_ietf_parts (source)
local code;
local script = '';
local region = '';
local variant = '';
if not is_set (source) then
return nil, nil, nil, nil;
end
if source:match ('^%a+%-%a+%a%a%a%-%a%a%-(%d%d%d%d+$') then -- ll-Ssss-RR-variant (where variant is 4 digits)
code, script, region, variant = source:match ('^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$');
elseif source:match ('^%a+%-%a%a%a%a%-%a%a%-[%a%d][%a%d][%a%d][%a%d][%a%d]+$') then -- ll-Ssss-RR-variant (where variant is 5-8 alnum characters)
code, script, region, variant = source:match ('^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$');
 
elseif source:match ('^%a+%-%a%a%a%a%-(%d%d%d%d+$') then -- ll-Ssss-variant (where variant is 4 digits)
code, script, variant = source:match ('^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$');
elseif source:match ('^%a+%-%a%a%a%a%-[%a%d][%a%d][%a%d][%a%d][%a%d]+$') then -- ll-Ssss-variant (where variant is 5-8 alnum characters)
code, script, variant = source:match ('^(%a%a%a?)%-(%a%a%a%a)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$');
 
elseif source:match ('^%a+%-%a%a%-(%d%d%d%d+$') then -- ll-RR-variant (where variant is 4 digits)
code, region, variant = source:match ('^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$');
elseif source:match ('^%a+%-%a%a%-[%a%d][%a%d][%a%d][%a%d][%a%d]+$') then -- ll-RR-variant (where variant is 5-8 alnum characters)
code, region, variant = source:match ('^(%a%a%a?)%-(%a%a)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$');
 
elseif source:match ('^%a+%-(%d%d%d%d+)$') then -- ll-variant (where variant is 4 digits)
code, variant = source:match ('^(%a%a%a?)%-(%d%d%d%d)$');
elseif source:match ('^%a+%-[%a%d][%a%d][%a%d][%a%d][%a%d]+$') then -- ll-variant (where variant is 5-8 alnum characters)
code, variant = source:match ('^(%a%a%a?)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$');
 
elseif source:match ('^%a+%-%a%a%a%a%-%a%a$') then -- ll-Ssss-RR
code, script, region = source:match ('^(%l%l%l?)%-(%u%l%l%l)%-(%u%u)$');
 
elseif source:match ('^%a+%-%a%a%a%a') then -- ll-Ssss
elseif source:match ('^%a+%-%a%a%a%a$') then -- ll-Ssss
code, script = source:match ('^(%l%l%l?)%-(%u%l%l%l)$');
 
region = '';
elseif source:match ('^%a+%-%a%a$') then -- ll-RR
code, region = source:match ('^(%l%l%l?)%-(%u%u)$');
 
script = '';
elseif source:match ('^%a+$') then -- ll-RR
code = source:match ('^(%l%l%l?)$');
 
script = '';
region = '';
else
return nil, nil, nil, nil; -- don't know what we got but it is malformed
end
if not (lang_data.override[code] or lang_name_table.lang[code]) then
return nil, nil, nil, nil; -- invalid language code, don't know about the others (don't care?)
end
if is_set (script) then
if not lang_name_table.scriptscript_name_table[script] then
return code, nil, nil, nil; -- language code ok, invalid script, don't know about regionthe others (don't care?)
end
end
if is_set (region) then
if not lang_name_table.regionregion_name_table[region] then
return code, script, nil, nil;
end
end
if is_set (variant) then
return code, script, region; -- return the good bits
if not lang_name_table.variant[variant] then
return code, script, region, nil;
end
if not in_array (code, lang_name_table.variant[variant]['prefixes']) then
return code, script, region, nil;
end
end
 
return code, script, region, variant; -- return the good bits
end
 
Line 229 ⟶ 283:
table.insert (tout, ' transliteration');
elseif is_set (std) and is_set (script) then -- when both are specified
if title_table[std][script] then -- and legitimate
table.insert (tout, title_table[std][script]); -- add the appropriate text to the tool tip
else
Line 277 ⟶ 331:
local out = {};
local language_name;
local code, script, region, variant = get_ietf_parts (args.code);
-- if is_set (code) then
-- if lang_data.override[code] then
-- language_name = lang_data.override[code][1]
-- elseif lang_name_table.lang[code] then
-- language_name = lang_name_table.lang[code][1]; -- table entries sometimes have multiple names, always take the first one
-- end
-- end
-- if not is_set (language_name) then
if not (code and script and region and variant) then
-- table.insert (out, '<span style="font-size:100%" class="error">error: unknown language code: ');
-- table.insert (out, args.code or 'missing');
-- table.insert (out, '</span>');
 
table.insert (out, make_error_msg (table.concat ({'unknown language code: ', args.code or 'missing'})));
Line 304 ⟶ 355:
end
if lang_data.override[code] then
language_name = lang_data.override[code][1]
elseif lang_name_table.lang[code] then
language_name = lang_name_table.lang[code][1]; -- table entries sometimes have multiple names, always take the first one
end
 
table.insert (out, make_text_span (args.code, args.text, args.rtl, nil, args.size)); -- italics set to nil here because not supporte by {{lang}}
table.insert (out, make_category (args.code, language_name, args.nocat));
Line 340 ⟶ 397:
local out = {};
local language_name;
local code, script, region, variant = get_ietf_parts (args.code);
 
local translit_script;
if is_set (code) then
if lang_data.override[code] then
language_name = lang_data.override[code][1]
elseif lang_name_table.lang[code] then
language_name = lang_name_table.lang[code][1]; -- table entries sometimes have multiple names, always take the first one
end
end
local script = args.script or language_name; -- for translit prefer script of language
local translit;
local translit_title;
-- if not is_set (language_namecode) then
-- if lang_data.override[code] then
-- table.insert (out, '<span style="font-size:100%" class="error">error: unknown language code: ');
-- language_name = lang_data.override[code][1]
-- table.insert (out, args.code or 'missing');
-- elseif lang_name_table.lang[code] then
-- table.insert (out, '</span>');
-- language_name = lang_name_table.lang[code][1]; -- table entries sometimes have multiple names, always take the first one
-- end
-- end
 
-- if not is_set (language_name) then
if not (code and script and region and variant) then
table.insert (out, make_error_msg (table.concat ({'unknown language code: ', args.code or 'missing'})));
Line 370 ⟶ 425:
end
if lang_data.override[code] then
language_name = lang_data.override[code][1]
elseif lang_name_table.lang[code] then
language_name = lang_name_table.lang[code][1]; -- table entries sometimes have multiple names, always take the first one
end
 
translit_script = args.script or language_name; -- for translit prefer script over language
 
if 'no' == args.link then
table.insert (out, language_name); -- language name without wikilink
Line 383 ⟶ 446:
translit_title = mw.title.makeTitle (0, 'Romanization of ' .. language_name)
if translit_title.exists then
table.insert (out, make_wikilink ('Romanization of ' .. scripttranslit_script or language_name, 'translit.'));
else
table.insert (out, '<abbr title="transliteration">translit.</abbr>');
Anonymous user