Module:Oldpuabox:修订间差异

此后如竟没有炬火,我便是唯一的光。
跳转到导航 跳转到搜索
无编辑摘要
无编辑摘要
第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.."{{Oldpua|"..p.code2str(v).."}"
out=out.."{{Oldpua|"..p.code2str(v).."}}"
else
else
out=out..p.code2str(v)
out=out..p.code2str(v)

2023年4月16日 (日) 16:33的版本

可在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.."{{Oldpua|"..p.code2str(v).."}}"
        else
            out=out..p.code2str(v)
        end
    end
    return frame:preprocess(out)  --预处理包含的oldpua模板
end

return p