Difference between revisions of "Module:NUMBEROFSECTIONS"
Jump to navigation
Jump to search
blackwiki>Fred Gandt (to be expanded - pushing to module space early due to strange sandbox results) |
blackwiki>Fred Gandt (a few simple comments and preparedness for expansion) |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
| − | local function count( | + | -- Counting function accepting a string haystack and table of needles |
| − | local | + | local function count(haystack, needles) |
| + | local number = 0 | ||
local index = 1 | local index = 1 | ||
| − | local | + | local needle = needles[index] |
| − | while | + | -- While we have needles to look for |
| − | for m in string.gmatch( | + | while needle do |
| − | + | -- find them all in our haystack | |
| + | for m in string.gmatch(haystack, needle) do | ||
| + | number = number + 1 | ||
end | end | ||
index = index + 1 | index = index + 1 | ||
| − | + | needle = needles[index] | |
end | end | ||
| − | return | + | return number |
end | end | ||
| + | -- Function accepting a page name and section level numbers | ||
function p.sections(frame) | function p.sections(frame) | ||
| − | local | + | local needles = {} |
| − | local | + | local levels = frame.args[2] |
local title = mw.title.new(frame.args[1]) | local title = mw.title.new(frame.args[1]) | ||
| − | for | + | -- For every section level number |
| − | if | + | for level in mw.text.gsplit(levels, "") do |
| − | + | if level ~= " " then | |
| + | -- add the needle to our table of needles | ||
| + | needles[#needles + 1] = "\n" .. | ||
| + | string.rep("=", tonumber(level)) .. "[^=]" | ||
end | end | ||
end | end | ||
| − | return count(title:getContent(), | + | -- then return how many needles are in our haystack |
| + | return count(title:getContent(), needles) | ||
end | end | ||
return p | return p | ||
Revision as of 15:52, 24 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
| 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 a page name and section level numbers
function p.sections(frame)
local needles = {}
local levels = frame.args[2]
local title = mw.title.new(frame.args[1])
-- For every section level number
for level in mw.text.gsplit(levels, "") do
if level ~= " " then
-- add the needle to our table of needles
needles[#needles + 1] = "\n" ..
string.rep("=", tonumber(level)) .. "[^=]"
end
end
-- then return how many needles are in our haystack
return count(title:getContent(), needles)
end
return p