Module:Row numbers: Difference between revisions
en>Manabimasu No edit summary |
en>Trappist the monk No edit summary |
||
| Line 1: | Line 1: | ||
require('Module:No globals'); | require('Module:No globals'); | ||
local count | local count; | ||
local hcount | local hcount; | ||
--[[--------------------------< G E T _ C O U N T >------------------------------------------------------------ | --[[--------------------------< G E T _ C O U N T >------------------------------------------------------------ | ||
returns a counter value according to the keyword extracted from the table; maintains count and hcount | returns a counter value according to the keyword extracted from the table; maintains count and hcount. Inserts | ||
a space character ahead of <count> or <hcount> so that, in the case of negative indexes, the negation operator | |||
is not mistaken for part of the wikitable markup. Returns: | |||
| -<count> – a cell value | |||
instead of: | |||
|-<count> – row markup with extraneous text | |||
The keywords have the meanings: | The keywords have the meanings: | ||
| Line 17: | Line 22: | ||
local function get_count (keyword) | local function get_count (keyword) | ||
count = count + 1; -- always bump the count | count = count + 1; -- always bump the count | ||
if '_row_count' == keyword then -- bump hcount, return new count value | if '_row_count' == keyword then -- bump hcount, return new count value | ||
hcount = count; | hcount = count; | ||
return count; | return ' ' .. count; -- insert a leading space ahead of count | ||
elseif '_row_count_hold' == keyword then -- current hcount value without increment | elseif '_row_count_hold' == keyword then -- current hcount value without increment | ||
return hcount; | return ' ' .. hcount; -- insert a leading space ahead of hcount | ||
end | end | ||
end | end | ||
--[[--------------------------< R O W _ | --[[--------------------------< R O W _ N U M B E R S >-------------------------------------------------------- | ||
replaces keywords _row_count and _row_count_hold from the table in frame.args[1] | replaces keywords _row_count and _row_count_hold from the table in frame.args[1] | ||
| Line 37: | Line 41: | ||
return '<span style=\"font-size:100%; font-style:normal;\" class=\"error\">error: missing nowiki tags</span>'; | return '<span style=\"font-size:100%; font-style:normal;\" class=\"error\">error: missing nowiki tags</span>'; | ||
end | end | ||
count = (frame.args.index and frame.args.index:match ('^%d+$') or 1) - 1; -- only if a number; |index= may be omitted (nil), or empty string, or non-digit; initial value is 0 | |||
local tbl_str = mw.text.unstripNoWiki (frame.args[1]); -- get the table from the nowiki tags passed as arguments | local tbl_str = mw.text.unstripNoWiki (frame.args[1]); -- get the table from the nowiki tags passed as arguments | ||
| Line 44: | Line 49: | ||
tbl_str = tbl_str:gsub ('>', '>'); -- (mw.text.decode (tbl_str); is too aggressive) | tbl_str = tbl_str:gsub ('>', '>'); -- (mw.text.decode (tbl_str); is too aggressive) | ||
return frame:preprocess (tbl_str:gsub('_row_count[_%w]*', get_count)); | return frame:preprocess (tbl_str:gsub('_row_count[_%w]*', get_count)); -- if there is at least one of our special reserved words, replace it with a count | ||
end | end | ||
Revision as of 22:56, 18 April 2021
Implements {{Row numbers}}
require('Module:No globals');
local count;
local hcount;
--[[--------------------------< G E T _ C O U N T >------------------------------------------------------------
returns a counter value according to the keyword extracted from the table; maintains count and hcount. Inserts
a space character ahead of <count> or <hcount> so that, in the case of negative indexes, the negation operator
is not mistaken for part of the wikitable markup. Returns:
| -<count> – a cell value
instead of:
|-<count> – row markup with extraneous text
The keywords have the meanings:
_row_count: use row counter value (count); the hold counter (hcount) is same as count
_row_count_hold: use the value currently assigned to hcount; bump count but do not bump hcount
]]
local function get_count (keyword)
count = count + 1; -- always bump the count
if '_row_count' == keyword then -- bump hcount, return new count value
hcount = count;
return ' ' .. count; -- insert a leading space ahead of count
elseif '_row_count_hold' == keyword then -- current hcount value without increment
return ' ' .. hcount; -- insert a leading space ahead of hcount
end
end
--[[--------------------------< R O W _ N U M B E R S >--------------------------------------------------------
replaces keywords _row_count and _row_count_hold from the table in frame.args[1]
]]
local function row_numbers (frame)
if not frame.args[1]:match ('^%s*\127[^\127]*UNIQ%-%-nowiki%-%x%x%x%x%x%x%x%x%-QINU[^\127]*\127%s*$') then -- make sure that what we get for input has been wrapped in <nowiki>...</nowiki> tags
return '<span style=\"font-size:100%; font-style:normal;\" class=\"error\">error: missing nowiki tags</span>';
end
count = (frame.args.index and frame.args.index:match ('^%d+$') or 1) - 1; -- only if a number; |index= may be omitted (nil), or empty string, or non-digit; initial value is 0
local tbl_str = mw.text.unstripNoWiki (frame.args[1]); -- get the table from the nowiki tags passed as arguments
tbl_str = tbl_str:gsub ('<', '<'); -- undo <nowiki>'s escaping of the wikitext
tbl_str = tbl_str:gsub ('>', '>'); -- (mw.text.decode (tbl_str); is too aggressive)
return frame:preprocess (tbl_str:gsub('_row_count[_%w]*', get_count)); -- if there is at least one of our special reserved words, replace it with a count
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
row_numbers = row_numbers
}