Module:User:Trappist the monk/Name in various languages

local get_args = require ('Module:Arguments').getArgs;
local lang_mod = require('Module:Lang')


--[[--------------------------< M A I N >----------------------------------------------------------------------
]]

local function main (frame)
	local args_t = get_args (frame);
	local raw_rows_t = {};

	local width = table.concat ({'width:', args_t.width or '100%', ';'});
	local font_size = table.concat ({'font-size:', args_t.font_size or '88%', ';'});
	local name = args_t.name;

	for tag, param_value in pairs (args_t) do
		if lang_mod._is_ietf_tag (tag) then										-- if tag is a valid language tag
			local language_link = lang_mod._name_from_tag ({tag, ['link'] = 'yes'});
			local official_name = lang_mod._lang ({tag, param_value});

			table.insert (raw_rows_t, table.concat ({							-- build a basic row
				'| style=\"padding-left:0.5em\" | ',							-- indent style same for each row
				language_link,													-- language link in the 'language column'
				': || ',														-- column separator
				official_name,													-- offical name in the official name column
				})
			);
		end
	end
	
	table.sort (raw_rows_t);													-- ascending sort because pairs() doesn't obey template parameter order
	
	local output_t = {};														-- final output collected here
	local header_t = {};														-- wikitable header stuff collected here
	
	table.insert (header_t, '{| class="mw-collapsible mw-collapsed"');			-- open wikitable as collapsed
	table.insert (header_t, 'style="');											-- begin table styling
	table.insert (header_t, width);												-- set width
	table.insert (header_t, font_size);											-- set font_size
	table.insert (header_t, 'text-align:left; border-collapse:collapse;"');		-- finish table styling

	table.insert (output_t, table.concat (header_t));							-- concatenate into a big string and save
	
	if name then
		table.insert (output_t, table.concat ({									-- build a 2-column header; shouldn't this properly be a caption for accessibility?
			'! colspan=2 style="text-align:center; border-top: 0px;" | ',		-- styling
			name,																-- and name
			'\n|- style="border-bottom:1px solid #aaa"'							-- add a bottom boarder
		}));
	end

	table.insert (output_t, table.concat (raw_rows_t, '\n|- style="border-bottom:1px solid #aaa"\n'));	-- make a big string of row data
	table.insert (output_t, '|}');												-- close the wikitable
	
	return table.concat (output_t, '\n');										-- make a damn big string and done
end


--[[--------------------------< E X P O R T E D   F U N C T I O N S >------------------------------------------
]]

return {
	main = main
	}