Module:Row numbers: Difference between revisions
Jump to navigation
Jump to search
en>Pppery m (Pppery moved page Module:Row counter to Module:Row indexer without leaving a redirect: Match template name) |
en>Pppery (Match name with template) |
||
Line 33: | Line 33: | ||
]] | ]] | ||
function p. | function p.row_indexer (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 | 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>'; | return '<span style=\"font-size:100%; font-style:normal;\" class=\"error\">error: missing nowiki tags</span>'; |
Revision as of 00:15, 19 May 2018
Implements {{Row numbers}}
require('Module:No globals'); local p={} local count = 0; -- initial values local hcount = count; --[[--------------------------< G E T _ C O U N T >------------------------------------------------------------ returns a counter value according to the keyword extracted from the table; maintains count and hcount 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; elseif '_row_count_hold' == keyword then -- current hcount value without increment return hcount; end end --[[--------------------------< R O W _ C O U N T E R >-------------------------------------------------------- replaces keywords _row_count and _row_count_hold from the table in frame.args[1] ]] function p.row_indexer (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 local tbl_str = mw.text.unstripNoWiki (frame.args[1]); -- get an already rendered table from whereever <nowiki>...</nowiki> put it tbl_str = tbl_str:gsub ('<', '<'); -- replace these character entities with their actual characters tbl_str = tbl_str:gsub ('>', '>'); -- mw.text.decode (tbl_str); is too aggressive while (tbl_str:find ('_row_count[^%s|]*')) do -- if there is at least one of our special reserved words tbl_str = tbl_str:gsub ('_row_count[^%s|]*', get_count, 1); -- replace it with a count end return frame:preprocess (tbl_str); -- done end return p;