Jump to content
Wikipedia The Free Encyclopedia

Module:NUMBEROFSECTIONS

From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing.
Page template-protected This module is currently protected from editing.
See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected.

Usage

Caution This module is invoked by {{NUMBEROFSECTIONS }}
sections
{{ #invoke:NUMBEROFSECTIONS|main| page name [ # page name [ # ... ] ] | level = section level number(s) }}
  1. Multiple page names (at least one required) are the # delimited names of any Wikipedia pages (including namespaces).
  2. section level(s) (required) is any group of numerals between 1 and 6 (inclusive) e.g. 435 or 5 3 4 equates to:
sections with a level 3 ( "===" ), 4 ( "====" ) or 5 ( "=====" ) heading.
{{#invoke:NUMBEROFSECTIONS|main|Wikipedia:Village pump (technical)|level=2}} produces 24
{{#invoke:NUMBEROFSECTIONS|main|Wikipedia:Village pump (technical)#Wikipedia:Village pump (proposals)|level=2}} produces 31
The above documentation is transcluded from Module:NUMBEROFSECTIONS/doc. (edit | history)
Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Subpages of this module.

 localp={}

 -- Unescape functionality grabbed from https://stackoverflow.com/a/14899740/1832568
 localfunctionunescape(str)
 str=string.gsub(str,'&#(%d+);',string.char)
 str=string.gsub(str,'&#x(%d+);',function(n)returnstring.char(tonumber(n,16))end)
 returnstr
 end

 -- Counting function accepting a string haystack and table of needles
 localfunctioncount(haystack,needles)
 localnumber=0
 -- While we have needles to look for
 forindex,needleinipairs(needles)do
 -- find them all in our haystack
 forminstring.gmatch(haystack,needle)do
 number=number+1
 end
 end
 returnnumber
 end

 -- Function takes any number of # delimited page names and section level numbers
 functionp.main(frame)
 localtotal=0
 localneedles={}
 localhaystack=''
 -- Separate page names from # delimited string into table
 localpages=mw.text.split(unescape(frame.args[1]),'%s*#%s*')
 -- Separate whitespace delimited section level numbers into table
 locallevels=mw.text.split(frame.args['level'],'%s*')
 -- Iterate through levels
 forlevelinmw.text.gsplit(table.concat(levels),'')do
 -- and add the level needle to needles
 needles[#needles+1]='\n'..string.rep('=',tonumber(level))..'[^=]'
 end
 -- For each page name in pages
 forindex,pageinipairs(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
 ifhaystackthen
 --[[ 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
 		 are in all the pages passed ]]
 returntotal
 end

 returnp

AltStyle によって変換されたページ (->オリジナル) /