Module:Oldpuabox
此模块的文档可以在Module:Oldpuabox/doc创建
local p = {}
local getArgs = require('Module:Arguments').getArgs
function p.str2codelist(strin) --转换字符串到unicode码位构成的数组,仅支持第一平面字符
local listout={}
local strk=1
local listk=1
while strk <= #strin do
if(math.modf(string.byte(strin,strk)/16)==14)then
listout[listk]=(string.byte(strin,strk)-224)*4096+(string.byte(strin,strk+1)-128)*64+(string.byte(strin,strk+2)-128)
listk=listk+1
strk=strk+3
elseif(math.modf(string.byte(strin,strk)/32)==6)then
listout[listk]=(string.byte(strin,strk)-192)*64+(string.byte(strin,strk+1)-128)
listk=listk+1
strk=strk+2
else
listout[listk]=string.byte(strin,strk)
listk=listk+1
strk=strk+1
end
end
return listout
end
function p.code2str(codein) --转换unicode码位到对应字符,仅支持第一平面字符
if(codein>=2048)then
return string.char(224+math.modf(codein/4096),128+math.modf((codein%4096)/64),128+codein%64)
elseif(codein>=128)then
return string.char(192+math.modf(codein/64),128+codein%64)
else
return string.char(codein)
end
end
function p.addsprite(frame) --转换字符中旧pua的部分为sprite图
local args = getArgs(frame)
local list = p.str2codelist(args[1])
local out = ""
for k,v in ipairs(list)do
if(v>=57344 and v<=60159)then --在sprite支持的范围
out=out.."{{Oldpuasim|"..p.code2str(v).."}}"
else
out=out..p.code2str(v)
end
end
return frame:preprocess(out) --预处理包含的oldpua模板
end
return p