打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

模块:沙盒

来自 LNN的:not(博客)?
LNNBot留言 | 贡献2024年11月26日 (二) 21:49的版本 (导入1个版本:​从分支站同步更改)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

模块文档

[查看] [编辑]

用于测试的模块沙盒。

脚本错误:Lua错误:无法创建进程:proc_open(/dev/null): Failed to open stream: Operation not permitted

local p = {}
local libraryUtil = require("libraryUtil")
local bit32 = require("bit32")
local getArgs = require("Module:Arguments").getArgs

function p._sts(str)
	libraryUtil.checkType("_sts", 1, str, "string")
	local bytes = { str:byte(1, #str) }
	local zero = false
	for i, byte in ipairs(bytes) do
		local bits
		if     byte >= 0xf8 then error("bad utf-8 string in 'sts'")
		elseif byte >= 0xf0 then bits = bit32.band(byte, 0x07)
		elseif byte >= 0xe0 then bits = bit32.band(byte, 0x0f)
		elseif byte >= 0xc0 then bits = bit32.band(byte, 0x1f)
		elseif byte >= 0x80 then
			if zero then         bits = bit32.band(byte, 0x3f)
			else                 bits = 0x40
			end
		else                     bits = byte
		end
		zero = bits == 0

		bits = bit32.rshift(bits, 1)
		bits = bit32.bor(bits, bit32.rshift(bits, 1))
		bits = bit32.bor(bits, bit32.rshift(bits, 2))
		bits = bit32.bor(bits, bit32.rshift(bits, 4))
		bytes[i] = bit32.bxor(byte, bits)
	end
	return string.char(unpack(bytes))
end

function p.sts(frame)
	local args = getArgs(frame)
	local input = mw.text.killMarkers(frame.args[1])
	return p._sts(input)
end

function p.args(frame)
	return mw.text.nowiki(mw.text.jsonEncode(frame.args))
end

function p.getargs(frame)
	return mw.text.nowiki(mw.text.jsonEncode(getArgs(frame)))
end

return p