跳转到内容

模組:Ugly hacks

維基詞典,自由的多語言詞典

本模块可以给模板提供无法通过其他方法访问的函数。应移除没有使用的函数。

尽量不要使用本模块。如果您撰写的模板需要本模块,请考虑直接使用Lua重写该模板。

本模块利用追踪模板机制追踪使用本模块函数的模板,追踪模板名为Template:Tracking/ugly hacks/function_nameTemplate:Tracking/ugly hacks/function_name/from template_name。为保证追踪效果,切勿创建本模块函数的wrapper,应直接在必要的地方使用{{#invoke:}}

为了进一步避免本模块被使用,本模块的函数均不提供说明文档。要了解它们的用法和语法,请参考mw:Extension:Scribunto/Lua reference manual


local export = {}

function export.explode(frame)
	local wanted_index = tonumber(frame.args[3])
 
	local count = 1
	for item in mw.text.gsplit(frame.args[1], frame.args[2], true) do
		if count == wanted_index then
			return item
		end
		count = count + 1	
	end
	
	return ""
end

function export.substr(frame)
	return mw.ustring.sub(frame.args[1] or "", tonumber(frame.args[2]) or 1, tonumber(frame.args[3]) or -1)
end

function export.find(frame)
	return mw.ustring.find(frame.args[1] or "", frame.args[2] or "", 1, true) or ""
end

function export.find_pattern(frame)
	return mw.ustring.find(frame.args[1] or "", frame.args[2] or "", 1, false) or ""
end

function export.replace(frame)
	return (mw.ustring.gsub(frame.args[1] or "", frame.args[2] or "", frame.args[3] or ""))
end

function export.match(frame)
	return (mw.ustring.match(frame.args[1] or "", frame.args[2] or ""))
end

function export.escape_wiki(frame)
	return mw.text.nowiki(frame.args[1] or "")
end

function export.escape_html(frame)
	return mw.text.encode(frame.args[1] or "")
end

function export.zeropad(frame)
	if #frame.args[1] >= tonumber(frame.args[2]) then
		return frame.args[1]	
	else
		return mw.ustring.sub(string.rep("0", frame.args[2]) .. (frame.args[1] or ""), -frame.args[2])
	end
end

function export.is_valid_page_name(frame)
	return mw.title.new(frame.args[1]) and "valid" or ""
end

return setmetatable({ }, {
	__index = function(self, key)
		local m_debug = require('Module:debug')
		local frame = mw.getCurrentFrame()
		local pframe = frame:getParent()
		local tname = pframe and pframe:getTitle()

		m_debug.track('ugly hacks/' .. key)
		if pframe then
			m_debug.track('ugly hacks/' .. key .. '/from ' .. tname)
		else
			mw.log(debug.traceback('ugly hacks: parent frame not available'))
		end
		return export[key]	
	end
})