Jump to content

Module:NUMBEROFSECTIONS/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
syncing with penultimate version of module
test failing - try other methods #1
Line 32: Line 32:
title_obj = mw.title.new(page)
title_obj = mw.title.new(page)
-- if we've requested the content of a legitimate page
-- if we've requested the content of a legitimate page
if title_obj then
if title_obj ~= nil then
--[[ pass the raw markup and needles to count
--[[ pass the raw markup and needles to count
and add the return to total ]]
and add the return to total ]]

Revision as of 04:20, 1 April 2016

local p = {}

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

-- Function takes any number of # delimited page names and section level numbers
function p.sections(frame)
	local total = 0
	local needles = {}
	local title_obj = ""
	-- Separate page names from # delimited string into table
	local pages = mw.text.split(frame.args[1], '%s?#%s?')
	-- Separate whitespace delimited section level numbers into table
	local levels = mw.text.split(frame.args['level'], '%s*')
	-- Iterate through levels
	for level in mw.text.gsplit(table.concat(levels), '') do
		-- and add the level needle to needles
		needles[#needles + 1] = '\n'..string.rep('=', tonumber(level))..'[^=]'
	end
	-- For each page name in pages
	for index, page in ipairs(pages) do
		title_obj = mw.title.new(page)
		-- if we've requested the content of a legitimate page
		if title_obj ~= nil then
			--[[ pass the raw markup and needles to count
				 and add the return to total ]]
			total = total + count(title_obj:getContent(), needles)
		end
	end
	--[[ then return how many sections of the required level
		 are in all the pages passed ]]
	return total
end

return p