Module:Table row counter/sandbox: Difference between revisions
Appearance
Content deleted Content added
I think this is how I want to do it. |
synch with main |
||
Line 58: | Line 58: | ||
return nil |
return nil |
||
end |
end |
||
⚫ | |||
local count |
local count |
||
-- If: Where statement, stash all the rows, figure out the column that is referenced, count instances of variable |
|||
if not args.wherevar == "" and args.whereval == "" then |
|||
local rows = {} |
|||
local iRows = 0 |
|||
-- TODO: Determine the WhereVar's column from the header row (return if not found) |
|||
-- Array all table rows into the rows local |
|||
-- For Each row, find the column determined previously and compare its value to the provided WhereVal, incriment count if true, move on if false |
|||
return count |
|||
⚫ | |||
else |
|||
do |
do |
||
local temp |
local temp |
||
temp, count = wikitable:gsub('\n|%-', '\n|-') |
temp, count = wikitable:gsub('\n|%-', '\n|-') |
||
⚫ | |||
end |
end |
||
Line 86: | Line 76: | ||
end |
end |
||
-- Subtract the number of rows to ignore, |
-- Subtract the number of rows to ignore, or the number of header |
||
-- below zero. |
-- rows if it's empty, and make sure the result isn't below zero. |
||
local headers |
|||
⚫ | |||
do |
|||
local temp |
|||
temp, headers = wikitable:gsub('\n|%-\n!', '\n|-\n!') |
|||
⚫ | |||
if not wikitable:find('^{|[^\n]*%s*\n|%-\n!') then |
|||
headers = headers + 1 |
|||
end |
|||
⚫ | |||
if count < 0 then |
if count < 0 then |
||
count = 0 |
count = 0 |
Revision as of 14:56, 5 January 2021
![]() | This is the module sandbox page for Module:Table row counter (diff). |
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 = {}
local getArgs
function p.main(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return p._main(getArgs(frame, {wrappers = 'Template:Table row counter'}))
end
function p._main(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
local s1 = content:match('^({|.-\n|})')
if s1 then
iWikitable = iWikitable + 1
wikitables[iWikitable] = s1
end
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[tonumber(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:find('^{|[^\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, or the number of header
-- rows if it's empty, and make sure the result isn't below zero.
local headers
do
local temp
temp, headers = wikitable:gsub('\n|%-\n!', '\n|-\n!')
end
if not wikitable:find('^{|[^\n]*%s*\n|%-\n!') then
headers = headers + 1
end
count = count - (tonumber(args.ignore) or headers)
if count < 0 then
count = 0
end
return count
end
return p