Jump to content

Module:Title monthname/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by BrownHairedGirl (talk | contribs) at 16:18, 16 July 2020 (fix). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
--[[ 
     Split the title into words then test each of them against the list of months
     v07 -- accepts a parameter
]]

local getArgs = require('Module:Arguments').getArgs
local p = {}

local monthList = {
	'January',
	'February',
	'March',
	'April',
	'May',
	'June',
	'July',
	'August',
	'September',
	'October',
	'November',
	'December'
}

-- splits a string into "words"
-- a "word" is a set of characters delineated at each end by one 
--    or more whitespace characters or punctaution charaters
function splitIntoWords(str)
	result = {}
	index = 1
	s = mw.ustring.gsub(str, "^[%s%p]+", "") -- strip leading whitespace or punctuation
	for s2 in mw.ustring.gmatch(s, "[^%s%p]+[%s%p]*") do
		s3 = mw.ustring.gsub(s2, "[%s%p]+$", "") -- strip trailing separators
		result[index] = s3
		index = index + 1
	end
return result
end

-- returns the first word is the pagename which matches the name of a month
-- ... or an empty string if there is no match
function checkPagename(pn)
	-- split the pagename into sparate words
	titleWords =splitIntoWords(pn)
	
	-- check each words in turn, to see if it matches a month
	for w, thisWord in ipairs(titleWords) do
		-- check agaist each month
		-- if there is a match, then return that monthname
		for i, thisMonth in ipairs(monthList) do
			if (thisMonth == thisWord) then
				return thisMonth
			end
		end
	end

	--if we get here, none of the title words matches a whole month
	return ""

end

function p.main(frame)
	local args = getArgs(frame)
	return p._main(args)
end

function p._main(args)
	thispagename = nil
	if (args[1] ~= nil) then
		thispagename = args[1]
	else
		-- get the page title
		thispage = mw.title.getCurrentTitle()
		thispagename = thispage.text;
	end
	return checkPagename(thispagename)
end

return p