Difference between revisions of "Module:NUMBEROFSECTIONS"
Jump to navigation
Jump to search
blackwiki>Fred Gandt (if !nil) |
blackwiki>Fred Gandt (check for nil vals) |
||
| Line 39: | Line 39: | ||
end | end | ||
-- Otherwise, add the page name to our table | -- Otherwise, add the page name to our table | ||
| − | + | else | |
pages[#pages + 1] = value | pages[#pages + 1] = value | ||
end | end | ||
| Line 48: | Line 48: | ||
-- get the raw markup | -- get the raw markup | ||
haystack = mw.title.new(page) | haystack = mw.title.new(page) | ||
| − | -- count the sections and add to the total | + | if haystack then |
| − | + | -- count the sections and add to the total | |
| + | total = total + count(haystack:getContent(), needles) | ||
| + | end | ||
index = index + 1 | index = index + 1 | ||
page = pages[index] | page = pages[index] | ||
Revision as of 09:42, 25 March 2016
| This module is rated as alpha. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome. |
Usage
| Caution | This module is invoked by {{NUMBEROFSECTIONS}} |
sections{{ #invoke:NUMBEROFSECTIONS|main| page name [ # page name [ # ... ] ] | level = section level number(s) }}- Multiple page names (at least one required) are the
#delimited names of any Wikipedia pages (including namespaces). - section level(s) (required) is any group of numerals between 1 and 6 (inclusive) e.g.
435or5 3 4equates to:
- sections with a level
3( "===" ),4( "====" ) or5( "=====" ) heading.
- sections with a level
- Multiple page names (at least one required) are the
{{#invoke:NUMBEROFSECTIONS|main|Wikipedia:Village pump (technical)|level=2}}producesTemplate:NUMBEROFSECTIONS{{#invoke:NUMBEROFSECTIONS|main|Wikipedia:Village pump (technical)#Wikipedia:Village pump (proposals)|level=2}}producesTemplate:NUMBEROFSECTIONS
local p = {}
-- Counting function accepting a string haystack and table of needles
local function count(haystack, needles)
local number = 0
local index = 1
local needle = needles[index]
-- While we have needles to look for
while needle do
-- find them all in our haystack
for m in string.gmatch(haystack, needle) do
number = number + 1
end
index = index + 1
needle = needles[index]
end
return number
end
-- Function accepting any number of page names and section level numbers
function p.sections(frame)
local index = 1
local total = 0
local page = ""
local pages = {}
local needles = {}
local haystack = ""
-- Iterate through the args to find the page names and section levels
for key, value in pairs(frame.args) do
-- If the param specifies the section levels required
if key == 'level' then
-- for every section level number
for level in mw.text.gsplit(value, "") do
if level ~= " " then
-- add the needle to our table of needles
needles[#needles + 1] = "\n" ..
string.rep("=", tonumber(level)) .. "[^=]"
end
end
-- Otherwise, add the page name to our table
else
pages[#pages + 1] = value
end
end
-- For each page name in our table
page = pages[index]
while page do
-- get the raw markup
haystack = mw.title.new(page)
if haystack then
-- count the sections and add to the total
total = total + count(haystack:getContent(), needles)
end
index = index + 1
page = pages[index]
end
--[[ then return how many sections of the required level
are in all the pages passed ]]
return total
end
return p