Toggle menu
15
236
70
27.5K
Kenshi Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
Revision as of 06:10, 23 February 2025 by Prd (talk | contribs) (Created page with "-- This module counts table rows with specified template name in wikitext. local p = {} local getArgs function p.main(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return p._main(getArgs(frame, {wrappers = 'Template:Table template counter'})) end function p._main(args) -- Get the title object. local titleObj do local success success, titleObj = pcall(mw.title.new, args.page) if not success or not titleObj then titleObj =...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Implements {{table template counter}}


-- This module counts table rows with specified template name in wikitext.

local p = {}
local getArgs

function p.main(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	return p._main(getArgs(frame, {wrappers = 'Template:Table template counter'}))
end

function p._main(args)
	-- Get the title object.
	local titleObj
	do
		local success
		success, titleObj = pcall(mw.title.new, args.page)
		if not success or not titleObj then
			titleObj = mw.title.getCurrentTitle()
		end
	end

	-- Get the page content.
	local content = titleObj:getContent()
	if not content then
		return nil
	end

	-- Find the wikitables on that page.
	local wikitables = {}
	do
		local iWikitable = 0
		local s1 = content:match('^({|.-\n|})')
		if s1 then
			iWikitable = iWikitable + 1
			wikitables[iWikitable] = s1
		end
		for s in content:gmatch('\n({|.-\n|})') do
			iWikitable = iWikitable + 1
			wikitables[iWikitable] = s
		end
	end

	-- Find the wikitable to work on.
	local wikitable
	if args.id then
		for i, s in ipairs(wikitables) do
			if s:match('^{|[^\n]*id *= *" *(%w+) *"') == args.id then
				wikitable = s
				break
			end
		end
	else
		wikitable = wikitables[tonumber(args.tableno) or 1]
	end
	if not wikitable then
		return nil
	end

	-- Count the number of rows with the entered template name.

	local count = 0
	if args.templatename then
		do
				local temp
				temp, count = string.lower(wikitable):gsub('|%-[|\n%-:;=\"\'%[%w%s%(%)%]%!]*%{%{'..string.lower(args.templatename)..'|[\'%[%a%s%(%:%-%–%|%d%)%]]+%}%}', '{{'..args.templatename..'}}')
		end
	end
	if count < 0 then
		count = 0
	end
	return count
end

return p