Module:NUMBEROFSECTIONS: Difference between revisions

Content deleted Content added
to be expanded - pushing to module space early due to strange sandbox results
 
slight improvement for handling unexpected-and-wanted whitespace around the # delimiters; %s? --> %s* i.e. possible single whitespace char --> zero or more whitespace chars
 
(20 intermediate revisions by 6 users not shown)
Line 1:
local p = {}
 
-- Unescape functionality grabbed from https://stackoverflow.com/a/14899740/1832568
local function count(raw, seclevs)
local nosfunction = 0unescape(str)
str = string.gsub(str, '&#(%d+);', string.char)
local index = 1
str = string.gsub(str, '&#x(%d+);', function(n) return string.char(tonumber(n, 16)) end)
local lev = seclevs[index]
return str
while lev do
end
for m in string.gmatch(raw, "\n" .. lev .. "[^=]") do
 
nos = nos + 1
-- Counting function accepting a string haystack and table of needles
local function count(rawhaystack, seclevsneedles)
local indexnumber = 10
-- While we have needles to look for
for index, needle in ipairs(needles) do
-- find them all in our haystack
for m in string.gmatch(rawhaystack, "\n" .. lev .. "[^=]"needle) do
nosnumber = nosnumber + 1
end
index = index + 1
lev = seclevs[index]
end
return nosnumber
end
 
-- Function takes any number of # delimited page names and section level numbers
function p.sectionsmain(frame)
local levels = {}
local leveltotal = frame.args[2]0
local titleneedles = mw.title.new(frame.args[1]){}
local levelshaystack = {}''
for value in mw.text.gsplit(level, "") do
-- Separate page names from # delimited string into table
if value ~= " " then
local pages = mw.text.split(unescape(frame.args[1]), '%s*#%s*')
levels[#levels + 1] = string.rep("=", tonumber(value))
-- Separate whitespace delimited section level numbers into table
local levels = mw.text.split(frame.args['level'], '%s*')
-- Iterate through levels
for valuelevel in mw.text.gsplit(leveltable.concat(levels), ""'') do
-- and add the level needle to needles
levelsneedles[#levelsneedles + 1] = '\n'..string.rep("'="', tonumber(valuelevel))..'[^=]'
end
-- For each page name in pages
for index, page in ipairs(pages) do
-- create a haystack to search from the page content
haystack = mw.title.new(page):getContent()
-- If we've requested the content of a legitimate page
if value ~= " "haystack then
--[[ pass the raw markup and needles to count
and add the return to total ]]
total = total + count('\n' .. haystack, needles)
end
end
--[[ then return how many sections of the required level
return count(title:getContent(), levels)
are in all the pages passed ]]
return total
end