মডিউল:সংগ্রহশালার সূচিপত্র

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