Module:Oldpuabox

此后如竟没有炬火,我便是唯一的光。
雨音浅夏留言 | 贡献2023年4月16日 (日) 16:15的版本
跳转到导航 跳转到搜索

可在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,1)/16)==14)then
            listk=listk+1
            strk=strk+3
            listout[listk]=(string.byte(strin,1)-224)*4096+(string.byte(strin,2)-128)*64+(string.byte(strin,3)-128)
        elseif(math.modf(string.byte(strin,1)/32)==6)then
            listk=listk+1
            strk=strk+2
            listout[listk]=(string.byte(strin,1)-192)*64+(string.byte(strin,2)-128)
        else
            listk=listk+1
            strk=strk+1
            listout[listk]=string.byte(strin,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(args[1])  --预处理包含的oldpua模板
end

return p