Module:Table row counter
Appearance
This module implements the {{table row counter}} template.
Usage from wikitext
This module can be used from wikitext in the same way as the {{table row counter}} template, by simply using {{#invoke:table row counter | main}}
in place of {{table row counter}}
.
Usage from Lua modules
To use this module from other Lua modules, first load the module.
local mTRC = require('Module:Table row counter')
You can then count table rows by using the _main function.
mTRC._main(args)
args is a table containing the module arguments. See the template documentation for more information about the available arguments, and for general caveats about this module's use.
-- 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