Module:Oldpuabox:修订间差异
无编辑摘要 标签:已被回退 |
无编辑摘要 |
||
(未显示同一用户的5个中间版本) | |||
第7行: | 第7行: | ||
local listk=1 | local listk=1 | ||
while strk <= #strin do | while strk <= #strin do | ||
if(math.modf(string.byte(strin, | if(math.modf(string.byte(strin,strk)/16)==14)then | ||
listk=listk+1 | 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 | 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 | strk=strk+2 | ||
else | else | ||
listk=listk+1 | listout[listk]=string.byte(strin,strk) | ||
listk=listk+1 | |||
strk=strk+1 | strk=strk+1 | ||
end | end | ||
end | end | ||
第40行: | 第40行: | ||
for k,v in ipairs(list)do | for k,v in ipairs(list)do | ||
if(v>=57344 and v<=60159)then --在sprite支持的范围 | if(v>=57344 and v<=60159)then --在sprite支持的范围 | ||
out=out.."{{ | out=out.."{{Oldpuasim|"..p.code2str(v).."}}" | ||
else | else | ||
out=out..p.code2str(v) | out=out..p.code2str(v) | ||
end | end | ||
end | end | ||
return frame:preprocess( | return frame:preprocess(out) --预处理包含的oldpua模板 | ||
end | end | ||
return p | return p |
2023年4月16日 (日) 17:53的最新版本
此模块的文档可以在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