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 tableNo = tonumber(args[1])
local ignoreRows = tonumber(args.ignore)
local page = args.page
local success, titleObj = pcall(mw.title.new, page)
if not success then
titleObj = nil
end
return p.luaMain(tableNo, ignoreRows, titleObj) or ''
end
function p.luaMain(tableNo, ignoreRows, titleObj)
titleObj = titleObj or mw.title.getCurrentTitle()
-- Get the page content.
local content = titleObj:getContent()
if not content then
return nil
end
-- Find the wikitables on that page.
local wikitables = {}
do
local iWikitable = 0
for s in content:gmatch('\n({|.-\n|})') do
iWikitable = iWikitable + 1
wikitables[iWikitable] = s
end
end
-- Find the wikitable to work on.
tableNo = tableNo or 1
local wikitable = wikitables[tableNo]
if not wikitable then
return nil
end
-- Count the number of rows.
local count
do
local temp
temp, count = wikitable:gsub('\n|%-', '\n|-')
end
-- Control for missing row markers at the start.
if not wikitable:match('^{|[^\n]-%s*\n|-') then
count = count + 1
end
-- Control for extra row markers at the end.
if wikitable:find('\n|%-[^\n]-%s*\n|}$') then
count = count - 1
end
-- Subtract the number of rows to ignore, and make sure the result isn't below zero.
ignoreRows = ignoreRows or 0
count = count - ignoreRows
if count < 0 then
count = 0
end
return count
end
return p