local p = {} local plaintext = require("মডিউল:সরল পাঠ্য") local convert = require('মডিউল:সংখ্যা রূপান্তরকারী').convert local yesno = require("Module:Yesno") local function split_into_threads(text, level3) 	local threads = {} 	local current_thread 	local header_pat  	text = "\n" .. text 	if level3 then 		header_pat = '\n===[	]*([^=].-)[ 	]* === *\n'  	else 		header_pat = '\n==[ 	]*([^=].-) *==[ 	]*\n'  	end 	local last = 1 	while true do  		local start, endindex, topic = text:find(header_pat, last) 		if current_thread then  			current_thread.content = text:sub(last, start) 			threads[#threads + 1] = current_thread 		end 		current_thread = {topic = topic} 		if start == nil then 			-- hit end of page 			break 		end 		last = endindex + 1 	end 	if not threads and not level3 then 		return split_into_threads(text, true) 	end 	return threads end local function parse_archive(title, out) 	local frame = mw.getCurrentFrame() 	if title.isRedirect then 		title = title.redirectTarget 	end 	local threads = split_into_threads(title:getContent()) 	local seen = {} 	for _, thread in ipairs(threads) do 		local __, reply_count = thread.content:gsub("%(ইউটিসি%)","") 		local linktopic 		local topic = thread.topic 		if seen[topic] then 			linktopic = topic .. " " .. tostring(seen[topic] + 1) 		else 			linktopic = topic 		end 		seen[topic] = (seen[topic] or 0) +1 		local link = string.format("%s#%s", title.prefixedText, frame:callParserFunction("anchorencode", {linktopic})) 		out = out .. string.format("\n|-\n| %s || %s || %s", thread.topic, convert('bn',tostring(reply_count)), link) 	end 	return out end	 -- End of copied code. The below code was written by me, without paying much attention to the relevant Legobot code local function resolve_relative(mask, frame)  	local title = frame:getParent():getTitle() 	local titleObj = mw.title.new(title) 	if titleObj.subpageText == "সংগ্রহশালার সূচিপত্র" then 		title = titleObj.nsText .. ":" .. titleObj.baseText 	end 	return title .. mask end function p._onemask(mask, frame) 	if frame == nil then 		frame = mw.getCurrentFrame() 	end 	if mask:sub(1,1) == "/" then 		mask = resolve_relative(mask, frame) 	end 	local out = "" 	if mask:find("<#>") then 		local archivecount = 0 		while true do 			archivecount = archivecount + 1 			local title = mw.title.new(mw.ustring.gsub(mask,"<#>",convert("bn",tostring(archivecount)))) 			if not title.exists then 				return out 			end 			out = parse_archive(title, out) 		end 	else 		local title = mw.title.new(mask) 		out = parse_archive(title, out) 	end 	return out end function p.main(frame) 	local out = "" 	out = out .. frame:extensionTag("templatestyles","",{src="মডিউল:সংগ্রহশালার সূচিপত্র/শৈলী.css"}) 	out = out .. '\n{| class="sortable"\n! আলোচনার প্রসঙ্গ !! উত্তর (আনুমানিক) !! সংগ্রহশালার সংযোগ' 	if frame.args.mask then 		out = out .. p._onemask(frame.args.mask, frame) 	end 	local masknum = 1 	while true do 		local maskArg = frame.args["mask" .. tostring(masknum)] 		if maskArg then 			out = out .. p._onemask(maskArg, frame) 			masknum = masknum + 1 		else 			break 		end 	end 	if yesno(frame.args.indexhere) then 		out = parse_archive(mw.title.new(resolve_relative("", frame)), out) 	end 	return out end return p