-- Implement Template:Weather box.  local precision = require('Module:Math')._precision local BanglaSongkhayRupantor = require('মডিউল:সংখ্যা রূপান্তরকারী').convert  local function stripToNil(text) 	-- If text is a non-empty string, return its trimmed content. 	-- Otherwise, return nothing (text is an empty string or is not a string). 	if type(text) == 'string' then 		return text:match('(%S.-)%s*$') 	end end  local function isAny(args, suffix) 	local months = { 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' } 	for _, month in ipairs(months) do 		if stripToNil(args[month .. suffix]) then 			return true 		end 	end end  local function makeLabel(args, is_first, base, what) 	local first 	if isAny(args, ' ' .. what .. ' cm') then 		first = 'সেমি' 	else 		if isAny(args, ' ' .. what .. ' mm') then 			first = 'মিমি' 		else 			first = (what == 'snow' or 				precision(args['Jan ' .. what .. ' inch'] or '0') < 1) 					and 'সেমি' 					or 'মিমি' 		end 	end 	local second = 'ইঞ্চি' 	if not stripToNil(args['metric first']) then 		first, second = second, first 	end 	if is_first then 		if stripToNil(args['single line']) then 			first = first .. ' (' .. second .. ')' 		end 	else 		first = second 	end 	return base .. ' ' .. first end  local function makeSources(frame, args) 	local source1 = stripToNil(args.source) or stripToNil(args['source 1']) 	local source2 = stripToNil(args['source 2']) or stripToNil(args['source2']) 	local result = '|-\n|colspan="14" style="text-align:center;font-size:95%;"|' 	local text 	if source1 or source2 then 		if source1 and source2 then 			text = 'উৎস ১: ' .. source1 .. '\n' .. result .. 'উৎস ২: ' .. source2 		else 			text = 'উৎস: ' .. (source1 and source1 or source2) 		end 	else 		text = frame:expandTemplate({ title = 'তথ্যসূত্র প্রয়োজন', args = {date = stripToNil(args.date)} }) 	end 	return result .. text .. '\n|}' end  local function getDefinitions(frame, args) 	-- Return a list of tables or strings that define each row. 	local navbar = require('Module:Navbar')._navbar 	local function _if(parm, a, b) 		return stripToNil(args[parm]) and a or b or 	end 	local function _ifset(parm, a) 		return stripToNil(args[parm]) and args[parm] or a 	end 	local function _ifany(suffix) 		return isAny(args, suffix) 	end 	return {   HEADER ---------- '{| class="wikitable ' .. _if('open', , 'collapsible' .. _if('collapsed', ' collapsed')) .. '" style="width:' .. _ifset('width', '100%') .. '; text-align:center; line-height: 1.2em; margin:' .. _ifset('margin', 'auto') .. ';"' .. _if('open', 	-- Following intentionally shows "" if parameter is blank to alert editor. 	'\n|+' .. _if('location', args.location, '') .. '-এর আবহাওয়া সংক্রান্ত তথ্য', 	'\n|-' .. 	'\n!colspan="14" | ' .. 	_if('name', 		navbar({_if('location', args.location, ''), args.name, collapsible=1 .. '-এর আবহাওয়া সংক্রান্ত তথ্য'}), 		_if('location', args.location, '') .. '-এর আবহাওয়া সংক্রান্ত তথ্য' 	) ) .. [=[  |- !scope="row" |মাস !scope="col" |জানু !scope="col" |ফেব্রু !scope="col" |মার্চ !scope="col" |এপ্রিল !scope="col" |মে !scope="col" |জুন !scope="col" |জুলাই !scope="col" |আগস্ট !scope="col" |সেপ্টে !scope="col" |অক্টো !scope="col" |নভে !scope="col" |ডিসে !scope="col" style="border-left-width:medium" |বছর ]=],  {---------- FIRST LINE MAXIMUM HUMIDEX ---------- 	WANTROW = _ifany(' maximum humidex') and (_ifset('metric first') or _ifset('single line')), 	mode = 'basic', 	group_name = 'maximum humidex', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'আর্দ্রতা সূচকে সর্বোচ্চ রেকর্ড', 	annual_mode = 'max', }, {---------- FIRST LINE RECORD HIGH TEMPERATURES ---------- 	WANTROW = _ifany(' record high C') or _ifany(' record high F'), 	mode = 'temperature', 	group_name = 'record high', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'সর্বোচ্চ রেকর্ড °' .. _if('metric first', 'সে', 'ফা') .. _if('single line', ' (°' .. _if('metric first', 'ফা', 'সে') .. ')'), 	annual_mode = 'max', }, {---------- FIRST-SECOND LINE AVG MONTHLY MAXIMUM TEMPERATURES ---------- 	WANTROW = _ifany(' avg record high C') or _ifany(' avg record high F'), 	mode = 'temperature', 	group_name = 'avg record high', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'মাসিক সর্বোচ্চ গড় °' .. _if('metric first', 'সে', 'ফা') .. _if('single line', ' (°' .. _if('metric first', 'ফা', 'সে') .. ')'), 	annual_mode = 'max', }, {---------- FIRST LINE AVERAGE HIGH TEMPERATURES ---------- 	WANTROW = _ifany(' high C') or _ifany(' high F'), 	mode = 'temperature', 	group_name = 'high', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'সর্বোচ্চ গড় °' .. _if('metric first', 'সে', 'ফা') .. _if('single line', ' (°' .. _if('metric first', 'ফা', 'সে') .. ')'), 	annual_mode = 'avg', }, {---------- FIRST LINE DAILY MEAN TEMPERATURES ---------- 	WANTROW = _ifany(' mean C') or _ifany(' mean F'), 	mode = 'temperature', 	group_name = 'mean', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'দৈনিক গড় °' .. _if('metric first', 'সে', 'ফা') .. _if('single line', ' (°' .. _if('metric first', 'ফা', 'সে') .. ')'), 	annual_mode = 'avg', }, {---------- FIRST LINE AVERAGE LOW TEMPERATURES ---------- 	WANTROW = _ifany(' low C') or _ifany(' low F'), 	mode = 'temperature', 	group_name = 'low', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'সর্বনিম্ন গড় °' .. _if('metric first', 'সে', 'ফা') .. _if('single line', ' (°' .. _if('metric first', 'ফা', 'সে') .. ')'), 	annual_mode = 'avg', }, {---------- FIRST-SECOND LINE AVG MONTHLY MINIMUM TEMPERATURES ---------- 	WANTROW = _ifany(' avg record low C') or _ifany(' avg record low F'), 	mode = 'temperature', 	group_name = 'avg record low', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'মাসিক সর্বনিম্ন গড় °' .. _if('metric first', 'সে', 'ফা') .. _if('single line', ' (°' .. _if('metric first', 'ফা', 'সে') .. ')'), 	annual_mode = 'min', }, {---------- FIRST LINE RECORD LOW TEMPERATURES ---------- 	WANTROW = _ifany(' record low C') or _ifany(' record low F'), 	mode = 'temperature', 	group_name = 'record low', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'সর্বনিম্ন রেকর্ড °' .. _if('metric first', 'সে', 'ফা') .. _if('single line', ' (°' .. _if('metric first', 'ফা', 'সে') .. ')'), 	annual_mode = 'min', }, {---------- FIRST LINE MINIMUM WIND CHILL ---------- 	WANTROW = _ifany(' chill') and (_ifset('metric first') or _ifset('single line')), 	mode = 'basic', 	group_name = 'chill', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'বাতাসে ঠাণ্ডার সর্বনিম্ন রেকর্ড', 	annual_mode = 'min', }, {---------- FIRST LINE TOTAL PRECIPITATION ---------- 	WANTROW = _ifany(' precipitation cm') or _ifany(' precipitation mm') or _ifany(' precipitation inch'), 	mode = 'precipitation', 	group_name = 'precipitation', 	color_scheme = _ifset('precipitation colour', 'p'), 	date_mode = true, 	scale_factor = '1', 	prefer_cm = precision(_ifset('Jan precipitation inch', '0')) < 1, 	label = makeLabel(args, true, 'অধঃক্ষেপণের গড়', 'precipitation'), 	annual_mode = 'sum', }, {---------- FIRST LINE RAINFALL ---------- 	WANTROW = _ifany(' rain cm') or _ifany(' rain mm') or _ifany(' rain inch'), 	mode = 'precipitation', 	group_name = 'rain', 	color_scheme = _ifset('rain colour', 'p'), 	date_mode = true, 	scale_factor = '1', 	prefer_cm = precision(_ifset('Jan rain inch', '0')) < 1, 	label = makeLabel(args, true, 'বৃষ্টিপাতের গড়', 'rain'), 	annual_mode = 'sum', }, {---------- FIRST LINE SNOWFALL ---------- 	WANTROW = _ifany(' snow cm') or _ifany(' snow mm') or _ifany(' snow inch'), 	mode = 'precipitation', 	group_name = 'snow', 	prefer_cm = true, 	color_scheme = _ifset('snow colour', 'p'), 	date_mode = true, 	scale_factor = '1', 	label = makeLabel(args, true, 'তুষারপাতের গড়', 'snow'), 	annual_mode = 'sum', }, {---------- SECOND LINE MAXIMUM HUMIDEX ---------- 	WANTROW = not _ifset('single line') and _ifany(' maximum humidex'), 	mode = 'basic', 	group_name = 'maximum humidex', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'আর্দ্রতা সূচক', 	annual_mode = 'max', 	second_line = true, }, {---------- SECOND LINE RECORD HIGH TEMPERATURES ---------- 	WANTROW = not _ifset('single line') and (_ifany(' record high C') or _ifany(' record high F')), 	mode = 'temperature', 	group_name = 'record high', 	second_line = true, 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'সর্বোচ্চ রেকর্ড °' .. _if('metric first', 'ফা', 'সে'), 	annual_mode = 'max', }, {---------- SECOND LINE AVERAGE HIGH TEMPERATURES ---------- 	WANTROW = not _ifset('single line') and (_ifany(' high C') or _ifany(' high F')), 	mode = 'temperature', 	group_name = 'high', 	second_line = true, 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'সর্বোচ্চ গড় °' .. _if('metric first', 'ফা', 'সে'), 	annual_mode = 'avg', }, {---------- SECOND LINE DAILY MEAN TEMPERATURES ---------- 	WANTROW = not _ifset('single line') and (_ifany(' mean C') or _ifany(' mean F')), 	mode = 'temperature', 	group_name = 'mean', 	second_line = true, 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'দৈনিক গড় °' .. _if('metric first', 'ফা', 'সে'), 	show = _if('metric first', '2', '1'), 	annual_mode = 'avg', }, {---------- SECOND LINE AVERAGE LOW TEMPERATURES ---------- 	WANTROW = not _ifset('single line') and (_ifany(' low C') or _ifany(' low F')), 	mode = 'temperature', 	group_name = 'low', 	second_line = true, 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'সর্বনিম্ন গড় °' .. _if('metric first', 'ফা', 'সে'), 	show = _if('metric first', '2', '1'), 	annual_mode = 'avg', }, {---------- SECOND LINE RECORD LOW TEMPERATURES ---------- 	WANTROW = not _ifset('single line') and (_ifany(' record low C') or _ifany(' record low F')), 	mode = 'temperature', 	group_name = 'record low', 	second_line = true, 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'সর্বনিম্ন রেকর্ড °' .. _if('metric first', 'ফা', 'সে'), 	show = _if('metric first', '2', '1'), 	annual_mode = 'min', }, {---------- SECOND LINE MINIMUM WIND CHILL ---------- 	WANTROW = not _ifset('single line') and (_ifany(' chill') and _if('metric first')), 	mode = 'basic', 	group_name = 'chill', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'বাতাসে ঠাণ্ডা', 	annual_mode = 'min', }, {---------- SECOND LINE TOTAL PRECIPITATION ---------- 	WANTROW = not _ifset('single line') and (_ifany(' precipitation cm') or _ifany(' precipitation mm') or _ifany(' precipitation inch')), 	mode = 'precipitation', 	group_name = 'precipitation', 	second_line = true, 	color_scheme = _ifset('precipitation colour', 'p'), 	date_mode = true, 	scale_factor = '1', 	prefer_cm = precision(_ifset('Jan precipitation inch', '0')) < 1, 	label = makeLabel(args, false, 'অধঃক্ষেপণের গড়', 'precipitation'), 	annual_mode = 'sum', }, {---------- SECOND LINE RAINFALL ---------- 	WANTROW = not _ifset('single line') and (_ifany(' rain cm') or _ifany(' rain mm') or _ifany(' rain inch')), 	mode = 'precipitation', 	group_name = 'rain', 	second_line = true, 	color_scheme = _ifset('rain colour', 'p'), 	date_mode = true, 	scale_factor = '1', 	prefer_cm = precision(_ifset('Jan rain inch', '0')) < 1, 	label = makeLabel(args, false, 'বৃষ্টিপাতের গড়', 'rain'), 	annual_mode = 'sum', }, {---------- SECOND LINE SNOWFALL ---------- 	WANTROW = not _ifset('single line') and (_ifany(' snow cm') or _ifany(' snow mm') or _ifany(' snow inch')), 	mode = 'precipitation', 	group_name = 'snow', 	second_line = true, 	prefer_cm = true, 	color_scheme = _ifset('snow colour', 'p'), 	date_mode = true, 	scale_factor = '1', 	label = makeLabel(args, false, 'তুষারপাতের গড়', 'snow'), 	annual_mode = 'sum', }, {---------- PRECIPITATION DAYS ---------- 	WANTROW = _ifany(' precipitation days'), 	mode = 'basic', 	group_name = 'precipitation days', 	color_scheme = _ifset('precip days colour', 'd'), 	date_mode = true, 	scale_factor = '1', 	label = 'অধঃক্ষেপণ দিনগুলির গড়' .. _if('unit precipitation days', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. BanglaSongkhayRupantor('bn',_ifset('unit precipitation days', )) .. ')</span>'), 	annual_mode = 'sum', }, {---------- RAINY DAYS ---------- 	WANTROW = _ifany(' rain days'), 	mode = 'basic', 	group_name = 'rain days', 	color_scheme = _ifset('precip days colour', 'd'), 	date_mode = true, 	scale_factor = '1', 	label = 'বৃষ্টিবহুল দিনগুলির গড়' .. _if('unit rain days', ' (≥ ' .. BanglaSongkhayRupantor('bn',_ifset('unit rain days', )) .. ')</span>'), 	annual_mode = 'sum', }, {---------- SNOWY DAYS ---------- 	WANTROW = _ifany(' snow days'), 	mode = 'basic', 	group_name = 'snow days', 	color_scheme = _ifset('precip days colour', 'd'), 	date_mode = true, 	scale_factor = '1', 	label = 'তুষারময় দিনগুলির গড়' .. _if('unit snow days', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. BanglaSongkhayRupantor('bn',_ifset('unit snow days', )) .. ')'), 	annual_mode = 'sum', }, {---------- PERCENT RELATIVE HUMIDITY ---------- 	WANTROW = _ifany(' humidity'), 	mode = 'basic', 	group_name = 'humidity', 	color_scheme = _ifset('humidity colour', 'h'), 	scale_factor = '1', 	label = 'আপেক্ষিক আদ্রতার গড় (%)' .. 		_if('time day', ' (' .. _ifset('time day', ) .. ')</span>') .. 		_if('daily', ' (দৈনিক গড়)'), 	annual_mode = 'avg', }, {---------- AFTERNOON PERCENT RELATIVE HUMIDITY ---------- 	WANTROW = _ifany(' afthumidity'), 	mode = 'basic', 	group_name = 'afthumidity', 	color_scheme = _ifset('humidity colour', 'h'), 	scale_factor = '1', 	label = 'বিকালের আপেক্ষিক আদ্রতার গড় (%)' .. 		_if('time day', ' <span style="font-size:90%;" class="nowrap">(' .. _ifset('time day', ) .. ')') .. 		_if('daily', ' (দৈনিক গড়)'), 	annual_mode = 'avg', }, {---------- FIRST LINE AVERAGE DEW POINT ---------- 	WANTROW = _ifany(' dew point C') or _ifany(' dew point F'), 	mode = 'temperature', 	group_name = 'dew point', 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'শিশির বিন্দুর গড় °' .. _if('metric first', 'সে', 'ফা') .. _if('single line', ' (°' .. _if('metric first', 'ফা', 'সে') .. ')'), 	annual_mode = 'avg', }, {---------- SECOND LINE AVERAGE DEW POINT---------- 	WANTROW = not _ifset('single line') and (_ifany(' dew point C') or _ifany(' dew point F')), 	mode = 'temperature', 	group_name = 'dew point', 	second_line = true, 	color_scheme = _ifset('temperature colour', 't'), 	scale_factor = '1', 	label = 'শিশির বিন্দুর গড় °' .. _if('metric first', 'ফা', 'সে'), 	show = _if('metric first', '2', '1'), 	annual_mode = 'avg', }, {---------- MONTHLY SUNSHINE HOURS ---------- 	WANTROW = _ifany(' sun'), 	mode = 'basic', 	group_name = 'sun', 	color_scheme = _ifset('sun colour', 's'), 	date_mode = true, 	scale_factor = '1', 	label = 'মাসিক সূর্যালোক ঘণ্টার গড়', 	annual_mode = 'sum', }, {---------- DAILY SUNSHINE HOURS ---------- 	WANTROW = _ifany('d sun'), 	mode = 'basic', 	group_name = 'd sun', 	color_scheme = _ifset('sun colour', 's'), 	include_space = false, 	scale_factor = '30.44', 	label = 'দৈনিক সূর্যালোক ঘণ্টার গড়', 	annual_mode = 'avg', }, {---------- DAILY DAYLIGHT HOURS ---------- 	WANTROW = _ifany(' light'), 	mode = 'basic', 	group_name = ' light', 	color_scheme = _ifset('sun colour', 's'), 	include_space = false, 	scale_factor = '30.44', 	label = 'দৈনিক দিবালোক ঘণ্টার গড়', 	annual_mode = 'avg', }, {---------- PERCENT SUNSHINE ---------- 	WANTROW = _ifany(' percentsun'), 	mode = 'basic', 	group_name = 'percentsun', 	color_scheme = _ifset('sun colour', 's'), 	scale_factor = '7.2', 	label = 'রোদের সম্ভাব্য শতাংশ', 	annual_mode = 'avg', }, {---------- ULTRAVIOLET INDEX ---------- 	WANTROW = _ifany(' uv'), 	mode = 'basic', 	group_name = 'uv', 	color_scheme = _ifset('uv colour', 'u'), 	scale_factor = '1', 	label = 'অতিবেগুনী সূচকের গড়', 	annual_mode = 'avg', },  SOURCES ---------- makeSources(frame, args), } end  local function makeFrame(self_args, parent_args) 	-- Kludge to pass arguments for a single row to buildRow. 	-- Later: Refactor buildRow so this is not needed. 	return { 		args = self_args, 		getParent = function (self) return makeFrame(parent_args, nil) end, 	} end  local function main(frame) 	local buildRow = require('মডিউল:আবহাওয়া বাক্স/সারি').buildRow 	local args = frame:getParent().args 	local results = {} 	for i, def in ipairs(getDefinitions(frame, args)) do 		local row 		if type(def) == 'string' then 			row = def 		elseif def.WANTROW then 			row = buildRow(makeFrame(def, args)) 		else 			row =  		end 		results[i] = row 	end 	return '\n'..table.concat(results)..'\n'  -- prevent Scribunto from inserting a blank line before the table end  return { 	main = main, }