local p = {} local getArgs = require('মডিউল:Arguments').getArgs local yesno = require('মডিউল:Yesno') local data = mw.loadData('মডিউল:আইএসও ৬৩৯/উপাত্ত') local altnames = mw.loadData('মডিউল:আইএসও ৬৩৯/উপাত্ত/বিকল্প নাম')  local ISO_639_5 = mw.loadData('মডিউল:আইএসও ৬৩৯/উপাত্ত/আইএসও_৬৩৯-৫')  function p.part2(frame)                                                         -- to output part 3 code 	frame.args.type = "part2" 	return p.main(frame) end  function p.part5(frame)                                                         -- to output part 3 code 	if yesno(frame.args.hierachy)  then 		frame.args.type = "hierachy" 	else 		frame.args.type = "part5" 	end 	return p.main(frame) end  function p.part3(frame)                                                         -- to output part 3 code 	frame.args.type = "part3" 	return p.main(frame) end  function p.part1(frame)                                                         -- to output part 1 code 	frame.args.type = "part1" 	return p.main(frame) end  function p.name(frame)                                                          -- to output name 	frame.args.type = "name" 	return p.main(frame) end  function p.get(text)                                                            -- remove junk and standardizes 	if text == table then 		text = text[1] 	end 	if string.upper(text) == text then                                          -- assume it's a code when the input is all uppercase 		text = string.lower(text) 	end 	local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A",                   -- accent list 		["Ä"]="A",["Å"]="A",["Ç"]="C",["È"]="E",["É"]="E", 		["Ê"]="E",["Ë"]="E",["Ì"]="I",["Í"]="I",["Î"]="I", 		["Ï"]="I",["Ñ"]="N",["Ò"]="O",["Ó"]="O",["Ô"]="O", 		["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U", 		["Û"]="U",["Ü"]="U",["Ý"]="Y" 	} 		 	text = mw.ustring.gsub(text,"[À-Ý]",accents)                                -- Deaccent 	text = mw.ustring.gsub(text,"%[","")                                        -- Delink 	text = mw.ustring.gsub(text,"%]","")                                        -- Delink 	text = mw.ustring.gsub(text,"%{","")                                        -- Remove { 	text = mw.ustring.gsub(text,"%}","")                                        -- Remove } 	return text  end  function p.main(frame)                                                          -- main function (doesn't need to be called directly) 	local args = getArgs(frame) 	args[1] = p.get(args[1])                                                      	if altnames[args[1]] then args[1] = altnames[args[1]] end                   -- change alternate name to ISO 639-3 code 	 	if not args[1] then 		return 'Argument 1 is not set!' 	end 	 	for part3,table in pairs(data) do 		if args[1] == part3 			or args[1] == table["part1"] 			or args[1] == table["part2"] 			or args[1] == table["name"] 		then 			if args.type == "part3" then 				return part3 or "" 			elseif args.type == "part1" then 				return table["part1"] or "" 			elseif args.type == "part2" then 				return table["part2"] or "" 			elseif args.type == "name" then 				return table["name"] or "" 			end 		end 	end 	 	for hierachy,table in pairs(ISO_639_5) do 		if table.altnames then 			for _,value in pairs(table.altnames) do 				if args[1] == table then 					args[1] = table.name 				end 			end 		end 		 		if table[args[1]] == hierachy 			or args[1] == table["part5"] 			or args[1] == table["part2"] 			or args[1] == table["name"] 		then 			if args.type == "hierachy" then 				return hierachy or "" 			elseif args.type == "part5" then 				return table["part5"] or "" 			elseif args.type == "part2" then 				return table["part2"] or "" 			elseif args.type == "name" then 				return table["name"] or "" 			end 		end 	end end  return p