Module:Lang/tag from name

--[[--< A D D _ T O _ L I S T >

local function to add (key) and (value) pair to

]]

local function add_to_list (list, name, tag) if list[name] then															-- if already in if 2 == tag:len then													-- is this is an ISO 639-1 code? list[name] = tag;													-- yes, overwrite ISO 639-3 language and pair in 		end else																		-- here when not yet in 		list[name] = tag;														-- add language and (value) pair to 	end end

--[[--< N A M E - T O - T A G  D A T A >--

Creates name-to-tag tables from the data in Module:Language/name/data (from Module:Language/data/iana languages, Module:Language/data/ISO 639-3, Module:Language/data/wp languages) and Module:Lang/data so that templates can get language tags from the same names as the templates get from those tags. The conversion prefers ISO 639-1 codes.

]]

local rev_lang_name_table = {};													-- same as Module:Language/name/data except reversed so language name is key and language tag is value local rev_lang_data = {};														-- same as Module:Lang/data except reversed

local raw_data = mw.loadData ('Module:Language/name/data')						-- load the data from the standard source module

for tag, name_table in pairs (raw_data.lang) do	local name_raw = name_table[1]:lower;										-- there can be multiple names, always take the first name; may have disambiguation local name, dab = name_raw:gsub ('%s+%b', '');							-- remove parenthetical disambiguators or qualifiers from names that have them; non-zero when disambiguation removed

add_to_list (rev_lang_name_table, name, tag);

if 0 ~= dab then															-- if dab was removed add_to_list (rev_lang_name_table, name_raw, tag); end end

raw_data = mw.loadData ('Module:Lang/data')										-- load the data from the override source module for tag, name_table in pairs (raw_data.override) do	local name_raw = name_table[1];												-- there can be multiple names, always take the first name local name, dab = name_raw:gsub ('%s+%b', ''):lower;					-- remove parenthetical disambiguators or qualifiers from names that have them add_to_list (rev_lang_data, name, tag);

if 0 ~= dab then															-- if dab was removed add_to_list (rev_lang_data, name_raw, tag); end end

raw_data = {};																	-- init back to an empty table?

----< E X P O R T E D  T A B L E S >

return { rev_lang_name_table = rev_lang_name_table, rev_lang_data = rev_lang_data, }