Module:Lang: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 35:
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 71:
end
return false;
end
 
 
--[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------
 
prettify ietf tags to use recommended subtag formats:
code: lower case
script: sentence case
region: upper case
variant: lower case
 
]]
 
local function format_ietf_tag (code, script, region, variant)
local out = {};
table.insert (out, code:lower());
if is_set (script) then
c = script:match ('^%a'):upper(); -- make script sentence case
table.insert (out, script:lower():gsub ('^%a', c, 1));
end
 
if is_set (region) then
table.insert (out, region:upper());
end
if is_set (variant) then
table.insert (out, variant:lower());
end
return table.concat (out, '-');
end
 
Line 90 ⟶ 121:
returns three values. Valid parts are return as themselves; omitted parts are returned as empty strings, invalid
parts are returned as nil.
 
see http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1
 
]]
Line 98 ⟶ 131:
local region = '';
local variant = '';
local c;
if not is_set (source) then
Line 105 ⟶ 139:
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%-%d%d%d%-(%d%d%d%d+$') then -- ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits)
code, script, region, variant = source:match ('^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%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%-[%a%d][%a%d][%a%d][%a%d][%a%d]+$') then -- ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
code, script, region, variant = source:match ('^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-([%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)
Line 115 ⟶ 153:
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+%-%d%d%d%-(%d%d%d%d+$') then -- ll-DDD-variant (where region is 3 digits; variant is 4 digits)
code, region, variant = source:match ('^(%a%a%a?)%-(%d%d%d)%-(%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%-[%a%d][%a%d][%a%d][%a%d][%a%d]+$') then -- ll-DDD-variant (where region is 3 digits; variant is 4 digits)
code, region, variant = source:match ('^(%a%a%a?)%-(%d%d%d)%-([%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)
Line 124 ⟶ 166:
 
elseif source:match ('^%a+%-%a%a%a%a%-%a%a$') then -- ll-Ssss-RR
code, script, region = source:match ('^(%la%la%la?)%-(%ua%la%la%la)%-(%ua%ua)$');
elseif source:match ('^%a+%-%a%a%a%a%-%d%d%d$') then -- ll-Ssss-DDD (region is 3 digits)
code, script, region = source:match ('^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$');
 
elseif source:match ('^%a+%-%a%a%a%a$') then -- ll-Ssss
code, script = source:match ('^(%la%la%la?)%-(%ua%la%la%la)$');
 
elseif source:match ('^%a+%-%a%a$') then -- ll-RR
code, region = source:match ('^(%la%la%la?)%-(%ua%ua)$');
elseif source:match ('^%a+%-%d%d%d$') then -- ll-DDD (region is 3 digits)
code, region = source:match ('^(%a%a%a?)%-(%d%d%d)$');
 
elseif source:match ('^%a+$') then -- ll
code = source:match ('^(%la%la%la?)$');
 
else
Line 139 ⟶ 185:
end
if not (lang_data.override[code:lower()] or lang_name_table.lang[code:lower()]) 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 script_name_tablelang_name_table.script[script:lower()] then
return code, nil, nil, nil; -- language code ok, invalid script, don't know about the others (don't care?)
end
Line 150 ⟶ 196:
if is_set (region) then
if not region_name_tablelang_name_table.region[region:lower()] then
return code, script, nil, nil;
end
Line 156 ⟶ 202:
if is_set (variant) then
if not lang_name_table.variant[variant:lower()] then
return code, script, region, nil;
end
if not in_array (code, lang_name_table.variant[variant:lower()]['prefixes']) then
return code, script, region, nil;
end
end
 
return code, script, region, variant; -- return the good bits all pretty-like
end
 
Anonymous user