模組:DYKCount
外观
local p={}
local lib_var={};
function p.find_dyk_edit_by_DYKEntry(frame)
local pattern = "{{%s*DYKEntry%s*|.-timestamp%s*="
if lib_var._arg_process == nil then lib_var = require('Module:Var') end
local args, working_frame = lib_var._arg_process(frame)
local title = args[1] or args['1']
local offset = tonumber(args[2] or args['2'] or '0') or 0
title = mw.title.new( args[1], '')
if title then
local wikitext = title:getContent()
wikitext = mw.text.decode(wikitext)
local _,count = mw.ustring.gsub(wikitext, pattern, '')
local h_id = count + 1 + offset
return title:fullUrl( {action='edit',section=h_id}, 'relative' )
end
return ''
end
function p.find_dyk_edit_by_hN(frame)
local pattern = "\127'\"`UNIQ%-%-h%-(%d+)%-%-QINU`\"'\127"
if lib_var._arg_process == nil then lib_var = require('Module:Var') end
local args, working_frame = lib_var._arg_process(frame)
local title = args[1] or args['1']
local offset = tonumber(args[2] or args['2'] or '0') or 0
title = mw.title.new( args[1], '')
if title then
local wikitext = title:getContent()
wikitext = mw.text.decode(wikitext)
wikitext = mw.ustring.gsub(wikitext, '[%[%{%}%]]', '')
local avoid_r = working_frame:newChild{ title = title.fullText, args = {} }
local checker = avoid_r:preprocess( "== ~ ==\n\n" .. wikitext )
local max_id, min_id = 0, -1
mw.ustring.gsub(checker, pattern, function(h_id)
local h_idx = tonumber(h_id) -- <h></h>或章節標題的strip marker是十進位 (截至2020年3月4日,如未來有更動請改新增第二參數)
if h_idx then
if h_idx > max_id then max_id = h_idx end
if min_id < 0 or h_idx < max_id then min_id = h_idx end
end
end)
return title:fullUrl( {action='edit',section=(max_id + offset - min_id - 1)}, 'relative' )
end
return ''
end
function p.getDYKCount(frame)
if lib_var._arg_process == nil then lib_var = require('Module:Var') end
local args, working_frame = lib_var._arg_process(frame)
local input_n = mw.text.trim(args[1] or args['1'] or '')
local src = working_frame:preprocess{ text = "{{msgnw:" .. input_n .. "}}" }
local st,ed = mw.ustring.find(src, "{{%s-[Pp]roduceEncouragement%s-|%s-count%s-=%s-%d+%s-}}" );
if st then
local dyk_template = mw.ustring.sub(src, st,ed)
st,ed = mw.ustring.find(dyk_template, "count%s-=%s-%d+" )
dyk_template = mw.text.decode(mw.ustring.sub(dyk_template, st,ed))
st,ed = mw.ustring.find(dyk_template, "%d+" )
local dyk_count = mw.ustring.sub(dyk_template, st,ed)
return dyk_count;
else
return 0;
end
end
return p;