Documentation for this module may be created at Module:Sandbox/Gonnym/sometest2/doc

local p = {}

local data_entry = {
	iso_number = {},
	primary_name = "",
	alt_names = {},
	language_prefix = {},
	local_override = nil, -- value of boolean when set
	article_override = nil, -- value of string when set
	deprecated = false,
}

local iso_data_sources = {
	["iso_639_1"] = mw.loadData("Module:Language/data/ISO 639-1"),
	["iso_639_2"] = mw.loadData("Module:Language/data/ISO 639-2"),
	["iso_639_2B"] = mw.loadData("Module:Language/data/ISO 639-2B"),
	["iso_639_3"] = mw.loadData("Module:Language/data/ISO 639-3"),
	["iso_639_5"] = mw.loadData("Module:Language/data/ISO 639-5"),
}

function p.create_full_language_table()
	local language_table = {}
	local override_list = mw.loadData("Module:Language/data/ISO 639 override")

	for data_source_name, data_source_data in pairs(iso_data_sources) do
		local iso_number = data_source_name:sub(9)
		for language_code, language_names in pairs(data_source_data) do
			local current_entry = language_table[language_code]
			if not current_entry then
				current_entry = mw.clone(data_entry)
			end
			-- Set ISO number.
			table.insert(current_entry.iso_number, iso_number)

			-- Set all names to alt_names.
			for _, language_name in pairs(language_names) do
				table.insert(current_entry.alt_names, language_name)
			end

			local override_iso_table = override_list["override_" .. iso_number]
			if override_iso_table then
				local override_name_value = override_iso_table[language_code]
				if override_name_value then
					-- Set override name as primary.
					current_entry.primary_name = override_name_value[1]
					current_entry.local_override = true
				else
					-- Set the fisrt name in the alt_names list as the primary.
					-- TODO: Verify that this is the correct method.
					current_entry.primary_name = current_entry.alt_names[1]	
				end
			else
				-- Set the fisrt name in the alt_names list as the primary.
				-- TODO: Verify that this is the correct method.
				--current_entry.primary_name = current_entry.alt_names[1]
			end

			local override_article_table = override_list.article_name
			if override_article_table then
				local override_article_value = override_article_table[language_code]
				if override_article_value then
					current_entry.article_override = override_article_value
				else
				-- TODO: should we set here all articles?
				end
			end

			-- TODO: get deprecated list
			-- TODO: get iana variants
			-- TODO: should we set categories here?
			language_table[language_code] = current_entry
		end
	end
	return mw.dumpObject(language_table)
end

return p