Jump to content

Module:Table row counter

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Mr. Stradivarius (talk | contribs) at 08:09, 21 June 2014 (create a module that counts table rows in wikitext). 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)

-- This module counts table rows in wikitext.

local p = {}

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {parentOnly = true})
	local sectionKey = args.section
	local page = args.page
	local success, titleObj = pcall(mw.title.new, page)
	if not success or not titleObj then
		titleObj = mw.title.getCurrentTitle()
	end
	return p.luaMain(sectionKey, titleObj) or ''
end

function p.luaMain(sectionKey, titleObj)
	local content = titleObj:getContent()
	if not content then
		return nil
	end
	local text = p.findSection(content, sectionKey) or content
	return p.countRows(text)
end

function p.cleanPattern(s)
	-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
	s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
	return s
end

function p.findSection(content, sectionKey)
	if not section then
		return nil
	end
	section = p.cleanPattern(section)
	local match = content:match('{{%s*[Cc]ount table rows%s*|%s*section%s*=%s*' .. section .. '%s*}}')
	return match
end

function p.countRows(s)
	local result, count = s:gsub('\n|-', '\n|-')
	return count
end