Module:Table row counter: Difference between revisions
Appearance
Content deleted Content added
add missing function parameter |
allow finding tables with an "id" parameter |
||
Line 5: | Line 5: | ||
function p.main(frame) |
function p.main(frame) |
||
local args = require('Module:Arguments').getArgs(frame, {parentOnly = true}) |
local args = require('Module:Arguments').getArgs(frame, {parentOnly = true}) |
||
⚫ | |||
local tableNo = tonumber(args[1]) |
|||
⚫ | |||
local page = args.page |
|||
⚫ | |||
⚫ | |||
titleObj = nil |
|||
⚫ | |||
⚫ | |||
end |
end |
||
function p.luaMain( |
function p.luaMain(args) |
||
-- Get the title object. |
|||
⚫ | |||
local titleObj |
|||
do |
|||
local success |
|||
⚫ | |||
⚫ | |||
⚫ | |||
end |
|||
⚫ | |||
-- Get the page content. |
-- Get the page content. |
||
Line 35: | Line 36: | ||
-- Find the wikitable to work on. |
-- Find the wikitable to work on. |
||
⚫ | |||
tableNo = tableNo or 1 |
|||
if args.id then |
|||
⚫ | |||
for i, s in ipairs(wikitables) do |
|||
if s:match('^{|[^\n]*id *= *" *(%w+) *"') == args.id then |
|||
wikitable = s |
|||
break |
|||
end |
|||
end |
|||
else |
|||
wikitable = wikitables[args.tableno or 1] |
|||
end |
|||
if not wikitable then |
if not wikitable then |
||
return nil |
return nil |
||
Line 58: | Line 68: | ||
end |
end |
||
-- Subtract the number of rows to ignore, and make sure the result isn't below zero. |
-- 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 |
if count < 0 then |
||
count = 0 |
count = 0 |
Revision as of 03:56, 22 June 2014
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})
return p.luaMain(args) or ''
end
function p.luaMain(args)
-- Get the title object.
local titleObj
do
local success
success, titleObj = pcall(mw.title.new, args.page)
if not success or not titleObj then
titleObj = mw.title.getCurrentTitle()
end
end
-- 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.
local wikitable
if args.id then
for i, s in ipairs(wikitables) do
if s:match('^{|[^\n]*id *= *" *(%w+) *"') == args.id then
wikitable = s
break
end
end
else
wikitable = wikitables[args.tableno or 1]
end
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.
count = count - (tonumber(args.ignore) or 0)
if count < 0 then
count = 0
end
return count
end
return p