Jump to content

Module:NUMBEROFSECTIONS/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Fred Gandt (talk | contribs) at 06:36, 25 March 2016 (create mirror). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
local p = {}

-- Counting function accepting a string haystack and table of needles
local function count(haystack, needles)
	local number = 0
	local index = 1
	local needle = needles[index]
	-- While we have needles to look for
	while needle do
		-- find them all in our haystack
		for m in string.gmatch(haystack, needle) do
			number = number + 1
		end
		index = index + 1
		needle = needles[index]
	end
	return number
end

-- Function accepting any number of page names and section level numbers
function p.sections(frame)
	local index = 1
	local total = 0
	local page = ""
	local pages = {}
	local needles = {}
	local haystack = ""
	-- Iterate through the args to find the page names and section levels
	for key, value in pairs(frame.args) do
		-- If the param specifies the section levels required
		if key == 'level' then
			-- for every section level number
			for level in mw.text.gsplit(value, "") do
				if level ~= " " then
					-- add the needle to our table of needles
					needles[#needles + 1] = "\n" ..
						string.rep("=", tonumber(level)) .. "[^=]"
				end
			end
		-- Otherwise, add the page name to our table
		elseif value then
			pages[#pages + 1] = value
		end
	end
	-- For each page name in our table
	page = pages[index]
	while page do
		-- get the raw markup
		haystack = mw.title.new(page)
		-- count the sections and add to the total
		total = total + count(haystack:getContent(), needles)
		index = index + 1
		page = pages[index]
	end
	--[[ then return how many sections of the required level
		 are in all the pages passed ]]
	return total
end

return p