Модуль:Row numbers
Матеріал з Енциклопедія Жидачівщини
Версія від 08:42, 29 серпня 2021, створена Dinamicandriy (обговорення | внесок) (Створена сторінка: require('Module:No globals'); local count; local hcount; --[[--------------------------< G E T _ C O U N T >-------------------------------------------------...)
Документацію для цього модуля можна створити у Модуль: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 }