Modul:CatUtil
| Vorlagenprogrammierung | Diskussionen | Lua | Unterseiten | |||
| Modul | Deutsch | English
|
Modul: | Dokumentation | ||
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
--[=[ 2014-12-18
CatUtil
* count()
* countYears()
]=]
-- table for export
local CatUtil = {}
-- limitation with some leeway
local MaxQueries = 400
local function fault( alert, frame )
-- Format message with class="error"
-- alert -- string, with message
-- frame -- object
-- Returns message with markup
local r = alert
if frame then
r = string.format( "%s * %s", frame:getTitle(), r )
end
r = string.format( "<span class=\"error\">ERROR * %s</span>", r )
return r
end -- fault()
local function figure( achieve, alike, about )
-- Count items in categories
-- achieve -- table, with category titles
-- alike -- string, with type, or nil
-- all pages files subcats
-- about -- string, with name of calling function
-- Returns number
local n = #achieve
local r = 0
local scope
if alike then
local support = "|all|pages|files|subcats|"
local seek
scope = alike:lower()
seek = string.format( "|%s|", scope )
if not support:find( seek, 1, true ) then
n = -1
r = string.format( "CatUtil::%s scope='%s'",
about, alike )
r = fault( r )
end
else
scope = "pages"
end
for i = 1, n do
r = r + mw.site.stats.pagesInCategory( achieve[ i ], scope )
end -- for i
return r
end -- figure()
local function format( achieve, args, about )
-- Evaluate and format result
-- achieve -- table, with category titles
-- args -- table, with options
-- about -- string, with name of calling function
-- Returns number or string
local r
if #achieve > MaxQueries then
r = string.format( "CatUtil:: max cat: %d > %d",
#titles, MaxQueries )
else
r = figure( achieve, args.scope, about )
if type( r ) == "number" then
if r == 0 then
if args.show0 then
r = args.show0
end
elseif args.showN or args.show1 then
if r == 1 and args.show1 then
r = args.show1
elseif args.showN:find( "%d", 1, true ) then
r = string.format( args.showN, r )
else
r = args.showN
end
end
end
end
return r
end -- format()
CatUtil.count = function ( args )
local support = "|scope|show0|show1|showN|"
local titles = { }
local r, seek, unknown
for k, v in pairs( args ) do
if type( k ) == "number" then
table.insert( titles, v )
else
seek = string.format( "|%s|", k )
if not support:find( seek, 1, true ) then
if not unknown then
unknown = { }
end
table.insert( unknown, k .. "=" )
end
end
end -- for k, v
if unknown then
r = string.format( "'<code>%s</code>' in CatUtil::count",
table.concat( unknown, " " ) )
r = fault( r )
else
r = format( titles, args, "count" )
end
return r
end -- .count()
CatUtil.countYears = function ( args )
local support = "|scope|serial|show0|show1|showN|since|stop|"
local r, seek, unknown
for k, v in pairs( args ) do
if type( k ) == "number" then
k = tostring( k )
end
seek = string.format( "|%s|", k )
if not support:find( seek, 1, true ) then
if not unknown then
unknown = { }
end
table.insert( unknown, k .. "=" )
end
end -- for k, v
if unknown then
r = string.format( "'<code>%s</code>' in CatUtil::countYears",
table.concat( unknown, " " ) )
r = fault( r )
else
local min, max
if args.serial then
if args.serial:find( "%d", 1, true ) then
if args.since then
if args.since:match( "^%d+$" ) then
local jump
min = tonumber( args.since )
if args.stop then
if args.stop:match( "^%d+$" ) then
max = args.stop
elseif args.stop:match( "^[%+%-]%d+$" ) then
jump = tonumber( args.stop )
else
r = string.format( "stop=???%s???",
args.stop )
end
end
if not r then
if not max then
max = os.date( "%Y" )
end
max = tonumber( max )
if jump then
max = max + jump
end
if min >= max then
r = string.format( "%s %d < %d",
"stop > since !!",
min, max )
elseif max - min > MaxQueries then
r = string.format( ">max: %d-%d > %d",
max, min, MaxQueries )
end
end
else
r = string.format( "since=???%s???",
args.since )
end
else
r = "since=???"
end
else
r = "serial=...'%d'"
end
else
r = "serial=???"
end
if r then
r = string.format( "CatUtil::countYears %s", r )
r = fault( r )
else
local titles = { }
for i = min, max do
table.insert( titles,
string.format( args.serial, i ) )
end -- for i
r = format( titles, args, "countYears" )
end
end
return r
end -- .countYears()
-- Export
local p = { }
p.execute = function ( activate, args )
local r
if CatUtil[ activate ] then
local lucky
lucky, r = pcall( CatUtil[ activate ], args )
else
r = "ERROR CatUtil::execute() activate=" .. tostring( activate )
end
return r
end
p.count = function ( frame )
local lucky, r = pcall( CatUtil.count, frame:getParent().args )
if not lucky then
r = fault( r, frame )
end
return r
end
p.countYears = function ( frame )
local lucky, r = pcall( CatUtil.countYears, frame:getParent().args )
if not lucky then
r = fault( r, frame )
end
return r
end
function p.CatUtil()
return CatUtil
end
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.