Module:NUMBEROFSECTIONS: Difference between revisions

Content deleted Content added
m minor var name change for clarity + amend comments to match
slight improvement for handling unexpected-and-wanted whitespace around the # delimiters; %s? --> %s* i.e. possible single whitespace char --> zero or more whitespace chars
 
(13 intermediate revisions by 6 users not shown)
Line 1:
local p = {}
 
-- Unescape functionality grabbed from https://stackoverflow.com/a/14899740/1832568
local function unescape(str)
str = string.gsub(str, '&#(%d+);', string.char)
str = string.gsub(str, '&#x(%d+);', function(n) return string.char(tonumber(n, 16)) end)
return str
end
 
-- Counting function accepting a string haystack and table of needles
Line 15 ⟶ 22:
 
-- Function takes any number of # delimited page names and section level numbers
function p.sectionsmain(frame)
local total = 0
local needles = {}
local title_objhaystack = ""''
-- Separate page names from # delimited string into table
local pages = mw.text.split(unescape(frame.args[1]), '%s?*#%s?*')
-- Separate whitespace delimited section level numbers into table
local levels = mw.text.split(frame.args['level'], '%s*')
Line 30 ⟶ 37:
-- For each page name in pages
for index, page in ipairs(pages) do
-- create a haystack to search from the page content
title_objhaystack = mw.title.new(page):getContent()
-- ifIf we've requestrequested the content of a legitimate page
if title_objhaystack then
--[[ pass the raw markup and needles to count
and add the return to total ]]
total = total + count(title_obj:getContent()'\n' .. haystack, needles)
end
end